IndexNow и WooCommerce: решение проблем с обновлением наличия товаров

Диагностика проблемы с обновлением наличия товаров в WooCommerce и IndexNow

Частая проблема при использовании IndexNow вместе с WooCommerce — индексация устаревшей информации о наличии товаров. Это происходит, когда изменение статуса товара (например, из «в наличии» в «нет в наличии») не приводит к своевременной отправке обновлённого URL в IndexNow. В результате поисковые системы продолжают показывать неверные данные, что негативно сказывается на пользовательском опыте и конверсии.

Чтобы выявить проблему, проверьте:

  • Отправляются ли URL в IndexNow при изменении статуса товара. Это можно отследить через логи плагина или с помощью дебага REST-запросов.
  • Настроено ли автоматическое срабатывание хуков после обновления товара.
  • Не блокируют ли кэш или оптимизаторы вызов функций отправки URL.
  • Корректно ли обрабатываются массовые изменения статусов товаров (например, при импорте).

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

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

Для WooCommerce статус наличия хранится в мета-данных _stock_status. Лучше всего использовать хук woocommerce_update_product, который срабатывает при обновлении товара, и проверять изменение статуса наличия.

2. Пример кода для отправки URL в IndexNow при изменении наличия

add_action('woocommerce_update_product', 'send_indexnow_url_on_stock_change', 10, 1);

function send_indexnow_url_on_stock_change($product_id) {
    $product = wc_get_product($product_id);
    if (!$product) {
        return;
    }

    // Получаем текущий статус наличия
    $current_stock_status = $product->get_stock_status(); // 'instock' или 'outofstock'

    // Получаем прошлое значение из transient, если есть
    $prev_status = get_transient('prev_stock_status_' . $product_id);

    if ($prev_status !== $current_stock_status) {
        // Статус изменился, отправляем URL в IndexNow
        $url = get_permalink($product_id);
        send_url_to_indexnow($url);

        // Обновляем transient
        set_transient('prev_stock_status_' . $product_id, $current_stock_status, 12 * HOUR_IN_SECONDS);
    }
}

function send_url_to_indexnow($url) {
    $indexnow_key = 'ВАШ_КЛЮЧ_API';
    $indexnow_endpoint = 'https://api.indexnow.org/indexnow?url=' . urlencode($url) . '&key=' . $indexnow_key;
    $response = wp_remote_get($indexnow_endpoint);
    if (is_wp_error($response)) {
        error_log('IndexNow: ошибка при отправке URL ' . $url . ' - ' . $response->get_error_message());
    } else {
        error_log('IndexNow: успешно отправлен URL ' . $url);
    }
}

3. Обработка массовых обновлений статусов

При импорте товаров или массовых изменениях лучше использовать WP-Cron для пакетной отправки URL, чтобы избежать превышения лимитов API и нагрузок.

add_action('my_mass_stock_update_cron', 'send_mass_indexnow_urls');

function send_mass_indexnow_urls() {
    $args = [
        'post_type' => 'product',
        'meta_query' => [
            [
                'key' => '_stock_status',
                'compare' => 'EXISTS',
            ],
        ],
        'posts_per_page' => 50,
        'fields' => 'ids',
    ];
    $products = get_posts($args);
    foreach ($products as $product_id) {
        $url = get_permalink($product_id);
        send_url_to_indexnow($url);
    }
}

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

  • Проверьте логи ошибок и успешных отправок в wp-content/debug.log (включите WP_DEBUG и WP_DEBUG_LOG).
  • Используйте инструменты IndexNow для проверки последней отправки URL.
  • Проверьте в поисковых системах актуальность информации о наличии товаров спустя несколько дней.
  • При массовых изменениях смотрите нагрузку на сайт и частоту вызова API.

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

  • Не срабатывает отправка URL при обновлении товара. Проверьте, что хук woocommerce_update_product подключён и не конфликтует с другими плагинами, отключите кэширование на время теста.
  • Отправка URL в IndexNow приводит к ошибкам 4xx/5xx. Проверьте правильность ключа API и формат запроса, убедитесь, что сервер может делать исходящие запросы.
  • Массовые обновления вызывают превышение лимитов API. Реализуйте пакетную отправку с задержками через WP-Cron.
  • Статус наличия меняется, но URL не отправляется повторно. Проверьте логику транзиентов, возможно кеширование мешает обновлению.

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

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

Сравнение вариантов реализации отправки URL в IndexNow

МетодПлюсыМинусыКогда использовать
Хук woocommerce_update_product + моментальная отправкаМгновенное обновление индекса, простота реализацииВысокая нагрузка при массовых обновлениях, риск превышения лимитовМаленькие и средние магазины
WP-Cron пакетная отправкаОптимизация нагрузки, контроль частоты запросовЗадержка между обновлением и индексацией, сложнее настройкаБольшие магазины, массовые обновления
Ручной запуск через админкуПолный контроль, отсутствие лишних запросовТребуется вмешательство, нельзя автоматизироватьМалые проекты, редкие обновления

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

⭐⭐⭐⭐⭐
Как удалить редиректы и ошибки 404 из индекса с помощью IndexNow в WordPress
04.12.2025
IndexNow и WooCommerce: решение проблем с обновлением наличия товаров
06.05.2026
Как автоматизировать удаление и обновление URL в WordPress с помощью Webhooks и IndexNow
04.04.2026
IndexNow автоматическая очистка кеша в WordPress: практическое руководство
24.01.2026
Как сделать обновление метаданных WordPress без изменения контента
04.12.2025
×
WPShop
честная партнерка!

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

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