IndexNow — современный протокол мгновенной отправки URL в поисковые системы, позволяющий значительно ускорить индексацию изменений на сайте. В WordPress сайты часто содержат разнородный контент: записи, страницы, пользовательские типы записей (Custom Post Types), таксономии и медиафайлы. В этой статье разберём, как грамотно интегрировать отправку URL для всех типов контента через IndexNow, чтобы поисковики оперативно узнавали об обновлениях, новых публикациях и удалениях.
Что такое IndexNow и зачем отправлять URL разных типов контента
IndexNow — это бесплатный протокол, через который вы сообщаете поисковым системам о создании, обновлении или удалении страниц на сайте. Это особенно важно для сайтов с динамическим или разнообразным контентом, когда нужно, чтобы поисковики быстро отражали изменения.
В WordPress контент организован в несколько типов:
- Стандартные записи (posts)
- Страницы (pages)
- Пользовательские типы записей (CPT)
- Таксономии (категории, метки, кастомные таксономии)
- Медиафайлы (изображения, документы)
Каждый тип контента может требовать отдельного подхода для корректной отправки в IndexNow, чтобы не перегружать поисковики лишними URL и при этом не пропустить важные изменения.
Отправка URL стандартных записей и страниц в IndexNow
Для стандартных записей и страниц можно использовать готовые решения, например, плагин Clearfy Pro, который умеет автоматически отправлять URL при публикации или обновлении контента.
Если хотите реализовать отправку вручную, можно использовать следующий пример кода:
function indexnowsu_send_url_on_save_post($post_id) {
if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) {
return;
}
$post_url = get_permalink($post_id);
indexnowsu_send_url_to_indexnow([$post_url]);
}
add_action('save_post', 'indexnowsu_send_url_on_save_post');
function indexnowsu_send_url_to_indexnow(array $urls) {
$key = 'your_indexnow_key_here'; // Замените на свой ключ
$endpoint = 'https://api.indexnow.org/indexnow?url=' . urlencode($urls[0]) . '&key=' . $key;
$response = wp_remote_get($endpoint);
if (is_wp_error($response)) {
error_log('IndexNow error: ' . $response->get_error_message());
}
}
Этот код отправит URL записи или страницы при каждом сохранении.
Как отправлять URL пользовательских типов записей (CPT)
Custom Post Types в WordPress часто используются для уникального контента: портфолио, отзывы, товары и т.д. Важно, чтобы изменения в таких записях тоже мгновенно попадали в индекс.
Для этого нужно убедиться, что хук save_post срабатывает и для CPT. В примере выше функция будет работать и для них, но иногда полезно ограничить список типов:
function indexnowsu_send_url_on_save_cpt($post_id, $post, $update) {
$allowed_post_types = ['post', 'page', 'portfolio', 'review']; // Добавьте свои CPT
if (!in_array($post->post_type, $allowed_post_types)) {
return;
}
if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) {
return;
}
$post_url = get_permalink($post_id);
indexnowsu_send_url_to_indexnow([$post_url]);
}
add_action('save_post', 'indexnowsu_send_url_on_save_cpt', 10, 3);
Так вы минимизируете лишние обращения и будете отправлять только важные URL.
Обработка удаления пользовательских записей
Чтобы удалённые записи и страницы удалялись из индекса, нужно посылать URL со статусом удаления. В WordPress для этого удобно использовать хук before_delete_post:
function indexnowsu_send_url_on_delete_post($post_id) {
$post_url = get_permalink($post_id);
if (!$post_url) {
return;
}
indexnowsu_send_url_to_indexnow([$post_url]);
}
add_action('before_delete_post', 'indexnowsu_send_url_on_delete_post');
По протоколу IndexNow достаточно отправить URL — поисковик поймёт, что его нужно удалить из индекса.
Отправка URL таксономий и их архивов
Таксономии — категории, метки и кастомные таксономии — тоже имеют публичные страницы с архивами. Иногда изменения в таксономиях (например, добавление новой категории) влияют на контент сайта и должны обновляться в индексе.
Для отправки URL архивов таксономий можно использовать хук edited_term и create_term:
function indexnowsu_send_url_on_term_change($term_id, $tt_id, $taxonomy) {
$term_link = get_term_link($term_id, $taxonomy);
if (!is_wp_error($term_link)) {
indexnowsu_send_url_to_indexnow([$term_link]);
}
}
add_action('edited_term', 'indexnowsu_send_url_on_term_change', 10, 3);
add_action('create_term', 'indexnowsu_send_url_on_term_change', 10, 3);
Это гарантирует, что поисковики быстро узнают об изменениях в категориях и метках.
Отправка URL медиафайлов и изображений
Медиафайлы в WordPress тоже имеют собственные URL, и иногда бывает полезно отправлять их в индекс, особенно если вы используете изображения в качестве самостоятельного контента или галерей.
Для отправки URL медиафайлов при их загрузке можно использовать хук add_attachment и при обновлении — edit_attachment:
function indexnowsu_send_url_on_attachment_save($post_id) {
$post = get_post($post_id);
if ($post->post_type !== 'attachment') {
return;
}
$attachment_url = wp_get_attachment_url($post_id);
if ($attachment_url) {
indexnowsu_send_url_to_indexnow([$attachment_url]);
}
}
add_action('add_attachment', 'indexnowsu_send_url_on_attachment_save');
add_action('edit_attachment', 'indexnowsu_send_url_on_attachment_save');
Это помогает поддерживать актуальность индекса по медиафайлам.
Практические советы по оптимизации отправки URL в IndexNow
При большом объёме контента важно не перегружать протокол множеством запросов. Вот несколько советов:
- Пакетная отправка URL: собирайте URL за промежуток времени и отправляйте их массивом, чтобы снизить количество запросов.
- Фильтрация по типу контента: отправляйте только те URL, которые действительно важны для поисковиков.
- Логирование ошибок: записывайте ошибки отправки в лог, чтобы вовремя выявлять проблемы.
- Использование CRON задач: если у вас много обновлений, можно настроить периодическую отправку URL с помощью WP-Cron.
Пример пакетной отправки URL с WP-Cron
function indexnowsu_schedule_batch_send() {
if (!wp_next_scheduled('indexnowsu_batch_send_event')) {
wp_schedule_event(time(), 'hourly', 'indexnowsu_batch_send_event');
}
}
add_action('wp', 'indexnowsu_schedule_batch_send');
add_action('indexnowsu_batch_send_event', 'indexnowsu_batch_send_urls');
function indexnowsu_batch_send_urls() {
$urls = get_option('indexnowsu_url_queue', []);
if (empty($urls)) {
return;
}
indexnowsu_send_url_to_indexnow($urls);
update_option('indexnowsu_url_queue', []);
}
function indexnowsu_queue_url_for_indexnow($url) {
$urls = get_option('indexnowsu_url_queue', []);
if (!in_array($url, $urls)) {
$urls[] = $url;
update_option('indexnowsu_url_queue', $urls);
}
}
В этом примере URL накапливаются в опции и отправляются раз в час одним запросом.
Заключение
Правильная отправка URL разных типов контента в IndexNow помогает поддерживать актуальность индекса поисковых систем и улучшает видимость сайта. Используйте хук save_post для стандартных и кастомных записей, edited_term для таксономий и add_attachment для медиа. Не забывайте об оптимизации — пакетной отправке и фильтрации URL.
Если хотите готовые расширенные возможности, рекомендую посмотреть Clearfy Pro, который умеет автоматически интегрироваться с IndexNow и оптимизировать отправку URL.