Оптимизация отправки URL в IndexNow при большом объеме сайта WordPress

При больших объемах сайта на WordPress автоматическая отправка URL в IndexNow может сталкиваться с проблемами — задержками, таймаутами или блокировками со стороны поисковых систем. В этой статье подробно разберём, как оптимизировать процесс отправки, чтобы обеспечить стабильную и быструю индексацию новых и обновлённых страниц.

Особенности работы IndexNow с большими сайтами WordPress

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

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

Без оптимизации отправка URL может превратиться в «узкое место» при обновлении контента.

Использование очередей и пакетной отправки URL

Для больших сайтов нельзя слать все URL одномоментно. Нужно разбивать список на пакеты и отправлять их по очереди. Это помогает снизить нагрузку и избежать ошибок 429 (Too Many Requests).

Пример функции для пакетной отправки URL с префиксом indexnowSu:

function indexnowSu_send_url_batch(array $urls, string $key, string $keyLocation) {
    $endpoint = 'https://api.indexnow.org/indexnow';
    $max_batch_size = 1000; // Рекомендуемый максимум за один запрос

    $batches = array_chunk($urls, $max_batch_size);
    foreach ($batches as $batch) {
        $payload = [
            'host' => parse_url(home_url(), PHP_URL_HOST),
            'key' => $key,
            'keyLocation' => $keyLocation,
            'urlList' => $batch
        ];
        $response = wp_remote_post($endpoint, [
            'headers' => ['Content-Type' => 'application/json'],
            'body' => wp_json_encode($payload),
            'timeout' => 10
        ]);
        if (is_wp_error($response)) {
            error_log('IndexNow batch send error: ' . $response->get_error_message());
            // Можно реализовать повторную попытку или запись в очередь на повтор
        }
        sleep(1); // Пауза между запросами для снижения нагрузки
    }
}

В этом примере URL разбиваются на пакеты по 1000, отправляются с паузой, что снижает нагрузку на сервер и API IndexNow.

Автоматизация формирования списка URL для отправки

Для крупных сайтов важно выбирать только изменённые или новые URL, чтобы не отправлять весь список постоянно.

Можно использовать хуки WordPress для добавления URL в очередь отправки при публикации, обновлении или удалении записей:

function indexnowSu_on_post_save($post_id, $post, $update) {
    if ($post->post_status !== 'publish') {
        return;
    }
    $url = get_permalink($post_id);
    indexnowSu_add_url_to_queue($url);
}
add_action('save_post', 'indexnowSu_on_post_save', 10, 3);

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

Такой подход позволяет динамически формировать список URL, которые требуют отправки.

Планирование отправки через WP-Cron и предотвращение конфликтов

Для отправки очереди URL используйте cron-задачу, которая срабатывает, например, каждые 5–10 минут. Это позволит равномерно распределять нагрузку на API и сервер.

function indexnowSu_schedule_cron() {
    if (!wp_next_scheduled('indexnowSu_send_url_cron')) {
        wp_schedule_event(time(), 'ten_minutes', 'indexnowSu_send_url_cron');
    }
}
add_action('wp', 'indexnowSu_schedule_cron');

add_action('indexnowSu_send_url_cron', 'indexnowSu_send_url_queue');

function indexnowSu_send_url_queue() {
    $queue = get_option('indexnowSu_url_queue', []);
    if (empty($queue)) {
        return;
    }
    $key = 'ВАШ_КЛЮЧ_INDEXNOW';
    $keyLocation = home_url('/indexnow.key');
    indexnowSu_send_url_batch($queue, $key, $keyLocation);
    // Очищаем очередь после успешной отправки
    update_option('indexnowSu_url_queue', []);
}

// Добавляем интервал 10 минут для WP-Cron
add_filter('cron_schedules', function($schedules) {
    $schedules['ten_minutes'] = [
        'interval' => 600,
        'display' => 'Каждые 10 минут'
    ];
    return $schedules;
});

Так мы гарантируем, что отправка не будет запускаться слишком часто и не создаст конфликтов.

Использование плагинов для оптимизации IndexNow на больших сайтах

Для упрощения настройки и расширения функционала можно использовать готовые плагины с поддержкой IndexNow и оптимизацией отправки URL:

  • Clearfy Pro — плагин с расширенными возможностями оптимизации, включая управление индексацией и отправкой URL.
  • WPCommunity — позволяет создавать кастомные типы записей с автоматической отправкой в IndexNow.

Плагины помогают избежать ошибок в реализации и экономят время.

Обработка ошибок и повторные попытки отправки

При работе с большим количеством URL важно логировать ошибки и повторять попытки отправки, чтобы не потерять важные изменения.

Реализуйте механизм записи неотправленных URL в отдельную очередь с последующим повтором:

function indexnowSu_send_url_batch_with_retry(array $urls, string $key, string $keyLocation) {
    $failed_urls = [];
    $max_batch_size = 1000;
    $batches = array_chunk($urls, $max_batch_size);
    foreach ($batches as $batch) {
        $payload = [
            'host' => parse_url(home_url(), PHP_URL_HOST),
            'key' => $key,
            'keyLocation' => $keyLocation,
            'urlList' => $batch
        ];
        $response = wp_remote_post('https://api.indexnow.org/indexnow', [
            'headers' => ['Content-Type' => 'application/json'],
            'body' => wp_json_encode($payload),
            'timeout' => 10
        ]);
        if (is_wp_error($response) || wp_remote_retrieve_response_code($response) !== 200) {
            $failed_urls = array_merge($failed_urls, $batch);
            error_log('IndexNow batch send failed');
        }
        sleep(1);
    }
    if (!empty($failed_urls)) {
        $retry_queue = get_option('indexnowSu_retry_queue', []);
        $retry_queue = array_unique(array_merge($retry_queue, $failed_urls));
        update_option('indexnowSu_retry_queue', $retry_queue);
    }
}

Далее можно настроить отдельную cron-задачу для повторных попыток отправки из indexnowSu_retry_queue.

Проверка результатов и отладка отправки URL

Для контроля работы важно логировать ответы API и создавать панель в админке с информацией о статусе отправки. Это поможет оперативно выявлять проблемы и корректировать процесс.

Например, простая функция для логирования:

function indexnowSu_log_response($response) {
    $log_file = WP_CONTENT_DIR . '/indexnowSu_log.txt';
    $entry = date('Y-m-d H:i:s') . ' - ' . print_r($response, true) . "\n";
    file_put_contents($log_file, $entry, FILE_APPEND);
}

Вызывайте её после каждого запроса для сохранения подробностей.

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

⭐⭐⭐⭐⭐
IndexNow для WooCommerce: автоматическое удаление из индекса отсутствующих товаров
24.04.2026
IndexNow автоматическая очистка кеша в WordPress: практическое руководство
24.01.2026
IndexNow и WooCommerce: решение проблем с обновлением наличия товаров
06.05.2026
IndexNow и WooCommerce: автоматизация отправки URL при массовых изменениях наличия товаров
25.05.2026
IndexNow и WooCommerce: автоматическая отправка URL при изменениях остатков товаров
01.06.2026
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙