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

Проблема: почему важна отправка URL вариантов товаров в WooCommerce через IndexNow

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

Диагностика: как проверить, что IndexNow не отправляет URL вариантов товаров

  • Откройте консоль сервера и проверьте логи отправки URL IndexNow - ищите отсутствие URL с параметрами варианта, например ?attribute_pa_color=red.
  • В панели разработчика браузера проверьте, есть ли на страницах вариантов мета-теги или ссылки, указывающие на уникальные URL.
  • Используйте инструмент IndexNow API для просмотра последних отправленных URL — проверьте, есть ли среди них URL с вариантами товаров.

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

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

WooCommerce хранит варианты как дочерние записи типа product_variation. Для отслеживания изменений используем хук save_post_product_variation:

add_action('save_post_product_variation', 'send_indexnow_url_for_variation', 10, 3);
function send_indexnow_url_for_variation($post_ID, $post, $update) {
    // Получаем объект варианта
    $variation = wc_get_product($post_ID);
    if (!$variation) return;

    // Получаем родительский товар
    $parent_id = $variation->get_parent_id();
    $parent = wc_get_product($parent_id);
    if (!$parent) return;

    // Генерируем URL варианта
    $url = $variation->get_permalink();

    // Отправляем URL в IndexNow
    send_url_to_indexnow($url);
}

2. Реализация функции отправки URL в IndexNow

Пример базовой функции, которая отправляет один URL в IndexNow. Замените YOUR_INDEXNOW_KEY и YOUR_INDEXNOW_ENDPOINT на реальные значения.

function send_url_to_indexnow($url) {
    $key = 'YOUR_INDEXNOW_KEY';
    $endpoint = 'https://api.indexnow.org/indexnow';
    
    $payload = [
        'host' => parse_url(home_url(), PHP_URL_HOST),
        'key' => $key,
        'keyLocation' => home_url('/').$key.'.txt',
        'urlList' => [$url],
    ];

    $response = wp_remote_post($endpoint, [
        'headers' => ['Content-Type' => 'application/json'],
        'body' => json_encode($payload),
        'timeout' => 10,
    ]);

    if (is_wp_error($response)) {
        error_log('IndexNow error: '.$response->get_error_message());
    } elseif (wp_remote_retrieve_response_code($response) !== 200) {
        error_log('IndexNow HTTP error: '.wp_remote_retrieve_response_code($response));
    }
}

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

При массовом обновлении вариантов (например, через импорт) лучше собирать URL в очередь и отправлять пакетами. Для этого используйте транзиенты и Cron:

function queue_indexnow_url($url) {
    $queue = get_transient('indexnow_url_queue') ?: [];
    if (!in_array($url, $queue)) {
        $queue[] = $url;
        set_transient('indexnow_url_queue', $queue, 12 * HOUR_IN_SECONDS);
    }
}

function indexnow_send_batch() {
    $queue = get_transient('indexnow_url_queue');
    if (!$queue) return;

    $key = 'YOUR_INDEXNOW_KEY';
    $endpoint = 'https://api.indexnow.org/indexnow';

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

    $response = wp_remote_post($endpoint, [
        'headers' => ['Content-Type' => 'application/json'],
        'body' => json_encode($payload),
    ]);

    if (!is_wp_error($response) && wp_remote_retrieve_response_code($response) === 200) {
        delete_transient('indexnow_url_queue');
    } else {
        error_log('IndexNow batch send error');
    }
}

// cron hook
add_action('indexnow_send_batch_hook', 'indexnow_send_batch');

// Запланировать cron, если не запланирован
if (!wp_next_scheduled('indexnow_send_batch_hook')) {
    wp_schedule_event(time(), 'hourly', 'indexnow_send_batch_hook');
}

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

  • Проверьте логи ошибок сервера на предмет ошибок IndexNow.
  • Используйте инструменты IndexNow API для просмотра отправленных URL — должны появиться URL вариантов товаров.
  • В браузере откройте страницу варианта товара, скопируйте URL, затем через несколько часов проверьте в поисковиках, что он обновился (например, с помощью оператора site: и параметров варианта).
  • При массовом обновлении товаров и вариантов проверьте, что в очереди не накапливаются URL и cron-задание работает корректно.

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

  • Отсутствие ключа IndexNow или неправильный путь к keyLocation. Проверьте, что ключ доступен по URL https://example.com/YOUR_INDEXNOW_KEY.txt, иначе API отвергнет запрос.
  • Отправка URL без параметров варианта. Убедитесь, что для варианта вызывается $variation->get_permalink(), а не основной товар.
  • Дублирование URL в очереди. Используйте проверку in_array() перед добавлением URL в транзиент, чтобы избежать переполнения и повторных запросов.
  • Отсутствие cron-задачи для пакетной отправки. Проверьте планировщик WordPress, используйте плагин WP Crontrol для отладки.
  • Ошибка HTTP 403 или 401 при отправке. Проверьте корректность ключа и IP-адреса сервера, используйте HTTPS и валидный сертификат.

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

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

Сравнение подходов к отправке URL вариантов товаров в WooCommerce через IndexNow

МетодПлюсыМинусыПример кода
Отправка сразу при сохранении вариантаМгновенное обновление индексаВысокая нагрузка при массовых измененияхsave_post_product_variation
Очередь и пакетная отправка через CronОптимизация нагрузки, стабильностьЗадержка обновления индекса (до часа)Транзиенты + cron
Ручной запуск отправки URLПолный контрольТребует вмешательства администратораWP CLI или кнопка в админке

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

⭐⭐⭐⭐⭐
IndexNow и WooCommerce: автоматизация отправки URL при изменениях наличия товаров
18.04.2026
IndexNow и WooCommerce: как оптимально автоматизировать отправку SKU и вариантов товаров
07.06.2026
Как добавить IndexNow в WordPress без плагинов: ручная интеграция и примеры кода
29.11.2025
IndexNow и кэширование в WordPress: практические советы и решения
22.12.2025
IndexNow и безопасность WordPress: как правильно хранить и использовать ключи API
24.02.2026
×
-15%
на премиум плагин
My Popup

Повысьте конверсию!

Получить скидку »