IndexNow для WooCommerce: автоматическое удаление из индекса отсутствующих товаров

Диагностика проблемы: почему отсутствующие товары продолжают индексироваться

В WooCommerce часто возникает ситуация, когда товары со статусом "отсутствует на складе" или "нет в наличии" продолжают появляться в поисковой выдаче. Это происходит из-за того, что поисковые системы не получают своевременную информацию об изменении статуса или удалении товара с сайта. В результате снижается релевантность выдачи и увеличивается количество неактуальных страниц в индексе.

Для решения этой задачи можно использовать протокол IndexNow, который позволяет оперативно уведомлять поисковики об изменениях URL, включая удаление неактуальных страниц.

Как автоматически отправлять IndexNow уведомления об отсутствии товаров в WooCommerce

Использование хуков WooCommerce для отслеживания изменения статуса товара

WooCommerce хранит статус наличия товара в метаполе _stock_status. При изменении статуса с "instock" на "outofstock" нужно отправить уведомление в IndexNow, чтобы поисковики удалили URL товара из индекса.

Ниже пример кода для functions.php вашей темы или в виде мини-плагина:

add_action('update_postmeta', 'indexnow_woocommerce_stock_status_change', 10, 4);

function indexnow_woocommerce_stock_status_change($meta_id, $post_id, $meta_key, $_meta_value) {
    if ($meta_key !== '_stock_status') {
        return;
    }

    $old_status = get_metadata_by_mid('post', $meta_id)->meta_value ?? null;
    $new_status = $_meta_value;

    if ($old_status === $new_status) {
        return; // статус не изменился
    }

    if ($new_status === 'outofstock') {
        $url = get_permalink($post_id);
        if ($url) {
            indexnow_send_url($url);
        }
    }
}

function indexnow_send_url($url) {
    $key = 'ВАШ_КЛЮЧ_INDEXNOW'; // вставьте свой ключ
    $endpoint = 'https://api.indexnow.org/indexnow';

    $payload = [
        'host' => parse_url($url, PHP_URL_HOST),
        'key' => $key,
        'keyLocation' => home_url('/') . $key . '.txt',
        'urlList' => [$url],
    ];

    $args = [
        'headers' => [
            'Content-Type' => 'application/json',
        ],
        'body' => wp_json_encode($payload),
        'timeout' => 10,
    ];

    $response = wp_remote_post($endpoint, $args);

    if (is_wp_error($response)) {
        error_log('IndexNow error: ' . $response->get_error_message());
    } else {
        error_log('IndexNow sent for URL: ' . $url);
    }
}

Обратите внимание, что необходимо создать в корне сайта файл ВАШ_КЛЮЧ_INDEXNOW.txt с содержимым ключа для верификации на стороне IndexNow.

Проверка результата после внедрения

Для проверки работы решения выполните следующие шаги:

  • Измените статус наличия товара в админке WooCommerce с "в наличии" на "нет в наличии".
  • Просмотрите лог ошибок PHP (error_log) или используйте плагин для просмотра логов — там должно появиться сообщение об успешной отправке URL в IndexNow.
  • Проверьте в Google Search Console или Bing Webmaster Tools, что URL товара помечается как удалённый из индекса (обычно это занимает некоторое время).

Частые ошибки и как их исправить

  • Неверный ключ IndexNow или отсутствует файл в корне сайта: убедитесь, что файл ВАШ_КЛЮЧ_INDEXNOW.txt доступен по адресу https://ваш-сайт.ru/ВАШ_КЛЮЧ_INDEXNOW.txt и содержит правильную строку ключа.
  • Хук не срабатывает при обновлении статуса: метаполе может обновляться не через update_postmeta, тогда используйте альтернативные хуки, например woocommerce_update_product или save_post_product, с проверкой метаполей.
  • Отправка уведомления не происходит: проверьте, что у вас включена функция wp_remote_post, и нет блокировок на сервере для внешних запросов.
  • URL не соответствует каноническому: используйте get_permalink для получения точного URL товара, чтобы избежать проблем с индексированием.

Практические советы по безопасности и производительности

  • Не храните ключ IndexNow в открытом виде в публичных файлах темы — лучше определить его в wp-config.php или в настройках плагина с ограничением доступа.
  • Добавьте дебаунс или кеширование отправки URL, чтобы избежать частых повторных запросов при массовом обновлении товаров.
  • Рекомендуется использовать WP Cron для пакетной отправки URL в случае массовых изменений, чтобы не перегружать сервер.

Сравнение вариантов реализации автоматического удаления URL товара из индекса

СпособПлюсыМинусы
Хук update_postmetaТочная реакция на изменение статуса, простота реализацииМожет не сработать при массовом обновлении, требует логирования
WP Cron пакетной отправки URLЭкономит ресурсы при массовых изменениях, гибкостьЗадержка в отправке уведомлений, сложнее в настройке
Плагины с интеграцией IndexNowУдобство, поддержка обновлений, интерфейсМеньше контроля, возможна нагрузка, платные решения

Чек-лист для внедрения автоматического удаления отсутствующих товаров из индекса с помощью IndexNow

  • Создать и разместить файл ключа IndexNow в корне сайта
  • Настроить хук для отслеживания изменения статуса товара
  • Реализовать функцию отправки URL в API IndexNow
  • Проверить логи ошибок и успешных отправок
  • Протестировать изменение статуса товара и проверку индексации в поисковиках
  • Рассмотреть автоматизацию отправки через WP Cron при большом количестве товаров
  • Обеспечить безопасность хранения ключа

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
IndexNow и robots.txt для автоматической блокировки ненужных URL в WordPress
06.03.2026
Оптимизация базы данных WordPress и ускорение запросов: практические советы
11.11.2025
IndexNow и отладка отправки URL в крупных проектах WordPress: практические советы
24.02.2026
Как автоматически удалять слуги с постоянным редиректом в WordPress и обновлять индекс с помощью IndexNow
26.03.2026
IndexNow оптимизация отправки URL в WooCommerce: практические решения для больших магазинов
01.04.2026
×
WPShop
честная партнерка!

Зарабатывай до 3225₽ с каждой продажи

Подключиться к партнерке