IndexNow — это современный протокол для ускоренной индексации изменений на сайте поисковыми системами. Если ваш WordPress-сайт активно использует REST API для создания, редактирования или удаления контента, важно, чтобы изменения автоматически попадали в индекс поисковиков через IndexNow. В этой статье мы рассмотрим, как реализовать автоматическую отправку URL с помощью REST API и WordPress, а также приведём примеры кода и рекомендации по оптимизации.
Почему важно интегрировать IndexNow с REST API WordPress
REST API в WordPress позволяет создавать кастомные приложения, мобильные клиенты, а также интегрировать внешние сервисы, которые могут изменять контент сайта. При этом изменения, сделанные через API, могут не попадать в автоматические механизмы, основанные на хуках WordPress, что приводит к задержкам в индексации и потерям трафика.
Интеграция IndexNow с REST API решает эту проблему: при создании, обновлении или удалении записи через API автоматически отправляется соответствующий URL в поисковые системы, поддерживающие IndexNow (Яндекс, Bing и др.). Это гарантирует максимально быструю реакцию поисковиков на изменения.
Кроме того, правильная интеграция позволяет избежать избыточных отправок и ошибок, а также контролировать очередь URL для отправки.
Обзор основных вызовов при интеграции
- Отслеживание событий создания, обновления и удаления записей через REST API.
- Формирование корректного списка URL для отправки в IndexNow.
- Обработка ошибок и повторная отправка при сбоях.
- Минимизация нагрузок на сайт и API поисковых систем.
Реализация отправки IndexNow URL при работе с REST API
Для интеграции мы будем использовать хуки WordPress REST API — rest_after_insert_{post_type} для создания и обновления, а также rest_delete_{post_type} для удаления записей. В этих хуках мы вызовем функцию отправки URL в IndexNow.
Пример кода с приставкой indexnowsu_ для функций:
function indexnowsu_send_url_to_indexnow( string $url ) {
$api_key = 'ваш_ключ_IndexNow'; // Получите ключ на сайте IndexNow
$endpoint = 'https://api.indexnow.org/indexnow?url=' . urlencode( $url ) . '&key=' . $api_key;
$response = wp_remote_post( $endpoint, [
'timeout' => 5,
'headers' => [
'Content-Type' => 'application/json'
],
]);
if ( is_wp_error( $response ) ) {
error_log( 'IndexNow: Ошибка отправки URL ' . $url . ' - ' . $response->get_error_message() );
return false;
}
$code = wp_remote_retrieve_response_code( $response );
if ( $code !== 200 ) {
error_log( 'IndexNow: Неудачный HTTP-код ' . $code . ' при отправке URL ' . $url );
return false;
}
return true;
}
// Отправка URL при создании и обновлении записи через REST API
add_action( 'rest_after_insert_post', function( $post, $request, $creating ) {
if ( ! in_array( $post->post_status, [ 'publish', 'private' ], true ) ) {
return; // Отправляем только опубликованные или приватные записи
}
$url = get_permalink( $post->ID );
indexnowsu_send_url_to_indexnow( $url );
}, 10, 3 );
// Отправка URL при удалении записи через REST API
add_action( 'rest_delete_post', function( $post ) {
$url = get_permalink( $post->ID );
indexnowsu_send_url_to_indexnow( $url );
} );В этом коде:
- Функция
indexnowsu_send_url_to_indexnowформирует и отправляет запрос на API IndexNow. - Хук
rest_after_insert_postсрабатывает при создании или обновлении записи через REST API и отправляет URL. - Хук
rest_delete_postвызывается при удалении записи и отправляет URL для удаления из индекса.
Особенности и рекомендации
Важно проверять статус публикации — отправлять URL стоит только для опубликованных страниц. Для черновиков и авто-сохранений отправка не нужна.
Если у вас много типов записей, замените post в хуках на нужный тип, например rest_after_insert_product для WooCommerce.
Для повышения надёжности можно добавить очередь URL с повторной отправкой в случае ошибок, используя WP Cron или сторонние сервисы.
Оптимизация работы с IndexNow и REST API
При интенсивном использовании REST API и частом изменении контента важно оптимизировать отправку URL, чтобы не перегружать сервер и не превышать лимиты поисковиков.
Группировка URL для пакетной отправки
IndexNow API поддерживает отправку сразу нескольких URL за один запрос. Вместо частых одиночных запросов лучше накапливать URL в базе или кэше и отправлять пакетами, например, по 10-20 ссылок каждые 5-10 минут.
function indexnowsu_send_urls_batch( array $urls ) {
$api_key = 'ваш_ключ_IndexNow';
$endpoint = 'https://api.indexnow.org/indexnow';
$body = json_encode([
'host' => parse_url( home_url(), PHP_URL_HOST ),
'key' => $api_key,
'keyLocation' => home_url( '/indexnow-key.txt' ),
'urls' => $urls,
]);
$response = wp_remote_post( $endpoint, [
'headers' => [ 'Content-Type' => 'application/json' ],
'body' => $body,
'timeout' => 10,
]);
if ( is_wp_error( $response ) ) {
error_log( 'IndexNow Batch: Ошибка отправки - ' . $response->get_error_message() );
return false;
}
$code = wp_remote_retrieve_response_code( $response );
if ( $code !== 200 ) {
error_log( 'IndexNow Batch: Неудачный HTTP-код ' . $code );
return false;
}
return true;
}Для реализации очереди можно использовать transient API или настраиваемую таблицу, а запускать отправку через WP Cron.
Контроль повторных отправок и ошибок
Рекомендуется хранить статус отправки каждого URL и при ошибках повторять попытки. Это поможет избежать потери важных изменений и снизить нагрузку.
Интеграция с популярными плагинами и темами WordPress
Если вы используете плагины с REST API (например, WooCommerce, WPGPT, Clearfy Pro), можно расширить нашу логику, добавив обработчики для их кастомных типов записей.
Например, для WooCommerce:
add_action( 'rest_after_insert_product', function( $post, $request, $creating ) {
if ( $post->get_status() !== 'publish' ) {
return;
}
$url = get_permalink( $post->get_id() );
indexnowsu_send_url_to_indexnow( $url );
}, 10, 3 );Для тем с кастомными постами (например, JournalX или Root) аналогично добавляйте хуки с нужным типом.
Если хотите расширить функционал, рассмотрите использование WPShop плагинов, например, Clearfy Pro, который помогает оптимизировать индексацию и может быть полезен в связке с IndexNow.
Заключение по теме автоматической отправки URL через REST API и IndexNow
Использование REST API в WordPress — мощный инструмент, но требует дополнительной интеграции с системами индексации, чтобы поисковики быстро узнавали о изменениях. Автоматическая отправка URL в IndexNow решает эту задачу, ускоряя индексацию и улучшая позиции сайта.
В статье мы рассмотрели, как грамотно реализовать отправку URL из REST API с примерами кода, подходами к оптимизации и рекомендациями по интеграции с плагинами. Это позволит вам создать надежный и эффективный механизм поддержки актуальности индекса поисковых систем.