IndexNow и WooCommerce: автоматизация отправки URL при изменениях наличия товаров

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

В интернет-магазинах на WooCommerce статус наличия товаров часто меняется: товары могут появляться в наличии, уходить в резерв или становиться недоступны. Поисковые системы должны быстро узнавать об этих изменениях, чтобы корректно индексировать страницы и показывать актуальную информацию пользователям. Без автоматической отправки обновленных URL в IndexNow вы рискуете получить устаревшую выдачу и снизить конверсию.

Как отслеживать изменения наличия товаров в WooCommerce

WooCommerce хранит статус наличия товара в метаполе _stock_status, возможные значения — instock, outofstock и onbackorder. Для отслеживания изменений используем хук updated_postmeta, который срабатывает при обновлении метаданных.

Код для отслеживания изменения статуса наличия

add_action('updated_postmeta', 'send_indexnow_on_stock_status_change', 10, 4);
function send_indexnow_on_stock_status_change($meta_id, $post_id, $meta_key, $meta_value) {
    if ($meta_key !== '_stock_status') {
        return;
    }

    $post_type = get_post_type($post_id);
    if ($post_type !== 'product') {
        return;
    }

    // Получаем URL товара
    $url = get_permalink($post_id);

    // Вызываем функцию отправки URL в IndexNow
    indexnow_send_url([$url]);
}

Пошаговое решение: как автоматизировать отправку URL в IndexNow при изменении наличия

  1. Создайте функцию отправки URL в IndexNow. Ниже пример минимальной реализации с использованием CURL.
function indexnow_send_url(array $urls) {
    $endpoint = 'https://api.indexnow.org/indexnow';
    $host = parse_url(home_url(), PHP_URL_HOST);
    $key = 'ВАШ_КЛЮЧ_API_INDEXNOW'; // Замените на ваш ключ

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

    $ch = curl_init($endpoint);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $response = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    // Логирование для отладки
    if ($http_code !== 200) {
        error_log('IndexNow error: HTTP '.$http_code.' Response: '.$response);
    } else {
        error_log('IndexNow URL отправлены успешно: '.implode(', ', $urls));
    }
}
  1. Добавьте ключ API IndexNow и разместите файл ключа на сайте. Создайте текстовый файл с именем ключа, например ВАШ_КЛЮЧ_API_INDEXNOW.txt, в корне сайта с содержимым равным ключу.
  2. Подключите функцию отправки к хуку изменения статуса наличия (пример выше).
  3. Проверьте, что CURL включен на сервере и нет ограничений на исходящие запросы.

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

  • Измените наличие товара через админку WooCommerce.
  • Проверьте лог ошибок PHP (error_log) на предмет сообщений от функции indexnow_send_url.
  • Убедитесь, что IndexNow ответил HTTP 200.
  • Используйте инструменты поисковых систем для проверки индексации обновленных страниц.

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

  • Отсутствие ключа API или неправильный путь к файлу ключа. Проверьте, что файл ВАШ_КЛЮЧ_API_INDEXNOW.txt доступен по адресу https://ваш-домен/ВАШ_КЛЮЧ_API_INDEXNOW.txt.
  • CURL не установлен или отключен на сервере. Проверьте с помощью phpinfo() или командной строки.
  • Хук срабатывает слишком часто и вызывает лимит по отправкам. Добавьте кэширование или очередь отправки URL, если сайт с большим числом товаров.
  • Некорректный формат URL в списке. Используйте get_permalink() для получения правильных адресов.

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

  • Храните ключ API вне публичных директорий или используйте константы в wp-config.php.
  • Для большого каталога товаров реализуйте очередь отправки URL через WP Cron или внешние очереди, чтобы не перегружать сервер.
  • Добавьте логирование с ограничением по размеру файла или используйте сторонние сервисы мониторинга.
  • Обрабатывайте ошибки HTTP и повторяйте попытки отправки с экспоненциальной задержкой.

Сравнение методов отправки URL при изменении наличия товаров

МетодПлюсыМинусыПример
Хук updated_postmetaМгновенная реакция, простая реализацияМного запросов при массовом обновлении, возможна нагрузкаПример кода выше
Периодический запуск WP CronКонтроль нагрузки, возможность пакетной отправкиЗадержка между обновлением и отправкойЗапуск функции с выборкой измененных товаров за интервал
Вебхуки сторонних системИнтеграция с внешними сервисами, гибкостьТребует дополнительной настройки, зависит от внешних сервисовОбработка вебхуков и вызов IndexNow API

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

⭐⭐⭐⭐⭐
IndexNow и WooCommerce: решение проблем с обновлением наличия товаров
06.05.2026
Как удалить из индекса WordPress старые изображения с помощью IndexNow
14.12.2025
Как автоматизировать удаление и обновление URL в WordPress с помощью Webhooks и IndexNow
04.04.2026
Оптимизация базы данных WordPress и ускорение запросов: практические советы
11.11.2025
Изменение URL в WordPress без потери индексации и позиций
08.12.2025
×
WPShop
честная партнерка!

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

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