IndexNow – это эффективный протокол для мгновенного уведомления поисковых систем об изменениях на вашем сайте. Однако при большом количестве URL и частых изменениях важно грамотно настроить ограничение частоты запросов (rate limit), чтобы избежать блокировок со стороны поисковых систем и обеспечить стабильную индексацию.
Почему важно ограничивать частоту запросов IndexNow
Поисковые системы, поддерживающие IndexNow, как правило, рекомендуют не превышать определенное количество запросов в сутки, например, до 10 000 URL в день. Если отправлять слишком много запросов за короткий промежуток времени, можно получить временную блокировку или замедленную обработку ваших URL.
В WordPress-сайтах с большим количеством контента и частыми обновлениями это особенно актуально. Автоматическая отправка всех изменений без контроля может привести к превышению лимитов.
Поэтому правильная реализация ограничения частоты запросов позволит:
- Предотвратить блокировки и ошибки отправки URL;
- Равномерно распределить нагрузку на сервер и сеть;
- Оптимизировать процесс индексации;
- Снизить нагрузку на API IndexNow.
Как работает ограничение частоты запросов в IndexNow
IndexNow не предоставляет собственных встроенных механизмов rate limiting на стороне клиента, поэтому ответственность за ограничение количества отправляемых URL лежит на разработчике или владельце сайта. Это означает, что вам нужно реализовать логику ограничения в вашем WordPress-сайте, плагине или скрипте.
Чаще всего ограничение реализуют с помощью:
- Очередей отправки URL с фиксированным интервалом;
- Пакетной отправки URL с задержками между пакетами;
- Использования систем кэширования и флагов изменений, чтобы отправлять только актуальные URL.
Реализация ограничения частоты отправки URL в WordPress
Рассмотрим пример реализации ограничения частоты запросов IndexNow с использованием Cron и WP Transients для хранения состояния отправки.
1. Создаем очередь URL для отправки
Для начала нужно собрать URL, которые требуют отправки. Обычно это новые и обновленные страницы, записи, пользовательские типы записей.
Создадим функцию indexnow_su_add_url_to_queue($url), которая добавляет URL в очередь в transient:
function indexnow_su_add_url_to_queue($url) {
$queue = get_transient('indexnow_su_url_queue');
if (!is_array($queue)) {
$queue = [];
}
if (!in_array($url, $queue)) {
$queue[] = $url;
}
set_transient('indexnow_su_url_queue', $queue, HOUR_IN_SECONDS);
}Так мы сохраняем очередь URL на час, чтобы периодически обновлять список.
2. Отправка URL с ограничением частоты
Создадим функцию отправки URL по одному с интервалом, используя системный Cron WordPress:
function indexnow_su_send_url_from_queue() {
$queue = get_transient('indexnow_su_url_queue');
if (empty($queue)) {
return;
}
$url = array_shift($queue); // Берем первый URL из очереди
$api_key = 'ВАШ_КЛЮЧ_API';
$endpoint = "https://api.indexnow.org/indexnow?url=" . urlencode($url) . "&key=" . $api_key;
$response = wp_remote_get($endpoint);
if (!is_wp_error($response) && wp_remote_retrieve_response_code($response) === 200) {
// Успешно отправлено
} else {
// Ошибка, можно повторить позже
array_unshift($queue, $url); // Возвращаем URL в начало очереди
}
set_transient('indexnow_su_url_queue', $queue, HOUR_IN_SECONDS);
}Эту функцию назначаем на событие Cron с интервалом, например, раз в минуту, чтобы отправлять не более одного URL в минуту и не превышать лимит.
3. Регистрация Cron задачи
Добавим в файл плагина или functions.php регистрацию задачи:
if (!wp_next_scheduled('indexnow_su_cron_send_url')) {
wp_schedule_event(time(), 'minute', 'indexnow_su_cron_send_url');
}
add_action('indexnow_su_cron_send_url', 'indexnow_su_send_url_from_queue');Обратите внимание, что интервал 'minute' нужно зарегистрировать, если он отсутствует:
add_filter('cron_schedules', function($schedules) {
if (!isset($schedules['minute'])) {
$schedules['minute'] = [
'interval' => 60,
'display' => __('Every Minute')
];
}
return $schedules;
});Практические советы по оптимизации ограничения частоты запросов
Фильтрация URL для отправки
Отправляйте только действительно изменившиеся URL. Используйте хуки WordPress (например, save_post) для добавления URL в очередь только тогда, когда контент изменился и нужно обновить индекс.
Пакетная отправка с задержками
Если нужно отправлять много URL, группируйте их пакетами по 10-20 штук и отправляйте с задержкой, например, раз в 5 минут, чтобы не превышать лимиты.
Мониторинг ошибок и повторные попытки
Собирайте логи ошибок отправки URL и реализуйте логику повторных попыток с экспоненциальной задержкой.
Использование плагина Clearfy Pro для управления IndexNow
Плагин Clearfy Pro содержит встроенные инструменты для интеграции с IndexNow и управления отправкой URL. В нем есть настройки ограничения частоты запросов, автоматическая фильтрация URL и управление очередью отправки, что значительно упрощает работу и снижает риски блокировок.
Для сайтов с большим трафиком и объемом контента Clearfy Pro – оптимальное решение, позволяющее не писать собственный код.
Заключение
Правильная настройка ограничения частоты запросов IndexNow в WordPress – важный аспект стабильной и эффективной индексации сайта. Использование очередей, Cron задач и фильтрация URL позволяет контролировать нагрузку и соблюдать рекомендации поисковых систем.
Приведенный пример кода – базовая реализация, которую можно адаптировать под конкретные задачи и расширять с учетом особенностей сайта и объема контента.