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

Проблема отправки большого объема URL из WooCommerce в IndexNow

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

Проблемы, с которыми сталкиваются разработчики

  • Отправка сотен или тысяч URL за один запрос — IndexNow не принимает большие пакеты.
  • Нет контроля частоты запросов — сервер перегружается, возникают таймауты.
  • Ошибки повторной отправки одних и тех же URL без проверки статуса.
  • Отсутствие логики повторной отправки при сбоев.

Диагностика проблем с отправкой URL из WooCommerce в IndexNow

Для выявления проблем используйте следующие методы:

  • Логирование запросов и ответов IndexNow API — ошибки 429 (Too Many Requests) или 500 указывают на перегрузку.
  • Отслеживание времени выполнения функций отправки URL — если процесс занимает больше 30 секунд, нужна оптимизация.
  • Проверка очереди URL — дублируются ли URL и как часто они повторно отправляются.
  • Мониторинг состояния сервера: нагрузка CPU, память, PHP-FPM процессы.

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

1. Создание собственной очереди отправки URL

Создайте кастомную таблицу или используйте wp_options с сериализованным массивом для хранения URL, которые нужно отправить. Добавляйте URL при изменении товара, но не отправляйте сразу.

function enqueue_indexnow_url($url) {
    $queue = get_option('indexnow_url_queue', []);
    if (!in_array($url, $queue)) {
        $queue[] = $url;
        update_option('indexnow_url_queue', $queue);
    }
}

2. Пакетная отправка URL по 10-20 штук с интервалом

IndexNow рекомендует отправлять URL пачками до 10-20 штук. Для этого создайте WP-Cron задачу с интервалом в 1-2 минуты, которая будет брать из очереди пакет и отправлять.

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

    $batch = array_slice($queue, 0, 20);
    $endpoint = 'https://api.indexnow.org/indexnow?key=YOUR_KEY&keyLocation=https://your-site.com/key-file.txt';

    $response = wp_remote_post($endpoint, [
        'headers' => ['Content-Type' => 'application/json'],
        'body'    => json_encode(['host' => 'your-site.com', 'key' => 'YOUR_KEY', 'urlList' => $batch]),
        'timeout' => 15
    ]);

    if (!is_wp_error($response) && wp_remote_retrieve_response_code($response) === 200) {
        // Успешная отправка - удаляем из очереди
        $queue = array_slice($queue, count($batch));
        update_option('indexnow_url_queue', $queue);
    } else {
        // Логируем ошибку для отладки
        error_log('IndexNow send failed: ' . print_r($response, true));
    }
}

add_action('indexnow_send_batch_hook', 'send_indexnow_batch');

if (!wp_next_scheduled('indexnow_send_batch_hook')) {
    wp_schedule_event(time(), 'two_minutes', 'indexnow_send_batch_hook');
}

// Регистрируем интервал 2 минуты
add_filter('cron_schedules', function($schedules){
    $schedules['two_minutes'] = ['interval' => 120, 'display' => 'Every 2 Minutes'];
    return $schedules;
});

3. Автоматическое добавление URL в очередь при изменении товара

Подключитесь к хукам WooCommerce для отслеживания обновлений товаров и вариаций:

add_action('woocommerce_update_product', function($product_id) {
    $url = get_permalink($product_id);
    enqueue_indexnow_url($url);
});

add_action('woocommerce_update_product_variation', function($variation_id) {
    $url = get_permalink($variation_id);
    enqueue_indexnow_url($url);
});

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

  • Проверьте, что в wp_options постепенно уменьшается размер массива indexnow_url_queue после запуска WP-Cron.
  • Посмотрите логи ошибок сервера и WordPress — отсутствуют ли ошибки отправки.
  • Используйте инструмент IndexNow API для проверки состояния ключа и получаемых URL.
  • Мониторьте время выполнения и нагрузку сервера — они не должны превышать норму.

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

  • Отправка слишком большого пакета URL: приводит к ошибкам 400/429. Решение — уменьшить размер пакета до 10-20 URL.
  • Дублирование URL в очереди: из-за отсутствия проверки. Решение — использовать проверку in_array при добавлении в очередь.
  • Отсутствие повторной отправки при ошибках: приводит к потере обновлений. Решение — логировать ошибки и повторять отправку с экспоненциальной задержкой.
  • WP-Cron не запускается из-за низкой посещаемости: используйте системный Cron для надежности.

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

  • Храните ключ API IndexNow вне публичных директорий, например в wp-config.php и загружайте динамически.
  • Ограничьте права пользователя, который может изменять URL-очередь, чтобы избежать злоупотреблений.
  • Используйте транзиенты для кеширования результатов отправки и уменьшения нагрузки.
  • При больших магазинах рассмотрите использование внешнего очередного сервиса (Redis, RabbitMQ) для управления задачами.

Сравнение подходов к отправке URL

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

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

⭐⭐⭐⭐⭐
IndexNow для WordPress: интеграция и оптимизация индексации сайта
03.11.2025
IndexNow для WooCommerce: автоматическое отправление URL при изменении атрибутов товаров
20.06.2026
Как создать плагин WordPress для автоматической отправки URL в IndexNow
14.11.2025
IndexNow: как автоматически отправлять URL при импорте контента в WordPress
08.04.2026
IndexNow и WooCommerce: автоматическое удаление товаров с отсутствием в наличии
09.05.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее