В современных условиях поддержание актуального индекса сайта в поисковых системах — важная задача для любого владельца WordPress-проекта. Особенно это актуально для крупных сайтов, где постоянное обновление контента, удаление устаревших страниц и изменение URL — ежедневная рутина. В этой статье мы подробно разберём, как с помощью технологии Webhooks и протокола IndexNow автоматизировать процесс удаления и обновления URL в WordPress, чтобы поисковые системы быстро и корректно отражали изменения.
Что такое Webhooks и как они помогают с IndexNow
Webhooks — это механизм, позволяющий автоматически отправлять уведомления о событиях на сайт или внешний сервис. В случае WordPress это могут быть события создания, обновления или удаления записи, страницы, или любого другого объекта.
IndexNow — протокол, созданный для мгновенного информирования поисковых систем об изменениях на сайте: добавлении новых страниц, изменении или удалении устаревшего контента. Вместо того чтобы ждать, пока поисковый робот самостоятельно найдёт изменения, сайт отправляет URL напрямую с помощью API IndexNow.
Комбинация Webhooks и IndexNow позволяет автоматически реагировать на изменения в WordPress, отправлять запросы на обновление или удаление URL без ручного вмешательства.
Настройка Webhook-обработчика в WordPress для IndexNow
Для начала нужно создать обработчик Webhook, который будет реагировать на события изменения или удаления контента. Рассмотрим пример, как это сделать с использованием стандартных хуков WordPress и отправки URL в IndexNow.
Шаг 1. Создание функции отправки URL в IndexNow
Создадим функцию indexnow_su_send_url_to_indexnow, которая будет принимать URL и тип действия (add/update или delete), и отправлять запрос на API IndexNow.
function indexnow_su_send_url_to_indexnow( $url, $action = 'update' ) {
$api_key = 'ВАШ_КЛЮЧ_INDEXNOW'; // Получите ключ на https://www.indexnow.org
$endpoint = 'https://api.indexnow.org/indexnow';
$urls = [ $url ];
$payload = [
'host' => parse_url( home_url(), PHP_URL_HOST ),
'key' => $api_key,
'keyLocation' => home_url('/indexnow-key.txt'),
'urlList' => $urls,
];
$args = [
'headers' => [ 'Content-Type' => 'application/json' ],
'body' => wp_json_encode( $payload ),
'timeout' => 10,
'method' => 'POST',
];
$response = wp_remote_post( $endpoint, $args );
if ( is_wp_error( $response ) ) {
error_log( 'IndexNow API error: ' . $response->get_error_message() );
return false;
}
$code = wp_remote_retrieve_response_code( $response );
if ( $code !== 200 ) {
error_log( 'IndexNow API returned HTTP code ' . $code );
return false;
}
return true;
}
Эта функция отправляет POST-запрос с нужными параметрами в IndexNow API. Не забудьте получить и разместить ключ на вашем сайте.
Шаг 2. Реализация Webhook-слушателей для удаления и обновления URL
Теперь привяжем события удаления и обновления записей к вызову функции отправки URL.
// Отправляем URL при публикации или обновлении записи
add_action( 'publish_post', 'indexnow_su_handle_post_update' );
add_action( 'publish_page', 'indexnow_su_handle_post_update' );
function indexnow_su_handle_post_update( $post_id ) {
if ( wp_is_post_revision( $post_id ) ) return;
$url = get_permalink( $post_id );
indexnow_su_send_url_to_indexnow( $url, 'update' );
}
// Отправляем URL для удаления при удалении записи
add_action( 'before_delete_post', 'indexnow_su_handle_post_delete' );
function indexnow_su_handle_post_delete( $post_id ) {
$url = get_permalink( $post_id );
if ( $url ) {
indexnow_su_send_url_to_indexnow( $url, 'delete' );
}
}
Таким образом, при публикации, обновлении или удалении страницы/записи, URL будет автоматически отправлен в IndexNow.
Расширение: автоматическая отправка для пользовательских типов записей и таксономий
Если ваш сайт использует кастомные типы записей (Custom Post Types) или таксономии, необходимо добавить аналогичные обработчики для них.
// Пример для кастомного типа записи 'product'
add_action( 'publish_product', 'indexnow_su_handle_post_update' );
add_action( 'before_delete_post', function( $post_id ) {
if ( get_post_type( $post_id ) === 'product' ) {
indexnow_su_handle_post_delete( $post_id );
}
} );
Для таксономий стоит реализовать отправку URL архивов или отдельных страниц таксономий, если это важно для индексации.
Использование плагинов для удобства и расширенной интеграции
Если вы не хотите писать код самостоятельно, можно использовать специализированные плагины, которые помогут интегрировать IndexNow с WordPress с поддержкой Webhooks и автоматизации:
- Clearfy Pro — плагин для оптимизации WordPress, включающий функции интеграции с IndexNow и возможность настройки Webhook-уведомлений.
- WPCommunity — плагин с расширенными возможностями для кастомизации событий и их обработки.
Использование готовых решений ускорит процесс и уменьшит вероятность ошибок.
Отладка и мониторинг отправки Webhook и IndexNow
Чтобы отслеживать успешность отправки URL в IndexNow, рекомендуется:
- Логировать ответы API в файл или в систему отладки WordPress (например, через
error_log). - Добавить уведомления администраторам в случае ошибок отправки.
- Использовать инструменты мониторинга HTTP-запросов, например Query Monitor.
Так вы будете уверены, что изменения корректно передаются и сайты поисковых систем получают актуальные данные.
Пример логирования с уведомлением по email
function indexnow_su_send_url_to_indexnow( $url, $action = 'update' ) {
// ... существующий код отправки ...
if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) !== 200 ) {
$error_message = is_wp_error( $response ) ? $response->get_error_message() : 'HTTP code ' . wp_remote_retrieve_response_code( $response );
error_log( 'IndexNow API error: ' . $error_message );
wp_mail( get_option( 'admin_email' ), 'IndexNow API Error', 'Ошибка отправки URL "' . $url . '": ' . $error_message );
return false;
}
return true;
}