IndexNow – современный протокол для мгновенного уведомления поисковых систем об изменениях на сайте. Он помогает значительно ускорить индексацию новых и обновлённых страниц. Однако при работе с WordPress и большим количеством URL возникает ряд проблем, связанных с массовой отправкой данных. В этой статье разберём, как правильно организовать отправку массовых URL в IndexNow, чтобы избежать ошибок и ограничений.
Почему возникают проблемы с массовой отправкой URL в IndexNow
IndexNow поддерживает отправку URL в формате JSON с ограничением по количеству ссылок в одном запросе. Обычно это не более 1000 URL за один вызов. Если попытаться отправить слишком много или отправлять запросы слишком часто, можно получить ошибки от сервера или блокировку.
Кроме того, в WordPress страницы часто динамические, и ссылки могут включать параметры, которые не нужно индексировать. Без фильтрации и правильной подготовки списка URL есть риск отправить неактуальные или нежелательные страницы.
Также некоторые хостинги и сервера ограничивают количество одновременных исходящих запросов, что усложняет массовую отправку.
Ограничения протокола IndexNow
- Максимум 1000 URL в одном запросе.
- Рекомендуется не превышать 10 000 URL в сутки.
- Задержка между отправками: не менее 30 секунд.
Знание этих ограничений поможет грамотно строить логику отправки.
Как подготовить список URL для отправки в IndexNow из WordPress
Первым шагом всегда должна быть фильтрация и формирование корректного списка URL. Приведём пример функции, которая собирает URL опубликованных записей, исключая страницы с пагинацией, авторов и архивов:
function indexnow_su_get_urls_for_indexnow() {
$urls = [];
$args = [
'post_type' => ['post', 'page'],
'post_status' => 'publish',
'posts_per_page' => -1,
'fields' => 'ids',
];
$query = new WP_Query($args);
if ($query->have_posts()) {
foreach ($query->posts as $post_id) {
$url = get_permalink($post_id);
// Можно добавить дополнительные фильтры, например, убрать параметры
$urls[] = esc_url_raw($url);
}
}
wp_reset_postdata();
return $urls;
}Эта функция вернёт массив URL для отправки. При необходимости можно расширить логику, добавив пользовательские типы записей или исключая определённые категории.
Реализация отправки URL в IndexNow с разбиением на пакеты
Чтобы избежать превышения лимитов, нужно разбивать список URL на чанки по 1000 элементов и отправлять их по очереди с задержкой.
function indexnow_su_send_urls_batch($urls) {
$api_key = 'ваш_ключ_или_папка_с_ключом';
$host = home_url('/');
$endpoint = 'https://api.indexnow.org/indexnow';
$chunks = array_chunk($urls, 1000);
foreach ($chunks as $chunk) {
$data = [
'host' => parse_url($host, PHP_URL_HOST),
'key' => $api_key,
'keyLocation' => home_url("/{$api_key}.txt"),
'urlList' => $chunk,
];
$args = [
'body' => json_encode($data),
'headers' => ['Content-Type' => 'application/json'],
'timeout' => 15,
'redirection' => 5,
'blocking' => true,
];
$response = wp_remote_post($endpoint, $args);
if (is_wp_error($response)) {
error_log('IndexNow отправка не удалась: ' . $response->get_error_message());
} elseif (wp_remote_retrieve_response_code($response) != 200) {
error_log('IndexNow ответ сервера: ' . wp_remote_retrieve_response_message($response));
} else {
// Успешная отправка
sleep(30); // Задержка между пакетами
}
}
}Обратите внимание на задержку в 30 секунд между отправками, чтобы не получить блокировку.
Автоматизация отправки с помощью WP-Cron
Для удобства можно автоматизировать отправку через WP-Cron, чтобы регулярно отправлять обновлённые URL.
function indexnow_su_schedule_cron() {
if (!wp_next_scheduled('indexnow_su_cron_hook')) {
wp_schedule_event(time(), 'hourly', 'indexnow_su_cron_hook');
}
}
add_action('wp', 'indexnow_su_schedule_cron');
function indexnow_su_cron_function() {
$urls = indexnow_su_get_urls_for_indexnow();
indexnow_su_send_urls_batch($urls);
}
add_action('indexnow_su_cron_hook', 'indexnow_su_cron_function');Такой подход позволит регулярно поддерживать актуальность индекса в поисковых системах.
Использование плагинов для упрощения работы с IndexNow
Если не хочется писать код, можно использовать плагины, которые поддерживают отправку URL в IndexNow с учётом массы и ограничений:
- Clearfy Pro – содержит инструменты для SEO и может помочь с интеграцией IndexNow, включая фильтрацию URL.
- WPRemark – плагин с расширенными возможностями работы с SEO и индексированием.
Эти инструменты позволяют настроить отправку URL без глубокого программирования и помогают избежать типичных ошибок.
Обработка ошибок и логирование при массовой отправке IndexNow
Очень важно вести логирование ошибок, чтобы вовремя выявлять проблемы. В примерах выше используется error_log для записи ошибок в системный лог PHP.
Можно расширить логику, добавив запись в отдельный файл или базу данных, чтобы иметь историю отправок и статистику.
Также полезно проверять ответ API IndexNow, который может содержать информацию о том, какие URL были отклонены и почему.
Пример расширенного логирования
function indexnow_su_log($message) {
$log_file = WP_CONTENT_DIR . '/indexnow.log';
$date = date('Y-m-d H:i:s');
file_put_contents($log_file, "[$date] $message\n", FILE_APPEND);
}
// Использование:
// indexnow_su_log('Ошибка отправки: ' . $response->get_error_message());Такой подход позволит анализировать стабильность работы и улучшать отправку.
Выводы и рекомендации
Массовая отправка URL в IndexNow из WordPress требует аккуратного подхода: правильная подготовка списка, разбивка на пакеты, задержки между запросами и обработка ошибок. Автоматизация через WP-Cron и использование готовых плагинов помогают снизить нагрузку на разработчика и повысить эффективность.
Используйте предложенные примеры кода и схемы для реализации стабильной системы отправки URL и ускорьте индексацию вашего сайта.