IndexNow – современный протокол для мгновенного уведомления поисковых систем об изменениях на сайте. Чтобы поддерживать актуальность индексации, важно автоматизировать отправку URL с вашего сайта WordPress. В этой статье мы разберем, как с помощью встроенного WP Cron и REST API реализовать эффективную и надежную автоматическую отправку URL в IndexNow.
Почему нужна автоматизация отправки URL в IndexNow
Ручная отправка URL не подходит для динамических сайтов, где контент постоянно обновляется, добавляются новые страницы, удаляются старые. Автоматизация позволяет:
- Своевременно уведомлять поисковые системы о всех изменениях.
- Экономить время и избежать ошибок при ручной отправке.
- Оптимизировать нагрузку и распределить отправку URL по времени.
WordPress предоставляет удобные инструменты для реализации автоматизированных задач – WP Cron и REST API, которые прекрасно подходят для интеграции с IndexNow.
Настройка WP Cron для периодической отправки URL
WP Cron – это виртуальный планировщик задач в WordPress, который запускает функции по расписанию. Создадим задачу, которая будет регулярно отправлять список новых или обновленных URL в IndexNow.
Для начала зарегистрируем событие и функцию-обработчик в файле functions.php вашей темы или в отдельном плагине:
function indexnow_su_register_cron_event() {
if ( ! wp_next_scheduled( 'indexnow_su_send_urls_event' ) ) {
wp_schedule_event( time(), 'hourly', 'indexnow_su_send_urls_event' );
}
}
add_action( 'wp', 'indexnow_su_register_cron_event' );
function indexnow_su_send_urls_callback() {
// Здесь будет код отправки URL
}
add_action( 'indexnow_su_send_urls_event', 'indexnow_su_send_urls_callback' );В данном примере задача запускаться раз в час. При необходимости можно создать кастомный интервал с помощью фильтра cron_schedules.
Выбор URL для отправки
Чтобы не отправлять весь сайт каждый раз, разумно отправлять только новые или обновленные URL. Для этого можно использовать метаполя или таблицу с последними изменениями. Вот пример получения URL последних обновленных записей:
function indexnow_su_get_updated_urls( $interval_hours = 1 ) {
$time = date( 'Y-m-d H:i:s', strtotime( "-{$interval_hours} hours" ) );
$query = new WP_Query( [
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => [
[
'column' => 'post_modified_gmt',
'after' => $time,
],
],
'fields' => 'ids',
'posts_per_page' => 100,
] );
$urls = [];
foreach ( $query->posts as $post_id ) {
$urls[] = get_permalink( $post_id );
}
return $urls;
}Таким образом, в обработчике Cron можно вызвать эту функцию для формирования списка URL.
Отправка URL в IndexNow через REST API
IndexNow использует простой REST API, куда отправляется JSON с URL и ключом API. Рассмотрим пример функции отправки URL в IndexNow.
function indexnow_su_send_urls_to_indexnow( $urls ) {
$api_key = 'ВАШ_КЛЮЧ_API';
$endpoint = 'https://api.indexnow.org/indexnow';
$payload = [
'host' => parse_url( home_url(), PHP_URL_HOST ),
'key' => $api_key,
'keyLocation' => home_url( "/{$api_key}.txt" ),
'urlList' => $urls,
];
$response = wp_remote_post( $endpoint, [
'headers' => [ 'Content-Type' => 'application/json' ],
'body' => wp_json_encode( $payload ),
'timeout' => 10,
] );
if ( is_wp_error( $response ) ) {
error_log( 'IndexNow error: ' . $response->get_error_message() );
return false;
}
return wp_remote_retrieve_response_code( $response ) === 200;
}Не забудьте разместить на вашем сайте файл с ключом API (ВАШ_КЛЮЧ_API.txt) в корне сайта для проверки права собственности.
Интеграция отправки URL с Cron
Теперь объединим все вместе в функцию-обработчик Cron:
function indexnow_su_send_urls_callback() {
$urls = indexnow_su_get_updated_urls(1); // за последний час
if ( empty( $urls ) ) {
return;
}
$result = indexnow_su_send_urls_to_indexnow( $urls );
if ( $result ) {
error_log( 'IndexNow: успешно отправлено ' . count( $urls ) . ' URL.' );
} else {
error_log( 'IndexNow: ошибка при отправке URL.' );
}
}Такой подход обеспечивает регулярную отправку только актуальных URL, уменьшая нагрузку на сервер и API.
Расширение функционала: отправка URL из пользовательских типов записей и таксономий
Если ваш сайт использует кастомные типы записей (CPT) или таксономии, важно расширить выборку URL. Пример для CPT:
function indexnow_su_get_updated_cpt_urls( $post_type, $interval_hours = 1 ) {
$time = date( 'Y-m-d H:i:s', strtotime( "-{$interval_hours} hours" ) );
$query = new WP_Query( [
'post_type' => $post_type,
'post_status' => 'publish',
'date_query' => [
[
'column' => 'post_modified_gmt',
'after' => $time,
],
],
'fields' => 'ids',
'posts_per_page' => 100,
] );
$urls = [];
foreach ( $query->posts as $post_id ) {
$urls[] = get_permalink( $post_id );
}
return $urls;
}Аналогично можно получить URL терминов таксономий, используя функции get_terms и get_term_link.
Пример объединения URL из разных источников
function indexnow_su_get_all_updated_urls( $interval_hours = 1 ) {
$urls = indexnow_su_get_updated_urls( $interval_hours );
$urls = array_merge( $urls, indexnow_su_get_updated_cpt_urls( 'product', $interval_hours ) );
// Добавьте другие CPT или таксономии при необходимости
return array_unique( $urls );
}В функцию-обработчик Cron можно передать этот объединенный массив для отправки.
Отладка и логирование отправки URL
Для надежной работы автоматизации важно вести логирование результатов отправки. Можно использовать стандартный файл error_log или подключить плагин для логирования. Вот пример записи в лог:
if ( $result ) {
error_log( 'IndexNow: успешно отправлено ' . count( $urls ) . ' URL.' );
} else {
error_log( 'IndexNow: ошибка при отправке URL.' );
}Для более детальной отладки можно сохранять тело ответа API, заголовки и время выполнения.
Использование готовых плагинов для расширения функционала
Если не хочется писать код с нуля, рассмотрите специализированные плагины с поддержкой IndexNow и расширенной автоматизацией:
- Clearfy Pro – оптимизация и интеграция с IndexNow.
- Expert Review – для сайтов с обзорами, поддерживает отправку URL.
Они позволят упростить настройку и добавить дополнительные возможности без глубоких знаний программирования.
Резюме и лучшие практики автоматизации IndexNow
Автоматизация отправки URL с использованием WP Cron и REST API обеспечивает своевременную индексацию и поддерживает актуальность сайта в поисковых системах. Рекомендуется:
- Отправлять только измененные URL, чтобы минимизировать нагрузку.
- Обрабатывать ошибки и вести логирование для быстрого выявления проблем.
- Регулярно проверять наличие ключа API и файла ключа на сервере.
- Расширять функционал для поддержки всех типов контента сайта.
Таким образом, вы обеспечите стабильность и эффективность индексации вашего WordPress-сайта с помощью IndexNow.