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

Диагностика проблемы с индексацией товаров при изменении остатков

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

Основные признаки проблемы:

  • Поисковая выдача показывает устаревшую информацию о наличии товара.
  • Товары, которых нет в наличии, продолжают индексироваться и занимать место в выдаче.
  • Отсутствие автоматической отправки URL в IndexNow при изменении статуса товара.

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

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

Хук woocommerce_update_product срабатывает при обновлении любого товара. Можно использовать его для проверки изменений в поле наличия и отправки URL в IndexNow.

2. Пример кода для автоматической отправки URL

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

function indexnow_send_url_on_stock_change($product_id) {
    static $previous_stock_status = [];

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

    $current_status = $product->get_stock_status(); // 'instock' или 'outofstock'

    // Проверка изменения статуса наличия
    if (isset($previous_stock_status[$product_id]) && $previous_stock_status[$product_id] === $current_status) {
        return; // Статус не изменился, отправлять не нужно
    }

    $previous_stock_status[$product_id] = $current_status;

    // Формируем URL товара
    $url = get_permalink($product_id);

    // Отправка через IndexNow
    indexnow_send_url($url);
}

function indexnow_send_url($url) {
    $indexnow_key = 'ВАШ_КЛЮЧ_API_INDEXNOW'; // Замените на ваш ключ
    $endpoint = 'https://api.indexnow.org/indexnow';

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

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

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

    if (is_wp_error($response)) {
        error_log('IndexNow отправка URL не удалась: ' . $response->get_error_message());
    } elseif (wp_remote_retrieve_response_code($response) !== 200) {
        error_log('IndexNow получил ошибочный ответ: ' . wp_remote_retrieve_response_code($response));
    }
}

В этом коде мы отслеживаем изменение статуса наличия товара и при его изменении отправляем URL в IndexNow.

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

  • Обновите наличие товара в админке WooCommerce.
  • Проверьте логи ошибок PHP (если включено) на предмет сообщений об ошибках отправки.
  • Используйте инструмент отладки IndexNow или сторонние сервисы для проверки успешной отправки URL.
  • Через несколько дней убедитесь, что поисковики обновляют данные о товаре.

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

  • Неправильный ключ API IndexNow: проверьте, что ключ совпадает с опубликованным файлом ВАШ_КЛЮЧ_API_INDEXNOW.txt в корне сайта.
  • Отсутствие файла ключа на сайте: IndexNow требует файл с ключом для верификации. Создайте файл с именем ВАШ_КЛЮЧ_API_INDEXNOW.txt и содержимым ключа в корне сайта.
  • Проблемы с SSL: убедитесь, что сайт доступен по HTTPS без ошибок сертификата, иначе IndexNow не примет запросы.
  • Кэширование: если используется агрессивное кэширование, настройте исключения для URL товаров или автоматическую очистку кэша при изменении наличия.
  • Отсутствие проверки изменения статуса: без проверки статус может отправляться при любом обновлении товара, перегружая IndexNow и снижая эффективность.

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

  • Используйте transient или опции для хранения предыдущего статуса наличия, чтобы не держать массив в статике и не терять данные при перезапуске PHP.
  • Добавьте ограничение частоты отправок URL для одного товара, например, не чаще 1 раза в час.
  • Отправляйте URL пакетами, если обновляется много товаров сразу (например, при массовом обновлении остатков), чтобы не создавать множество отдельных запросов.
  • Храните ключ API в wp-config.php или в безопасных настройках, не в коде напрямую.

Сравнение способов реализации автоматической отправки URL при изменении остатков

МетодПреимуществаНедостаткиРекомендуемая сфера
Хук woocommerce_update_product + кастомный кодГибкость, можно кастомизировать логику, без плагиновТребует навыков разработки, ручная поддержкаМагазины с уникальными требованиями, опытные разработчики
Плагины IndexNow для WooCommerceПростота установки, готовые решенияМогут быть избыточными, нагрузка, ограниченная кастомизацияМалые и средние магазины без команды разработчиков

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

⭐⭐⭐⭐⭐
Оптимальная очередь и пакетная обработка URL для IndexNow в WooCommerce
22.05.2026
Как правильно настроить ограничение частоты запросов IndexNow в WordPress
17.03.2026
IndexNow и robots.txt для автоматической блокировки ненужных URL в WordPress
06.03.2026
IndexNow автоматическая отправка URL при изменении постов WordPress
07.02.2026
IndexNow автоматическое отправление изменений в WordPress: практическое руководство
11.12.2025
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше