Что такое IndexNow и как он ускоряет индексацию в Яндексе и Bing
Основы3 минРедакция Innovialabs
Коротко
IndexNow — открытый протокол, через который сайт сразу сообщает Bing, Яндексу и другим участникам о новых, измененных и удаленных URL; Google его не использует, поэтому sitemap по-прежнему обязателен.
Коротко
IndexNow — открытый протокол, с помощью которого сайт сообщает поисковым системам, что URL добавлен, обновлен или удален. Вместо того чтобы ждать, пока робот сам заметит изменения, сайт отправляет короткий запрос со списком адресов, и поисковик может переобойти их быстрее.
Протокол поддерживают Bing, Яндекс и ряд других систем (например, Seznam и Naver). Участники обмениваются полученными URL между собой, поэтому достаточно одного запроса в одну точку. Google IndexNow не поддерживает, поэтому протокол не заменяет sitemap и Search Console.
Как работает протокол
- Вы генерируете ключ — строку длиной от 8 до 128 символов из латинских букв, цифр и дефисов.
- Публикуете ключ в текстовом файле на своем домене, обычно в корне:
https://example.com/<key>.txt. В файле только сам ключ. - Когда контент меняется, сайт отправляет запрос с URL и ключом.
- Поисковик скачивает файл ключа, проверяет, что сайт ваш, и ставит адреса в очередь на обход.
Уведомление — это подсказка, а не приказ. Решение, обходить ли страницу и индексировать ли ее, остается за поисковиком.
Настройка файла ключа
- Сгенерируйте случайный ключ и сохраните его как
<key>.txtв корне сайта. - Проверьте, что файл открывается по HTTPS, отдает код 200 и содержит ключ обычным текстом.
- Если положить файл в корень нельзя, разместите его в другом месте на том же хосте и передайте адрес в параметре
keyLocation. Тогда отправлять можно только URL внутри этого пути.
В Next.js проще всего положить файл в папку public — он будет доступен из корня.
Отправка URL
Для одного адреса хватит GET-запроса:
curl "https://api.indexnow.org/indexnow?url=https://example.com/blog/new-post&key=YOUR_KEY"
Для нескольких адресов — POST с JSON:
curl -X POST "https://api.indexnow.org/indexnow" \
-H "Content-Type: application/json; charset=utf-8" \
-d '{"host":"example.com","key":"YOUR_KEY","urlList":["https://example.com/blog/a","https://example.com/blog/b"]}'
Все URL в одном запросе должны относиться к одному хосту.
Из CMS
Во многих CMS есть плагины или встроенные настройки IndexNow. Проверьте, что уведомления уходят только для опубликованных страниц, а не для черновиков, превью и служебных адресов.
Из сайта на Next.js
Отправляйте уведомление на сервере после публикации — например, в route handler, который вызывает вебхук CMS:
export async function notifyIndexNow(urls: string[]) {
await fetch("https://api.indexnow.org/indexnow", {
method: "POST",
headers: { "Content-Type": "application/json; charset=utf-8" },
body: JSON.stringify({
host: "example.com",
key: process.env.INDEXNOW_KEY,
urlList: urls,
}),
});
}
Вызывайте функцию только при реальном изменении контента. Не отправляйте весь сайт при каждом деплое.
Коды ответа
| Код | Значение |
|---|---|
| 200 | URL приняты |
| 202 | Приняты, ключ еще проверяется |
| 400 | Неверный формат запроса |
| 403 | Ключ недействителен или файл ключа не найден |
| 422 | URL не относятся к хосту или ключ не совпадает |
| 429 | Слишком много запросов, нужно снизить частоту |
Почему для Google нужен sitemap
Google находит страницы по ссылкам, через sitemap и Search Console. Уведомления IndexNow до него не доходят. Поэтому базовые вещи остаются обязательными:
- актуальная XML-карта сайта с корректными датами
lastmod; - отправка sitemap в Search Console и Яндекс Вебмастер;
- ссылки на новые страницы с уже существующих.
IndexNow дополняет эту схему для Bing и Яндекса. И он не помогает страницам, которые поисковик не хочет индексировать из-за низкого качества или дублей.