IndexNow в WordPress: решение проблем с отправкой URL при использовании PHP-FPM

Диагностика проблемы отправки URL в IndexNow при PHP-FPM

Часто при использовании PHP-FPM с WordPress встречаются ситуации, когда автоматическая отправка URL в IndexNow не срабатывает или происходит с задержками. Основные симптомы:

  • URL не появляются в панели IndexNow или поисковой системы;
  • логи сервера показывают ошибки таймаута или отказа соединения при обращении к API IndexNow;
  • переодические сбои при массовой отправке URL из-за ограничений по времени выполнения скрипта;
  • отсутствие записи в логи плагинов или кастомных решений для отправки URL.

Причина обычно связана с особенностями работы PHP-FPM: ограниченное время исполнения, ограничение на параллельные запросы, ошибки в конфигурации.

Пошаговое решение: настройка отправки URL в IndexNow с PHP-FPM

1. Увеличение таймаута PHP-FPM

В конфигурационном файле www.conf (обычно в /etc/php/7.x/fpm/pool.d/) увеличьте параметры:

request_terminate_timeout = 60s
; или больше, если нужно
pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6

Это позволит скриптам отправлять URL дольше, не прерываясь преждевременно.

2. Асинхронная отправка URL через WP-Cron

Не стоит отправлять URL синхронно при сохранении записи, особенно если у вас большой сайт. Используйте WP-Cron для пакетной отправки.

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

add_action('indexnow_send_queue', function() {
    $queue = get_option('indexnow_url_queue', []);
    $api_key = 'ваш_ключ_из_IndexNow';
    $endpoint = 'https://api.indexnow.org/indexnow';
    $max_batch = 10; // пакет из 10 URL
    $batch = array_splice($queue, 0, $max_batch);

    if (empty($batch)) return;

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

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

    if (is_wp_error($response)) {
        error_log('IndexNow error: '.$response->get_error_message());
        // можно добавить повторную попытку
    } else {
        update_option('indexnow_url_queue', $queue);
    }
});

if (!wp_next_scheduled('indexnow_send_queue')) {
    wp_schedule_event(time(), 'five_minutes', 'indexnow_send_queue');
}

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

3. Использование внешних очередей и очередей задач

Для крупных проектов рекомендуется использовать внешние системы очередей (Redis, RabbitMQ) или WP-CLI для отправки URL вне контекста веб-запроса, снижающих нагрузку на PHP-FPM.

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

  • Проверьте логи PHP-FPM и WordPress на отсутствие ошибок при отправке URL;
  • В панели IndexNow или в поисковиках убедитесь, что новые URL появляются в индексе;
  • Используйте curl для теста API вручную:
curl -X POST 'https://api.indexnow.org/indexnow' \
-H 'Content-Type: application/json' \
-d '{ "host": "https://example.com", "key": "ваш_ключ", "keyLocation": "https://example.com/key-file.txt", "urlList": ["https://example.com/new-page/"] }'
  • Если ответ 200 - запрос успешен.
  • Частые ошибки и их исправление

    • Таймауты PHP-FPM: не увеличен request_terminate_timeout — скрипты прерываются раньше, чем отправляют пакет URL;
    • Отправка URL при каждом сохранении поста: приводит к нагрузке и блокировкам, лучше использовать очередь и WP-Cron;
    • Неправильный формат JSON для IndexNow: внимательно формируйте массив с ключами host, key, keyLocation, urlList;
    • Отсутствие файла ключа IndexNow: файл key-file.txt должен быть доступен по адресу https://ваш_сайт/key-file.txt;
    • Проблемы с cURL или wp_remote_post: убедитесь, что сервер поддерживает исходящие HTTPS-запросы и что нет блокировок на уровне firewall.

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

    • Не храните ключ API IndexNow в открытом виде в базе данных — используйте define-константы в wp-config.php или защищенные переменные окружения.
    • Для массовых отправок разделяйте URL на пакеты по 10–20 штук, чтобы избежать перегрузки сервера и превышения лимитов API.
    • Используйте транзиенты или кеширование очереди, чтобы избежать дублирующих отправок.
    • Регулярно проверяйте логи и настраивайте мониторинг, чтобы вовремя выявлять сбои.

    Сравнение вариантов интеграции отправки URL в IndexNow

    МетодПлюсыМинусыПример кода
    Синхронная отправка при сохранении постаПростая реализацияНагрузка, таймауты, блокировка PHP-FPMsave_post + wp_remote_post
    Очередь + WP-CronСнижение нагрузки, надежностьЗадержка отправки, сложнее настроитьПример выше
    Внешние очереди + WP-CLIМаксимальная производительность и масштабируемостьСложность реализации, требует дополнительного ПОИспользование Redis, RabbitMQ и WP-CLI скриптов

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

    ⭐⭐⭐⭐⭐
    IndexNow автоматическая очистка кеша в WordPress: практическое руководство
    24.01.2026
    IndexNow и WooCommerce: решение проблем с обновлением наличия товаров
    06.05.2026
    IndexNow и WooCommerce: как оптимально автоматизировать отправку SKU и вариантов товаров
    07.06.2026
    Решение проблем с отправкой URL в IndexNow при большом объеме сайта WordPress
    20.01.2026
    IndexNow: автоматическая очистка из индекса URL с редиректами в WordPress
    10.06.2026
    ×

    AI-плагин от WPShop.ru

    анализирует конкурентов

    пишет статьи

    готовит SEO

    генерирует изображения

    и еще кое-что...
    WPGPT
    Плагин, который наполняет ваш сайт WordPress
    Узнать больше