IndexNow — это современный протокол, позволяющий быстро уведомлять поисковые системы об изменениях на сайте. Для сайтов на WordPress автоматизация отправки URL при добавлении, обновлении или удалении постов существенно ускоряет индексацию и улучшает SEO.
Что такое автоматическая отправка URL в IndexNow и зачем она нужна
Когда вы публикуете или обновляете контент, важно, чтобы поисковые системы как можно быстрее узнали об изменениях. Ручная отправка URL — трудоемкий процесс, особенно при большом количестве изменений. Автоматизация позволяет интегрировать отправку URL прямо в жизненный цикл WordPress, используя хуки и события.
Преимущества автоматической отправки URL:
- Мгновенное уведомление поисковиков об изменениях;
- Ускорение индексации новых и обновленных страниц;
- Снижение нагрузки на сервер за счет минимизации повторных проверок;
- Упрощение SEO-оптимизации без дополнительных ручных действий.
Как реализовать автоматическую отправку URL в IndexNow при изменении постов WordPress
Для реализации автоматической отправки URL при изменении постов используем системные хуки WordPress save_post и delete_post. При сохранении поста или его удалении будет выполняться функция, которая отправляет URL в IndexNow.
Подготовка функции отправки URL в IndexNow
Для отправки запросов к IndexNow используем стандартный HTTP клиент WordPress — wp_remote_post. Ниже пример функции indexnow_send_url для отправки одного URL:
function indexnow_send_url( string $url, string $key ) {
$endpoint = 'https://api.indexnow.org/indexnow';
$body = [
'host' => parse_url( $url, PHP_URL_HOST ),
'key' => $key,
'keyLocation' => home_url( '/indexnow-key.txt' ),
'urlList' => [ $url ],
];
$response = wp_remote_post( $endpoint, [
'headers' => [ 'Content-Type' => 'application/json' ],
'body' => wp_json_encode( $body ),
'timeout' => 10,
]);
if ( is_wp_error( $response ) ) {
error_log( 'IndexNow: Ошибка отправки URL - ' . $response->get_error_message() );
return false;
}
$code = wp_remote_retrieve_response_code( $response );
if ( $code !== 200 ) {
error_log( 'IndexNow: Неверный ответ сервера - ' . $code );
return false;
}
return true;
}
Здесь $key — это ваш уникальный ключ IndexNow, который нужно сохранить в корне сайта в файле indexnow-key.txt и использовать в отправке.
Подключение функции к событиям WordPress
Добавим обработчики на сохранение и удаление постов. При удалении URL тоже нужно отправлять в IndexNow, чтобы поисковики удаляли страницу из индекса.
function indexnow_su_on_save_post( $post_id ) {
if ( wp_is_post_revision( $post_id ) ) {
return;
}
$post = get_post( $post_id );
if ( $post->post_status !== 'publish' ) {
return; // Отправляем только опубликованные
}
$url = get_permalink( $post_id );
$key = get_option( 'indexnow_su_key' );
indexnow_send_url( $url, $key );
}
add_action( 'save_post', 'indexnow_su_on_save_post' );
function indexnow_su_on_delete_post( $post_id ) {
$url = get_permalink( $post_id );
$key = get_option( 'indexnow_su_key' );
indexnow_send_url( $url, $key );
}
add_action( 'delete_post', 'indexnow_su_on_delete_post' );
Обратите внимание, что при удалении поста функция получает URL до удаления, чтобы корректно отправить ссылку на удаляемую страницу.
Обработка массовых изменений: отправка списком URL в IndexNow
Если на сайте происходят массовые изменения — например, обновление большого количества постов или продуктов, эффективнее отправлять сразу список URL. Протокол IndexNow поддерживает передачу массива URL, что снижает количество запросов.
Пример функции отправки массива URL
function indexnow_send_urls_batch( array $urls, string $key ) {
$endpoint = 'https://api.indexnow.org/indexnow';
$host = parse_url( $urls[0], PHP_URL_HOST );
$body = [
'host' => $host,
'key' => $key,
'keyLocation' => home_url( '/indexnow-key.txt' ),
'urlList' => $urls,
];
$response = wp_remote_post( $endpoint, [
'headers' => [ 'Content-Type' => 'application/json' ],
'body' => wp_json_encode( $body ),
'timeout' => 15,
]);
if ( is_wp_error( $response ) ) {
error_log( 'IndexNow batch: Ошибка отправки URL - ' . $response->get_error_message() );
return false;
}
$code = wp_remote_retrieve_response_code( $response );
if ( $code !== 200 ) {
error_log( 'IndexNow batch: Неверный ответ сервера - ' . $code );
return false;
}
return true;
}
Для вызова этой функции можно собрать URL из последних измененных постов и отправить периодически через Cron или WP-Cron.
Пример задачи WP-Cron для периодической отправки
function indexnow_su_cron_job() {
$key = get_option( 'indexnow_su_key' );
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => [
'after' => '1 day ago',
],
'fields' => 'ids',
'posts_per_page' => 50,
];
$posts = get_posts( $args );
if ( empty( $posts ) ) {
return;
}
$urls = array_map( function( $id ) {
return get_permalink( $id );
}, $posts );
indexnow_send_urls_batch( $urls, $key );
}
if ( ! wp_next_scheduled( 'indexnow_su_cron_hook' ) ) {
wp_schedule_event( time(), 'hourly', 'indexnow_su_cron_hook' );
}
add_action( 'indexnow_su_cron_hook', 'indexnow_su_cron_job' );
Этот код запускает каждочасовую отправку URL опубликованных за последние сутки постов.
Рекомендации по безопасности и производительности
1. Храните ключ IndexNow в настройках WordPress или в защищенном конфигурационном файле, не публикуйте его в открытом виде.
2. Обязательно проверяйте статус ответа сервера и логируйте ошибки — это поможет отследить проблемы в работе.
3. При большом объеме сайта используйте пакетную отправку URL, чтобы не перегружать сервер и API IndexNow.
4. Ограничивайте отправку URL только для опубликованных и публично доступных страниц, чтобы не индексировались черновики и приватный контент.
Использование плагина Clearfy Pro для интеграции с IndexNow
Если не хочется писать код, можно использовать готовые решения. Плагин Clearfy Pro поддерживает интеграцию с IndexNow и автоматическую отправку URL при изменениях на сайте. Это удобно и экономит время на разработку.
Преимущества Clearfy Pro
- Автоматическое подключение ключа IndexNow;
- Управление отправкой URL из админки без кода;
- Оптимизация работы сайта и SEO;
- Регулярные обновления и поддержка.
Использование таких плагинов особенно рекомендуется для сайтов с большим количеством изменений и владельцам, которые хотят минимизировать технические задачи.