Сценарий простой: редактор или SEO-плагин меняет для записи noindex, а URL продолжает висеть в поиске дольше, чем нужно. Если у вас уже настроен IndexNow, логично отправлять в него не только новые и удалённые страницы, но и те, у которых поменялся индексируемый статус. Это полезно для тех случаев, когда страница остаётся доступной по адресу, но должна быстрее выпасть из индекса или, наоборот, вернуться туда после снятия ограничения.
Важно не путать noindex с удалением страницы. Здесь речь именно о техническом сигнале поисковику: документ изменился, и его индексация должна быть переоценена. Сам IndexNow не гарантирует мгновенного результата, но сокращает время между изменением и повторной проверкой URL.
Когда это действительно нужно
Подход имеет смысл, если на сайте часто меняются SEO-настройки у отдельных записей, страниц, архивов или пользовательских типов контента. Типичный пример: старую посадочную страницу временно закрыли от индексации, потом вернули обратно после доработки. Без дополнительной отправки URL поисковик может долго опираться на старую версию.
Ещё один частый кейс — массовая работа редакции. Когда десятки материалов получают noindex после аудита, ручная отправка URL не масштабируется. Здесь лучше встроить отправку в момент сохранения мета-полей, чтобы процесс был одинаковым для всех пользователей админки.
Диагностика проблемы
Сначала проверьте, где именно хранится признак noindex. В WordPress это может быть:
- мета-поле SEO-плагина;
- кастомное поле темы или плагина;
- логика, завязанная на фильтр
wp_robots; - условие в шаблоне, которое добавляет
<meta name="robots" content="noindex">.
Если вы не понимаете источник, сначала откройте исходный код страницы и найдите robots-мета-тег. Если его нет в HTML, но страница всё равно закрыта от индексации, возможно, используется HTTP-заголовок X-Robots-Tag. В этом случае логика отправки в IndexNow должна опираться не на шаблон, а на изменение настроек, которые этот заголовок формируют.
Проверьте и обратную сторону: не отправляете ли вы URL слишком часто. Если плагин SEO уже сам обновляет sitemap и часто пингует поисковики, дополнительная отправка на каждое сохранение может быть лишней. Для IndexNow лучше отбирать только те изменения, которые реально влияют на индексацию.
Пошаговое решение: ловим изменение статуса индексации
Надёжнее всего реагировать не на сам вывод noindex в шаблоне, а на сохранение мета-поля, которое его включает. Ниже пример для кастомного поля _my_noindex: если значение меняется, URL уходит в IndexNow.
<?php
add_action('updated_post_meta', 'my_indexnow_on_noindex_change', 10, 4);
add_action('added_post_meta', 'my_indexnow_on_noindex_change', 10, 4);
function my_indexnow_on_noindex_change($meta_id, $post_id, $meta_key, $meta_value) {
if ($meta_key !== '_my_noindex') {
return;
}
$post = get_post($post_id);
if (!$post || $post->post_status !== 'publish') {
return;
}
$url = get_permalink($post_id);
if (!$url) {
return;
}
// Отправляем URL только если значение реально включает noindex.
if ((string) $meta_value === '1') {
my_send_url_to_indexnow($url);
}
}
function my_send_url_to_indexnow($url) {
$host = wp_parse_url(home_url(), PHP_URL_HOST);
$key = get_option('my_indexnow_key');
if (!$host || !$key) {
return;
}
$endpoint = 'https://api.indexnow.org/indexnow';
$body = array(
'host' => $host,
'key' => $key,
'keyLocation' => home_url('/' . $key . '.txt'),
'urlList' => array($url),
);
wp_remote_post($endpoint, array(
'timeout' => 10,
'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
'body' => wp_json_encode($body),
));
}
Если у вас SEO-плагин хранит флаг в другом ключе, замените _my_noindex на реальное имя мета-поля. Сама схема остаётся той же: отлавливаем изменение, проверяем статус записи, отправляем URL.
Если noindex задаётся фильтром wp_robots
Когда noindex не хранится в мета-поле, а вычисляется динамически, удобнее отправлять URL из того места, где вы меняете правило. Например, если условие зависит от термина, категории или статуса автора, отправка должна происходить в момент сохранения этой сущности. Иначе вы будете пытаться угадать изменение уже после факта.
Для таких случаев полезно вынести решение в отдельную функцию, которая принимает URL и причину изменения. Это упрощает отладку и позволяет не дублировать код в нескольких хуках.
Варианты реализации: плагин, код в теме или mu-plugin
| Подход | Когда брать | Минус |
|---|---|---|
| Обычный плагин | Нужно переносить между сайтами и не зависеть от темы | Чуть больше организационных действий |
| mu-plugin | Логика должна работать всегда, даже при смене темы | Менее удобно для редактирования через админку |
| functions.php | Быстрый тест на одном сайте | При смене темы код потеряется |
Для рабочей установки я бы выбирал mu-plugin. Это особенно удобно, если сайт уже использует несколько SEO- и кеширующих плагинов, а логика отправки должна оставаться стабильной независимо от темы.
Проверка результата после внедрения
После сохранения записи проверьте три вещи. Во-первых, изменился ли HTML страницы: появился ли или исчез ли noindex. Во-вторых, ушёл ли запрос в IndexNow. В-третьих, не было ли ошибки на стороне WordPress.
- Откройте
wp-content/debug.log, если включёнWP_DEBUG_LOG. - Проверьте ответ
wp_remote_post(), если временно добавили логирование. - Сравните URL в поисковой выдаче до и после изменения, но не ждите мгновенного эффекта.
Для технической проверки можно временно добавить лог ответа сервера IndexNow:
<?php
$response = wp_remote_post($endpoint, array(
'timeout' => 10,
'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
'body' => wp_json_encode($body),
));
if (is_wp_error($response)) {
error_log('IndexNow error: ' . $response->get_error_message());
} else {
error_log('IndexNow HTTP status: ' . wp_remote_retrieve_response_code($response));
}
Если статус ответа не 200, сначала проверьте ключ, keyLocation и доступность файла с ключом по публичному URL. Это самые частые причины, из-за которых отправка вроде бы выполняется, но поисковик её не принимает.
Частые ошибки и как их исправить
Отправляют URL при каждом сохранении, даже если noindex не менялся
Это лишняя нагрузка и шум в логах. Исправление простое: сравнивайте старое и новое значение мета-поля, а не реагируйте на сам факт сохранения записи. Для этого удобнее использовать update_post_meta с предварительной проверкой текущего значения.
Путают noindex и canonical
noindex не удаляет URL из сайта и не делает его 404. Если страница должна исчезнуть полностью, нужен другой сценарий: удаление, редирект или возврат 404/410. IndexNow в этом случае используется уже по другой логике.
Не учитывают черновики и приватные записи
Если отправить URL, который ещё не опубликован, результат будет непредсказуемым. В коде выше есть проверка post_status === 'publish', и её лучше не убирать.
Хранят ключ IndexNow в открытом виде в репозитории
Для production это плохая практика. Ключ можно хранить в опции WordPress, а сам файл ключа — в корне сайта с ограниченным содержимым. Если проект под git, не коммитьте реальные секреты в публичный репозиторий.
Практические советы по безопасности и производительности
Не отправляйте запросы в IndexNow синхронно в тяжёлых сценариях массового редактирования, если у вас большой сайт и слабый хостинг. Лучше складывать URL в очередь и отправлять пачкой через wp_cron или отдельный обработчик. Это снижает риск таймаутов в админке.
Если на сайте уже есть кеширование страниц, не полагайтесь на визуальную проверку HTML сразу после сохранения. Сначала очистите кеш нужной записи или дождитесь обновления кеша, иначе вы можете увидеть старую версию и сделать неверный вывод о работе логики.
Для сайтов, где SEO-настройки меняют несколько ролей, ограничьте доступ к метаполю _my_noindex через capabilities. Иначе любой пользователь с доступом к редактору сможет случайно закрыть важную страницу от индексации.
Если хотите сократить объём собственного кода, можно использовать SEO-плагин, который уже умеет управлять мета-robots и дублями. Например, у Clearfy Pro есть инструменты для чистки сайта и работы с SEO-мета-настройками; в таком случае ваша задача сводится к тому, чтобы корректно отследить изменение нужного параметра и отправить URL в IndexNow. Ссылку на продукт лучше добавлять только если он реально уже используется в проекте.
Что проверить в конце
- URL отправляется только при изменении статуса индексации.
- В ответе IndexNow нет ошибок авторизации или неверного ключа.
- Страница действительно отдаёт тот robots-режим, который вы ожидаете.
- Логика не срабатывает на черновиках, ревизиях и автосохранениях.
- При массовом редактировании админка не тормозит из-за синхронных запросов.
Если эти пункты закрыты, схема рабочая: WordPress меняет noindex, а IndexNow получает сигнал без ручной отправки URL и без лишних действий со стороны редактора.