IndexNow — современный протокол, позволяющий быстро уведомлять поисковые системы об изменениях на сайте. Однако при больших объемах страниц в WordPress возникают сложности с отправкой всех URL для индексации. В этой статье рассмотрим практические методы решения этих проблем, оптимизируем процесс отправки и приведем примеры кода и плагинов.
Почему возникают проблемы с отправкой большого объема URL в IndexNow
Основные причины сложностей:
- Ограничения по количеству URL в одном запросе (обычно до 10 000).
- Высокая нагрузка на сервер при формировании и отправке большого списка URL.
- Риск превышения лимитов API у поисковых систем.
- Проблемы с тайм-аутами и ошибками при массовых запросах.
Кроме того, WordPress-сайт с тысячами страниц и пользовательских типов записей требует аккуратного подхода к выбору URL для отправки, чтобы не отправлять устаревшие или нерелевантные страницы.
Оптимизация выборки URL для отправки в IndexNow
Первый шаг — правильно формировать список URL для отправки. Необходимо исключить URL с:
- Ошибками 404 и редиректами.
- Нерелевантным или дублированным контентом.
- Страницами с noindex.
- Пагинацией и архивами, если они не важны для индексации.
Для этого можно использовать SQL-запросы к базе данных или WP_Query с нужными параметрами. Например, чтобы получить все опубликованные записи и страницы, исключая черновики и удаленные:
function indexnowsu_get_valid_urls() {
$args = [
'post_type' => ['post', 'page'],
'post_status' => 'publish',
'posts_per_page' => -1,
'fields' => 'ids',
];
$query = new WP_Query($args);
$urls = [];
foreach ($query->posts as $post_id) {
$noindex = get_post_meta($post_id, '_indexnowsu_noindex', true);
if (!$noindex) {
$urls[] = get_permalink($post_id);
}
}
return $urls;
}Этот пример выбирает только опубликованные записи и страницы, при этом учитывает кастомное поле _indexnowsu_noindex для исключения URL.
Разбиение списка URL на пакеты и отправка по частям
Чтобы избежать ошибок при отправке большого количества URL, нужно разбивать их на части — пакеты по 500–1000 URL. IndexNow поддерживает массовую отправку, но лучше не перегружать запрос.
Пример функции для разбиения и отправки:
function indexnowsu_send_batches($urls, $batch_size = 1000) {
$batches = array_chunk($urls, $batch_size);
foreach ($batches as $batch) {
$payload = json_encode(['host' => parse_url(home_url(), PHP_URL_HOST), 'key' => 'ВАШ_КЛЮЧ', 'keyLocation' => home_url('/key.txt'), 'urlList' => $batch]);
$response = wp_remote_post('https://api.indexnow.org/indexnow', [
'headers' => ['Content-Type' => 'application/json'],
'body' => $payload,
'timeout' => 30,
]);
if (is_wp_error($response)) {
error_log('IndexNowSU: ошибка отправки пакета URL: ' . $response->get_error_message());
}
}
}Важно обрабатывать ошибки и логировать их для дальнейшей диагностики.
Автоматизация отправки URL при изменении контента
Для сайтов с большим количеством изменений вручную отправлять URL неудобно. Лучше автоматизировать процесс, используя хуки WordPress.
Пример интеграции с хуком save_post для отправки URL измененной записи:
function indexnowsu_send_url_on_save($post_id) {
if (wp_is_post_revision($post_id)) {
return;
}
$url = get_permalink($post_id);
$payload = json_encode(['host' => parse_url(home_url(), PHP_URL_HOST), 'key' => 'ВАШ_КЛЮЧ', 'keyLocation' => home_url('/key.txt'), 'urlList' => [$url]]);
wp_remote_post('https://api.indexnow.org/indexnow', [
'headers' => ['Content-Type' => 'application/json'],
'body' => $payload,
'timeout' => 15,
]);
}
add_action('save_post', 'indexnowsu_send_url_on_save');Таким образом, при каждом обновлении записи URL будет отправлен в IndexNow.
Использование плагинов для интеграции IndexNow с большими сайтами WordPress
Если хочется готовое решение, советуем обратить внимание на плагин Clearfy Pro. Он умеет оптимизировать отправку URL, фильтровать неважные страницы и автоматически разбивать списки для IndexNow.
Также есть специализированные плагины для отправки URL в IndexNow, но они часто не рассчитаны на большие сайты, поэтому при высокой нагрузке лучше использовать кастомные решения или дорабатывать их под себя.
Советы по выбору и настройке плагина
- Проверьте поддержку пакетной отправки URL.
- Убедитесь, что плагин умеет исключать неиндексируемые страницы.
- Настройте частоту отправки, чтобы не превышать лимиты API.
- Обязательно ведите логи для отслеживания ошибок.
Мониторинг и отладка отправки URL в IndexNow
Для успешной работы важно контролировать отправку URL и исправлять ошибки. Рекомендуется:
- Включить логирование запросов и ответов API.
- Использовать инструменты отладки WordPress, например Query Monitor.
- Проверять статус индексации URL в поисковых системах.
Пример простой функции логирования:
function indexnowsu_log($message) {
if (defined('WP_DEBUG') && WP_DEBUG) {
error_log('IndexNowSU: ' . $message);
}
}Везде где производится отправка, вызывайте indexnowsu_log с результатом.
Итоговые рекомендации для больших WordPress-сайтов
Для стабильной работы IndexNow при большом количестве страниц:
- Формируйте точный и актуальный список URL.
- Разбивайте отправку на небольшие пакеты.
- Автоматизируйте отправку через хуки и Cron.
- Используйте проверенные плагины с возможностью настройки.
- Обязательно ведите логи и следите за статусом индексации.
Соблюдая эти рекомендации, вы обеспечите быструю и стабильную индексацию своего WordPress-сайта с помощью IndexNow даже при больших объемах контента.