Оптимальная очередь и пакетная обработка URL для IndexNow в WooCommerce

Диагностика проблемы массовой отправки URL в IndexNow при больших объемах WooCommerce

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

  • Ошибки 429 (Too Many Requests) от API IndexNow;
  • Падение производительности сайта из-за блокирующих HTTP-запросов;
  • Отправка URL происходит не своевременно, либо дублируется;
  • Накопление большого объема необработанных URL в базе данных.

Для эффективного решения важно правильно организовать очередь URL с пакетной обработкой и ограничением скорости отправки.

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

1. Отслеживание изменений URL товаров

Используйте хук save_post_product для регистрации URL измененных товаров. Добавьте URL в кастомную очередь в базе (например, отдельную таблицу или опцию с сериализованным массивом).

function enqueue_product_url_for_indexnow($post_id) {
    if (get_post_type($post_id) !== 'product') return;
    $url = get_permalink($post_id);
    $queue = get_option('indexnow_url_queue', []);
    if (!in_array($url, $queue)) {
        $queue[] = $url;
        update_option('indexnow_url_queue', $queue);
    }
}
add_action('save_post_product', 'enqueue_product_url_for_indexnow');

2. Создание Cron-задачи для пакетной отправки

Настройте WP-Cron, который раз в 5 минут будет отправлять URL пакетами по 10 штук, очищая отправленные из очереди.

function indexnow_send_batch() {
    $queue = get_option('indexnow_url_queue', []);
    if (empty($queue)) return;

    $batch = array_slice($queue, 0, 10);

    $api_key = 'ВАШ_КЛЮЧ_API';
    $endpoint = 'https://api.indexnow.org/indexnow?key=' . $api_key;

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

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

    if (!is_wp_error($response) && wp_remote_retrieve_response_code($response) === 200) {
        // Удаляем отправленные URL из очереди
        $queue = array_slice($queue, count($batch));
        update_option('indexnow_url_queue', $queue);
    }
}

if (!wp_next_scheduled('indexnow_send_batch_hook')) {
    wp_schedule_event(time(), 'five_minutes', 'indexnow_send_batch_hook');
}
add_action('indexnow_send_batch_hook', 'indexnow_send_batch');

3. Регистрируем интервал Cron 5 минут

function custom_cron_intervals($schedules) {
    $schedules['five_minutes'] = [
        'interval' => 300, // 5 минут
        'display' => __('Каждые 5 минут')
    ];
    return $schedules;
}
add_filter('cron_schedules', 'custom_cron_intervals');

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

  • В базе данных (опции или таблице) должна постепенно уменьшаться очередь URL после выполнения Cron-задачи.
  • В логах сервера и WordPress не должно быть ошибок 429 и сетевых таймаутов, связанных с IndexNow.
  • Проверить успешность отправки можно через ответ API и статус wp_remote_retrieve_response_code 200.
  • С помощью внешних инструментов (например, Search Console или панели IndexNow) убедитесь, что URL обновляются в индексе поисковиков.

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

  • Ошибка 429 или блокировка API: Обычно вызвана слишком частыми запросами. Решение — увеличить интервал Cron или уменьшить размер пакета.
  • Дублирование URL в очереди: Проверьте, что URL добавляются в очередь только один раз. Используйте проверку in_array перед добавлением.
  • Cron не запускается: Убедитесь, что WordPress Cron активен и что нет конфликтов с плагинами кеширования или серверными настройками.
  • URL не обновляются в индексе: Проверьте правильность ключа API, наличие файла ключа indexnow-key.txt в корне сайта и корректность формата отправляемых данных.

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

  • Храните ключ API IndexNow в wp-config.php или в защищенном хранилище, не в базе данных.
  • Минимизируйте объем данных в очереди — удаляйте устаревшие или дублирующие URL.
  • Используйте асинхронные HTTP-запросы, если плагин или тема поддерживают, чтобы не блокировать загрузку страниц.
  • Включите логирование ошибок отправки и реализуйте повторную попытку при временных сбоях.

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

МетодПлюсыМинусы
WP-Cron с опцией в базе (как в статье)Простота реализации, не требует внешних БДОпции базы могут расти, ограничение по размеру, возможны коллизии
Отдельная таблица MySQL для очередиМасштабируемость, удобство управленияСложнее в реализации, требует миграции и очистки
Использование внешних очередей (Redis, RabbitMQ)Высокая производительность, надежностьТребует дополнительной инфраструктуры

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

⭐⭐⭐⭐⭐
Оптимизация файла robots.txt для IndexNow и WordPress: практические советы и примеры
21.11.2025
IndexNow и использование различных методов отправки URL в WordPress
29.03.2026
Как автоматически удалять слуги с постоянным редиректом в WordPress и обновлять индекс с помощью IndexNow
18.05.2026
Решение проблем с отправкой URL в IndexNow при большом объеме сайта WordPress
20.01.2026
Оптимальная очередь и пакетная обработка URL для IndexNow в WooCommerce
22.05.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее