Оптимизация отправки 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 и robots.txt для автоматической блокировки ненужных URL в WordPress
06.03.2026
Как работать с IndexNow в WordPress при использовании разных типов контента
27.01.2026
IndexNow: как автоматически удалять неактивные ссылки из индекса WordPress
09.01.2026
Решение проблем с отправкой URL в IndexNow при большом объеме сайта WordPress
20.01.2026
Как автоматически отслеживать изменения в метаданных WordPress и отправлять их в IndexNow
21.02.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее