В предыдущей статье мы рассматривали как настроить Google Indexing API Возникает вопрос, а можно ли тоже самое повторить в Яндексе для массовой индексации? Разумеется, можно.
В статье расскажем, как пошагово настроить Index Now, чтобы массово передавать адреса страниц для переиндексации Яндексом, не дожидаясь планового посещения роботами.
Самый распространенный вариант заставить роботов Яндекса переобойти страницы — панель Вебмастера: Индексирование – Переобход страниц.
В примере указано 790 запросов дневного лимита, что достаточно много. Однако лимиты на переобход назначаются сайтам индивидуально и автоматически со стороны Яндекса. У вас вполне может быть и больше, и меньше.
А что если необходимо обновить индекс большего количества страниц, а лимит вашего сайта меньше. Или у вас сеть поддоменов и лимита вам не хватает? В этом вам поможет Index Now.
IndexNow — это открытый протокол, поддерживаемый Яндексом. Он позволяет мгновенно уведомлять поисковые системы об изменениях на сайте: появлении новых страниц, обновлении контента или удалении старых. Отличительная черта протокола в том, что дневной лимит на отправку составляет 10 000 запросов.
Обычно поисковые роботы сами решают, когда и как часто заходить на ваш сайт, соответственно краулинговому бюджету сайта. Для новых или редко обновляемых ресурсов ожидание планового сканирования может занять дни или даже недели. IndexNow убирает это ожидание, отправляя поисковой системе прямой сигнал (ping) с указанием конкретного URL.
На данный момент протокол IndexNow используют Яндекс, Bing и Seznam.
Если вы отправляете запрос в одну из поддерживаемых поисковых систем (например, в Bing), она автоматически делится этой информацией с другими участниками протокола. Вам не нужно отправлять запрос в каждый поисковик отдельно. То есть, настройка IndexNow через Bing обеспечивает вам отправку URL в Яндекс.
На популярных CMS (WordPress, MODx и др.) часто всего используют SEO-плагины (например, Rank Math, Yoast SEO или All in One SEO). Они сами генерируют ключ, размещают его на сервере и автоматически отправляют сигналы при публикации материалов.
На самописных сайтах нужно сгенерировать API-ключ, разместить текстовый файл с этим ключом в корне сайта, а затем при каждом изменении контента отправлять HTTP-запрос на серверы поисковых систем.
Настройка и генерация происходят достаточно просто.
1. Добавьте сайт в панель вебмастера Bing и перейдите по ссылке в панель настройки.
2. Ознакомьтесь с четырьмя следующими шагами.
2.1. Сгенерируйте и сохраните ключ API.
2.2. Разместите файл ключа на сайте (закиньте скачанный файл в корневую папку сайта).
Проверьте, что файл открывается по прямой ссылке и не закрыт для индексации поисковыми роботами.
2.3. Отправьте URL`s в IndexNow
Самый простой вариант сделать это через терминал вашей операционной системы.
Для этого нужно открыть диалоговое окно «выполнить» (win + r, далее написать команду cdm для Windows; или cmd (⌘) + space (пробел), далее написать terminal для MacOS).
После открытия командной панели необходимо ввести следующий код для выполнения (заменив домен, пути и ключи на ваши):
curl.exe -X POST "https://api.indexnow.org/indexnow" -H "Content-Type: application/json; charset=utf-8" -d "{\"host\": \"domain.ru\", \"key\": \ваш ключ\", \"keyLocation\": \"https:// domain.ru /путь-где-лежит-ключ.txt\", \"urlList\": [\"https://domain.ru/\", \"https:// domain.ru/catalog/адрес/\"]}" -w "\nHTTP Code: %{http_code}\n"
"host": ваш домен (например, "domain.ru");
"key": ваш API-ключ (из скачанного файла);
"keyLocation": полный URL к файлу с ключом;
"urlList": список URL для индексации.
Код ответа «202 Accepted» означает, что запрос принят сервером IndexNow URL добавлены в очередь на обработку.
Код «200 Ok» означает, что страницы отправлены на переобход мгновенно. На странице indexnow так же приведены примеры других вариаций кодов ответа.
2.4. Проверьте результат
После отправки можно проверить все ли сработало корректно. Для этого необходимо вернуться в ВМ Bing и перейти на вкладку URL Inspection и ввести адрес отправленной страницы. В открывшемся окне вы увидите статус индексирования страницы и дату последнего обхода.
Как и у любого инструмента у IndexNow есть некоторые нюансы использования и полезные фишки. Коротко рассмотрим их.
Во-первых, необходимо чтобы файл с ключом был доступен. Это можно проверить в вебмастере, с помощью плагинов или команды curl -I https://ваш-сайт.com/ваш-ключ.txt в командной строк (cdm рассмотренный выше). При отправке команды код ответа должен быть 200 ok.
Во-вторых, вы всегда можете настроить автоматическую отправку или обновление, как правило с помощью плагинов. Например, для WordPress можно установить и активировать плагин IndexNow Plugin (бесплатный) или AIOSEO (тут только с Premium).
Плагин автоматически отправляет URL при:
Для других открытых CMS также есть плагины и расширения.
Для сайтов на «1С-Битрикс» тоже существуют модули (готовые решения из Marketplace) для автоматизации. Модули самостоятельно отслеживают добавление, изменение товаров или страниц, формируют список и отправляют URL в поисковые системы (Яндекс, Bing) за считанные секунды.
Для самописных CMS можно создать скрипт (indexnow.php) и выполнять его через Cron с необходимой вам регулярностью. Пример кода:
<?php
// Скрипт для автоматической отправки при публикации
$host = "ваш-сайт.com";
$key = "ваш-ключ";
$keyLocation = "https://ваш-сайт.com/ваш-ключ.txt";
// Получаем новые URL из БД
$newUrls = get_new_urls_from_db(); // Ваша функция
// Делим на пакеты по 10 000 URL
$chunks = array_chunk($newUrls, 10000);
foreach ($chunks as $chunk) {
$data = [
'host' => $host,
'key' => $key,
'keyLocation' => $keyLocation,
'urlList' => $chunk
];
$ch = curl_init('https://api.indexnow.org/indexnow');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json; charset=utf-8']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
// Логируем результат
file_put_contents('indexnow.log', date('Y-m-d H:i:s') . " - " . $response . "\n", FILE_APPEND);
// Задержка между запросами (во избежание 429)
sleep(2);
}
Для cron (тайм-аут в 5 минут):
*/5 * * * * php /var/www/ваш-сайт.com/indexnow.php
|
Тип лимита |
Значение |
Последствия при превышении |
|
Суточный лимит |
10 000 URL на домен |
Ошибка 429 Too Many Requests до конца суток |
|
Максимум в одном запросе |
10 000 URL |
Ошибка 400 Bad Request при превышении |
|
Частота запросов |
~1 запрос/сек |
Ошибка 429 при высокой нагрузке |
|
Количество ключей |
1 ключ на домен |
Не более 1 ключа на домен |
|
Ошибка |
Причина |
Решение |
|
403 Forbidden |
Неверный ключ или недоступен файл ключа |
Проверьте URL файла ключа и содержимое |
|
400 Bad Request |
Неверный формат JSON |
Используйте валидатор JSON |
|
422 Unprocessable Entity |
Несоответствие URL и host |
Убедитесь, что URL начинаются с host |
|
500 Internal Error |
Временная проблема на стороне IndexNow |
Повторите запрос через 5-10 минут |
С помощью IndexNow также можно и удалять страницы.
Убедитесь, что URL возвращает статус-код «404 Not Found» или «410 Gone») и отправьте страницы на переобход.
Можно использовать remove в запросе, но данная команда может не восприниматься некоторыми ПС, например, Bing.
Пример:
{
"host": "ваш-сайт.com",
"key": "ваш-ключ",
"keyLocation": "https://ваш-сайт.com/ключ.txt",
"urlList": [
"https://ваш-сайт.com/страница"
],
"remove": true
}
Кеширование CDN: Убедитесь, что CDN не кэширует файл ключа.
Редиректы: Если URL редиректит, отправляйте финальный URL с ответом 200.
Кириллица в URL: Кодируйте URL перед отправкой.
Слишком частая отправка: Добавьте задержку 1-2 секунды между запросами.