IndexNow: практическое руководство по настройке
IndexNow — открытый протокол, который позволяет сайту сразу сообщать поисковым системам об изменении адресов. Руководство описывает структуру запроса, размещение ключа, автоматизацию отправки на популярных CMS и серверах, проверку результата и типичные ошибки.
Содержание
Коротко: как подключить IndexNow на сайте
- Сгенерируйте ключ. Создайте строку из 8–128 символов: латинские буквы, цифры и дефис. Удобно взять 32-символьное hex-значение, например командой openssl rand -hex 16.
- Разместите файл подтверждения. Положите в корень сайта файл с именем <ключ>.txt, внутри — сам ключ без кавычек и пояснений. Если корень недоступен, укажите адрес файла в поле keyLocation, но он должен быть на том же хосте.
- Проверьте доступность файла. Откройте https://example.com/<ключ>.txt в браузере и через curl. Ответ должен быть 200, содержимое — ровно ключ, без редиректа на другой домен или протокол.
- Отправьте тестовый запрос. Сделайте POST на https://api.indexnow.org/indexnow с JSON, содержащим host, key, keyLocation и urlList из одного адреса. Разберите код ответа: 200 или 202 — успех, 403 — проблема с ключом, 422 — несовпадение хоста.
- Автоматизируйте отправку. Привяжите вызов API к событиям публикации, обновления и удаления записей: хуки WordPress, события инфоблока в 1С-Битрикс, скрипты на стороне сервера. Крупные пакеты отправляйте частями.
- Ведите журнал и следите за ответами. Записывайте дату, отправленные URL и код ответа. Это помогает быстро найти причину, если поисковик перестал принимать запросы или вы упёрлись в ограничение частоты.
Что это и зачем нужно
IndexNow — открытый протокол, с помощью которого сайт сам сообщает поисковым системам об изменении адресов: появилась новая страница, обновился товар, изменилась цена, удалён раздел, поменялся URL после реструктуризации. Протокол предложен компаниями Bing и Яндекс в 2021 году и поддерживается несколькими поисковиками, среди которых, помимо них, Seznam и Naver. Google его не поддерживает.
Смысл простой: сократить разрыв между публикацией и появлением страницы в выдаче. Робот может прийти через час, а может через несколько недель — это зависит от авторитета сайта, частоты обновлений и краулингового бюджета. Запрос IndexNow сообщает об изменении сразу, без ожидания следующего обхода.
Типичные сценарии использования:
- интернет-магазин обновляет остатки, цены и описания карточек;
- новостной сайт или блог публикует материал и хочет попасть в выдачу в день выхода;
- каталог добавляет сотни новых позиций импортом;
- страница удалена и должна быстро исчезнуть из результатов поиска;
- изменилась структура URL и старые адреса заменены новыми.
Чего протокол не делает: не гарантирует индексацию, не влияет на ранжирование и не отменяет технические требования к сайту. Это сигнал о событии, а не команда «проиндексируй немедленно».
Место IndexNow в ускорении индексации
Ускорение индексации — комплекс мер, и IndexNow в нём лишь одна из составляющих. Если сайт медленно отдаёт страницы, отдаёт дубли, закрывает нужные разделы в robots.txt или не имеет актуальной карты сайта, уведомления не дадут большого эффекта.
Что имеет смысл держать в порядке параллельно:
- Корректная структура URL и постоянные адреса без лишних параметров.
- Актуальный sitemap, который обновляется при публикации; собрать его помогает генератор карты сайта.
- Настроенные редиректы 301 при смене адресов вместо цепочек переходов.
- Быстрая загрузка страниц и стабильный ответ сервера.
- Внутренняя перелинковка: новая страница должна быть достижима по ссылкам, а не только через sitemap.
- Отсутствие массовых ошибок 404 и 5xx: страницы с ошибками сервера робот обходит осторожнее, а на 403 Forbidden обход может остановиться вовсе.
В этой схеме IndexNow решает узкую задачу — быстро доставить информацию о конкретном изменении. В Яндекс.Вебмастере при этом остаётся ручной запрос переобхода страниц, а в панели Bing — свои инструменты проверки.
Как устроено
Ключ и файл подтверждения
Ключ — произвольная строка длиной от 8 до 128 символов. Допустимы латинские буквы в верхнем и нижнем регистре, цифры и дефис. Практичнее всего сгенерировать 32-символьное hex-значение.
Файл подтверждения размещается в корне сайта по адресу https://example.com/<ключ>.txt, а его содержимое — это сам ключ. Никаких кавычек, пояснений и HTML-разметки в файле быть не должно.
Если положить файл в корень нельзя, используется поле keyLocation: в нём указывается прямой адрес файла, например https://example.com/seo/keys/<ключ>.txt. Файл должен находиться на том же хосте, что и продвигаемые URL, и открываться без редиректов.
Формат запроса
Основной способ — POST с JSON-телом:
{
"host": "example.com",
"key": "b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6",
"keyLocation": "https://example.com/b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6.txt",
"urlList": [
"https://example.com/catalog/new-product/",
"https://example.com/blog/novaya-statya/"
]
}
Правила:
hostуказывается без протокола и без пути:example.comилиwww.example.com.- Все адреса из
urlListдолжны принадлежать этому хосту и тому же протоколу, что указан в URL. - В одном запросе допускается до 10 000 адресов, но на практике крупные сайты отправляют пакеты меньшего размера.
- Заголовок запроса —
Content-Type: application/json; charset=utf-8.
Для быстрой проверки одного адреса удобен GET-вариант:
https://api.indexnow.org/indexnow?url=https://example.com/page/&key=<ключ>
Точки приёма запросов:
| Адрес | Назначение |
|---|---|
https://api.indexnow.org/indexnow |
общий шлюз, передающий данные участвующим поисковым системам |
https://www.bing.com/indexnow |
приём данных Bing |
https://yandex.com/indexnow |
приём данных Яндексом |
Коды ответов
| Код | Что означает |
|---|---|
| 200 | запрос принят, адреса поставлены в обработку |
| 202 | запрос принят, но ключ ещё проверяется |
| 400 | некорректный формат запроса или JSON |
| 403 | ключ не найден, недоступен или не совпадает с файлом |
| 422 | адреса не соответствуют указанному хосту либо ключ к нему не относится |
| 429 | превышена частота запросов |
Разбор кода ответа — основной способ понять, что настроено неверно.
Пошаговая настройка
1. Сгенерируйте ключ
Linux и macOS:
openssl rand -hex 16
Windows PowerShell:
[guid]::NewGuid().ToString('N')
Оба варианта дают 32 hex-символа — этого достаточно.
2. Создайте файл подтверждения
Создайте файл <ключ>.txt, внутри — одна строка с ключом. Загрузите его в корневую папку сайта: public_html, www, htdocs — название зависит от хостинга.
3. Проверьте доступность
curl -I https://example.com/b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6.txt
curl -s https://example.com/b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6.txt
Первая команда должна вернуть 200, вторая — ровно тот же ключ. Если видите 301, 302 или 404, файл лежит не там либо правило ЧПУ перехватывает txt-файлы.
4. Отправьте тестовый запрос
curl -i -X POST https://api.indexnow.org/indexnow \
-H "Content-Type: application/json; charset=utf-8" \
-d '{"host":"example.com","key":"b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6","keyLocation":"https://example.com/b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6.txt","urlList":["https://example.com/"]}'
Для Яндекса повторите запрос на https://yandex.com/indexnow, для Bing — на https://www.bing.com/indexnow. Общий шлюз api.indexnow.org обычно достаточно вызвать один раз.
5. Автоматизируйте
Отправка должна происходить по событию, а не по расписанию: публикация, обновление, смена статуса, удаление. Не отправляйте один и тот же адрес повторно без изменений — это расходует лимит и не приносит пользы.
6. Ведите журнал
Сохраняйте дату, список адресов и код ответа. При массовых импортах журнал помогает отличить ошибку формата от превышения частоты.
Примеры для популярных CMS и серверов
WordPress
Первый путь — плагин. В каталоге WordPress.org есть официальный плагин IndexNow от Bing, а в Rank Math SEO есть модуль мгновенной индексации с поддержкой IndexNow. Набор настроек зависит от версии плагина, поэтому проверяйте наличие нужного пункта в своей версии.
Второй путь — собственный обработчик без плагинов:
add_action('save_post', function ($postId, $post, $update) {
if (wp_is_post_revision($postId) || $post->post_status !== 'publish') {
return;
}
$key = 'b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6';
wp_remote_post('https://api.indexnow.org/indexnow', [
'timeout' => 5,
'headers' => ['Content-Type' => 'application/json; charset=utf-8'],
'body' => wp_json_encode([
'host' => wp_parse_url(home_url(), PHP_URL_HOST),
'key' => $key,
'keyLocation' => home_url('/' . $key . '.txt'),
'urlList' => [get_permalink($postId)],
]),
]);
}, 10, 3);
Файл ключа при этом всё равно нужно положить в корень сайта вручную.
1С-Битрикс
Встроенной поддержки нет, отправку добавляют через события инфоблока. Минимальная функция:
function indexNowSend(array $urls): void
{
if (!$urls) {
return;
}
$payload = [
'host' => 'example.com',
'key' => 'b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6',
'keyLocation' => 'https://example.com/b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6.txt',
'urlList' => array_values($urls),
];
$ch = curl_init('https://api.indexnow.org/indexnow');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE),
CURLOPT_HTTPHEADER => ['Content-Type: application/json; charset=utf-8'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
]);
curl_exec($ch);
curl_close($ch);
}
Вызывайте её в обработчиках OnAfterIBlockElementAdd и OnAfterIBlockElementUpdate, предварительно убедившись, что элемент активен и доступен по ЧПУ. При массовом импорте не отправляйте запрос на каждый элемент — накапливайте адреса и отправляйте пакетом, иначе получите ответ 429.
Tilda
Готовой отправки в IndexNow у платформы нет. Файл ключа нужно разместить в корне домена, а это возможно только при наличии доступа к файлам сайта на хостинге. Если домен обслуживается без доступа к файловой системе, протокол подключить не получится: требование доступного файла подтверждения обойти нельзя. Автоматизацию в таком случае строят на стороне внешнего сервиса или промежуточного сервера.
nginx
Если не хочется держать физический файл, ключ можно отдать прямо из конфигурации:
location = /b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6.txt {
default_type text/plain;
return 200 "b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6";
}
Проверьте, что вышестоящие правила try_files или переопределение location ~ \.php$ не перехватывают этот адрес.
Apache
Проще всего положить реальный файл в корень и убедиться, что каталог не закрыт и листинг отключён:
Options -Indexes
<Files "b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6.txt">
Require all granted
ForceType text/plain
</Files>
Если в .htaccess есть правило, отправляющее все несуществующие адреса в index.php, файл всё равно должен отдаваться напрямую — убедитесь, что условие !-f не мешает.
Как проверить результат
- Файл ключа открывается по HTTPS и возвращает 200 с точным содержимым.
- Тестовый POST вернул 200 или 202, а не 400, 403 и 422.
- В журнале появились записи с адресами, которые вы действительно меняли.
- Через некоторое время проверьте, как страница ведёт себя в поиске: появилась ли она, обновилось ли описание. Мгновенного результата ждать не стоит — сроки зависят от сайта.
- В Яндекс.Вебмастере следите за разделом с индексированием и запрашивайте переобход вручную, если нужно ускорить конкретную страницу; интерфейс сервиса меняется, поэтому ориентируйтесь на актуальные пункты меню.
Частые ошибки
- Файл лежит не в корне. Адрес вида
https://example.com/keys/<ключ>.txtбез указанияkeyLocationне сработает. - Редирект при открытии файла. Переход с http на https или с домена на www приводит к 403, потому что содержимое не удаётся прочитать.
- Несовпадение ключа и имени файла. Имя файла, содержимое файла и поле
keyв запросе должны быть идентичны. - Лишние символы в файле. BOM, пробелы, HTML-тег или перевод строки с текстом мешают проверке.
- Смешение хостов в urlList. Адреса с www и без www, а также с другого поддомена вызовут ответ 422.
- Нет автоматизации. Ручная отправка после каждой публикации быстро надоедает, и протокол перестаёт использоваться.
- Слишком частые запросы. Отправка каждого товара отдельным запросом при импорте приводит к 429. Собирайте пакеты.
- Повторная отправка неизменившихся URL. Бесполезно расходует лимит и время.
- Отправка закрытых страниц. Адреса из-под пароля, с
noindexили запрещённые в robots.txt не попадут в индекс, сколько бы уведомлений вы ни отправили. - Ожидание гарантированного результата. IndexNow — уведомление, а не обещание индексации; на позиции он не влияет напрямую.
Частые вопросы
Заменяет ли IndexNow карту сайта sitemap.xml?
Нет. Sitemap остаётся способом сообщить обо всех адресах сайта, а IndexNow лишь уведомляет об изменениях конкретных URL. Протокол не отменяет и robots.txt: правила обхода действуют так же, как и раньше.
Работает ли IndexNow с Google?
Нет. Google протокол не поддерживает. Для Google остаются обычный обход, sitemap и Indexing API, который принимает только вакансии и прямые трансляции. Отправка в IndexNow на позиции в Google не влияет.
Сколько адресов можно передать в одном запросе?
Общий предел — до 10 000 URL в массиве urlList. Крупным сайтам всё равно стоит делить отправку на пакеты по несколько сотен или тысяч адресов: так проще отслеживать ответы и не упираться в ограничение частоты.
Нужен ли отдельный ключ для поддомена или второго сайта?
Ключ привязан к хосту, поэтому для каждого хоста нужен свой файл подтверждения. Для site.example.com и www.example.com это разные хосты: файл keyLocation и значение host должны соответствовать тому домену, который указан в URL.
Что делать при ответе 403 Forbidden?
Проверьте, что файл ключа открывается напрямую и отдаёт код 200 без редиректа, что его содержимое совпадает с полем key, а имя файла — с ключом. Частая причина — редирект с http на https или с домена на www: файл должен быть доступен по тому адресу, который вы указали в keyLocation.
Гарантирует ли IndexNow попадание страницы в индекс?
Нет. Это уведомление об изменении, а не команда на индексацию. Поисковая система сама решает, когда обойти адрес и включать ли его в выдачу. Протокол лишь сокращает время ожидания и экономит краулинговый бюджет.
Материал подготовлен редакцией справочника Торох и носит справочный характер: интерфейсы программ и настройки серверов зависят от версии. Нашли неточность? Напишите нам.