IndexNow: практическое руководство по настройке

Автор: Опубликовано: 8 минут чтения

IndexNow — открытый протокол, который позволяет сайту сразу сообщать поисковым системам об изменении адресов. Руководство описывает структуру запроса, размещение ключа, автоматизацию отправки на популярных CMS и серверах, проверку результата и типичные ошибки.

IndexNow: практическое руководство по настройке
Содержание
  1. Что это и зачем нужно
  2. Место IndexNow в ускорении индексации
  3. Как устроено
  4. Пошаговая настройка
  5. Примеры для популярных CMS и серверов
  6. Как проверить результат
  7. Частые ошибки

Коротко: как подключить IndexNow на сайте

  1. Сгенерируйте ключ. Создайте строку из 8–128 символов: латинские буквы, цифры и дефис. Удобно взять 32-символьное hex-значение, например командой openssl rand -hex 16.
  2. Разместите файл подтверждения. Положите в корень сайта файл с именем <ключ>.txt, внутри — сам ключ без кавычек и пояснений. Если корень недоступен, укажите адрес файла в поле keyLocation, но он должен быть на том же хосте.
  3. Проверьте доступность файла. Откройте https://example.com/<ключ>.txt в браузере и через curl. Ответ должен быть 200, содержимое — ровно ключ, без редиректа на другой домен или протокол.
  4. Отправьте тестовый запрос. Сделайте POST на https://api.indexnow.org/indexnow с JSON, содержащим host, key, keyLocation и urlList из одного адреса. Разберите код ответа: 200 или 202 — успех, 403 — проблема с ключом, 422 — несовпадение хоста.
  5. Автоматизируйте отправку. Привяжите вызов API к событиям публикации, обновления и удаления записей: хуки WordPress, события инфоблока в 1С-Битрикс, скрипты на стороне сервера. Крупные пакеты отправляйте частями.
  6. Ведите журнал и следите за ответами. Записывайте дату, отправленные URL и код ответа. Это помогает быстро найти причину, если поисковик перестал принимать запросы или вы упёрлись в ограничение частоты.

Что это и зачем нужно

IndexNow — открытый протокол, с помощью которого сайт сам сообщает поисковым системам об изменении адресов: появилась новая страница, обновился товар, изменилась цена, удалён раздел, поменялся URL после реструктуризации. Протокол предложен компаниями Bing и Яндекс в 2021 году и поддерживается несколькими поисковиками, среди которых, помимо них, Seznam и Naver. Google его не поддерживает.

Смысл простой: сократить разрыв между публикацией и появлением страницы в выдаче. Робот может прийти через час, а может через несколько недель — это зависит от авторитета сайта, частоты обновлений и краулингового бюджета. Запрос IndexNow сообщает об изменении сразу, без ожидания следующего обхода.

Типичные сценарии использования:

  • интернет-магазин обновляет остатки, цены и описания карточек;
  • новостной сайт или блог публикует материал и хочет попасть в выдачу в день выхода;
  • каталог добавляет сотни новых позиций импортом;
  • страница удалена и должна быстро исчезнуть из результатов поиска;
  • изменилась структура URL и старые адреса заменены новыми.

Чего протокол не делает: не гарантирует индексацию, не влияет на ранжирование и не отменяет технические требования к сайту. Это сигнал о событии, а не команда «проиндексируй немедленно».

Место IndexNow в ускорении индексации

Ускорение индексации — комплекс мер, и IndexNow в нём лишь одна из составляющих. Если сайт медленно отдаёт страницы, отдаёт дубли, закрывает нужные разделы в robots.txt или не имеет актуальной карты сайта, уведомления не дадут большого эффекта.

Что имеет смысл держать в порядке параллельно:

  1. Корректная структура URL и постоянные адреса без лишних параметров.
  2. Актуальный sitemap, который обновляется при публикации; собрать его помогает генератор карты сайта.
  3. Настроенные редиректы 301 при смене адресов вместо цепочек переходов.
  4. Быстрая загрузка страниц и стабильный ответ сервера.
  5. Внутренняя перелинковка: новая страница должна быть достижима по ссылкам, а не только через sitemap.
  6. Отсутствие массовых ошибок 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 не мешает.

Как проверить результат

  1. Файл ключа открывается по HTTPS и возвращает 200 с точным содержимым.
  2. Тестовый POST вернул 200 или 202, а не 400, 403 и 422.
  3. В журнале появились записи с адресами, которые вы действительно меняли.
  4. Через некоторое время проверьте, как страница ведёт себя в поиске: появилась ли она, обновилось ли описание. Мгновенного результата ждать не стоит — сроки зависят от сайта.
  5. В Яндекс.Вебмастере следите за разделом с индексированием и запрашивайте переобход вручную, если нужно ускорить конкретную страницу; интерфейс сервиса меняется, поэтому ориентируйтесь на актуальные пункты меню.

Частые ошибки

  • Файл лежит не в корне. Адрес вида 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 попадание страницы в индекс?

Нет. Это уведомление об изменении, а не команда на индексацию. Поисковая система сама решает, когда обойти адрес и включать ли его в выдачу. Протокол лишь сокращает время ожидания и экономит краулинговый бюджет.

Материал подготовлен редакцией справочника Торох и носит справочный характер: интерфейсы программ и настройки серверов зависят от версии. Нашли неточность? Напишите нам.

Читайте также

Другие разделы