IndexNow — это протокол, через который сайт сам сообщает поисковым системам о новых и измененных страницах: отправляет список адресов и получает ответ. Одна подача расходится между всеми участниками протокола, среди которых Bing. Google IndexNow не использует, поэтому для него все это не работает вообще — об этом ниже отдельно.
2 августа 2026 мы добавили в проект скрипт, который подает страницы нашего сайта через IndexNow. 3 сентября 2026 выяснилось, что все это время он не подал ни одной страницы. И каждая подача выглядела успешной.
Что именно подавал скрипт
Скрипт делал простую вещь: открывал /sitemap.xml, выбирал все адреса из тегов <loc> и отправлял их в IndexNow.
Проблема в том, что наш /sitemap.xml — не карта страниц, а индекс карт. Внутри у него не адреса страниц, а ссылки на другие файлы: sitemap-pages.xml, sitemap-services.xml и еще четыре. Так что в Bing при каждом запуске уходило шесть адресов, и все шесть были адресами XML-файлов.
Вторая половина ошибки: /sitemap.xml описывает только украинскую версию сайта. Английская и русская имеют собственные индексы, /en/sitemap.xml и /ru/sitemap.xml, и все три объявлены отдельными строками Sitemap: в robots.txt. Скрипт знал только о первом.
Почему никто не заметил
Потому что IndexNow на каждую подачу отвечал кодом 200.
Документация протокола на indexnow.org описывает 200 как «URL submitted successfully» и отдельно уточняет: этот код означает лишь, что поисковая система получила ваши адреса. Ошибку протокол возвращает в конкретных случаях: 400 на неправильный формат запроса, 403 на недействительный ключ, 422 на адреса чужого домена или ключ, не соответствующий схеме, 429 на слишком частые подачи. Есть еще 202: адреса получены, ключ еще проверяется.
Ни один из этих кодов не проверяет, является ли поданный адрес страницей. XML-файл карты — вполне корректный адрес на нашем домене, ключ действителен, формат правильный. Следовательно, 200. Скрипт видел 200, писал «подано», и причин смотреть глубже не было.
Это не особенность IndexNow. Так ведет себя любая точка приема, которая валидирует форму запроса, а не содержание: она говорит «запрос принят», а мы читаем «все сделано как надо».
Сколько адресов должно было быть
Когда 3 сентября 2026 мы исправили скрипт, он впервые посчитал, что на самом деле есть на сайте. Вот раскладка на тот день:
| Источник | Адресов |
|---|---|
/sitemap.xml (6 дочерних карт) |
355 |
/en/sitemap.xml |
256 |
/ru/sitemap.xml |
256 |
| Всего уникальных | 867 |
355 адресов украинского индекса состояли из 11 основных страниц, 6 страниц услуг, 15 работ портфолио, 19 статей блога, 257 страниц сети услуг и 47 страниц инструментов.
Отсюда видно, что это были две отдельные ошибки. Если бы скрипт научился раскрывать индекс, но по-прежнему читал только /sitemap.xml, он подавал бы 355 адресов из 867, то есть чуть больше трети сайта. Английская и русская версии остались бы вне подачи. На практике не было и этого: подавались только шесть файлов.
Сколько раз скрипт запускали между 2 августа и 3 сентября, мы не считали. Для вывода это и не важно: каждый запуск давал один и тот же результат.
Как проверить свой сайт за 15 минут
Если у вас стоит модуль или плагин IndexNow для OpenCart, WordPress или другой платформы, мы не знаем, есть ли в нем такая же ошибка: ни один модуль мы не тестировали. Но проверить это можно без доступа к коду.
1. Найдите все карты, которые вы объявляете.
curl -s https://ваш-сайт.com.ua/robots.txt | grep -i '^sitemap:'
Строк может быть несколько. У нас их три, и скрипт знал об одной.
2. Для каждой карты посмотрите корневой тег.
curl -s https://ваш-сайт.com.ua/sitemap.xml | grep -o -m1 '<sitemapindex\|<urlset'
<urlset> означает обычную карту страниц. <sitemapindex> означает индекс: адреса в нем ведут на другие XML-файлы, а не на страницы. Ориентируйтесь на тег, а не на название файла: название может быть любым.
3. Посчитайте реальное количество страниц. Для индекса нужно открыть каждую дочернюю карту:
for s in $(curl -s https://ваш-сайт.com.ua/robots.txt | grep -i '^sitemap:' | awk '{print $2}' | tr -d '\r'); do
curl -s "$s" | grep -o '<loc>[^<]*' | sed 's/<loc>//'
done | sort -u > level1.txt
grep '\.xml$' level1.txt | while read child; do
curl -s "$child" | grep -o '<loc>[^<]*' | sed 's/<loc>//'
done | sort -u > pages.txt
grep -vc '\.xml$' level1.txt; wc -l < pages.txt
Первое число — страницы, которые лежали прямо в картах верхнего уровня, второе — страницы из дочерних карт. Если дочерние карты сами являются индексами, повторите шаг еще раз для них.
4. Сравните с тем, что подает модуль. Откройте журнал модуля или статистику подач в разделе IndexNow в Bing Webmaster Tools. Если среди поданных адресов есть такие, что заканчиваются на .xml, — это именно наша ошибка. Если подано заметно меньше, чем в шаге 3, модуль, вероятно, не видит части карт, чаще всего языковых.
5. Не ищите этого в Google. Search Console о подачах IndexNow ничего не покажет, потому что Google протокол не использует. Для Google карты сайта подаются там отдельно.
Если сами карты вызывают сомнения — дубли, пустой файл, один язык вместо двух, — об этом есть отдельный разбор карт сайта. Проверить robots.txt и карту онлайн можно нашим бесплатным инструментом.
Что мы изменили
Скрипт теперь отличает индекс от обычной карты по корневому тегу <sitemapindex> и раскрывает индексы рекурсивно, не глубже трех уровней, чтобы кольцевая ссылка между картами не зациклила обход. Источников стало три: украинская, английская и русская карта.
После исправления 3 сентября 2026 скрипт подал 867 адресов из 867. Подача идет партиями по 500 адресов, так что получилось две партии, и обе получили 200. На этот раз 200 означал то, что мы хотели, но знаем мы это не из кода ответа, а из того, что перед подачей перечислили, какие именно адреса в ней лежат.
В тот же день мы перешли на ключ IndexNow, выданный самим Bing Webmaster Tools, чтобы статистика подач в панели Bing привязывалась именно к нему. Предыдущий, сгенерированный нами ключ оставили на сайте: подачи, сделанные ранее в тот день, Bing мог проверять еще какое-то время, и без файла ключа они не прошли бы проверку владения.
Чего это не исправило
Подача через IndexNow не означает индексации. Протокол лишь сообщает поисковику, что адрес существует или изменился, а брать его в индекс или нет, решает он сам.
Эффект от исправления мы не измеряли. Данных Bing Webmaster Tools до и после у нас нет, поэтому утверждать, что страницы после 3 сентября 2026 попали в Bing быстрее, мы не можем.
На Google это не повлияло никак. Для него индексация большого сайта — это карты в Search Console, внутренние ссылки и то, на что робот тратит обход. О последнем мы писали в разборе куда тратится обход сайта, а для каталогов на тысячи позиций есть отдельная услуга по индексации большого каталога.
Главное, что мы вынесли: ответ «принято» от любой точки приема проверяет форму запроса, а не то, что в нем лежит. Чтобы знать, что подано, нужно смотреть на сам перечень адресов.




