IndexNow в WordPress: как использовать Webhook-и для автоматической отправки URL

IndexNow — современный протокол для мгновенного уведомления поисковых систем об обновлениях контента сайта. Многие WordPress-разработчики уже внедрили автоматическую отправку URL через Cron или REST API, но мало кто использует преимущества webhook-ов для интеграции с внешними сервисами и плагинами. В этой статье разберём, как с помощью webhook-ов автоматически отправлять в IndexNow URL-адреса при различных событиях WordPress, например, при публикации или обновлении записи, а также как это расширить для пользовательских типов записей и таксономий.

Что такое Webhook и зачем он нужен для IndexNow в WordPress

Webhook — это механизм, при котором один сервис отправляет HTTP-запрос другому при наступлении определённого события. В контексте WordPress и IndexNow это значит, что при изменении контента сайт сам мгновенно уведомляет поисковые системы, передавая URL новой или обновлённой страницы.

Преимущество webhook-ов в том, что они позволяют легко интегрироваться с внешними системами, например, с плагинами кеширования, системами мониторинга, а также с собственными скриптами, которые могут обрабатывать и фильтровать URL перед отправкой.

Использование webhook-ов снижает нагрузку на сервер, так как не нужно постоянно дергать IndexNow API по расписанию — уведомления идут только при реальных изменениях.

Типичные сценарии использования webhook-ов для IndexNow

  • Отправка URL при публикации или обновлении поста или страницы.
  • Отправка URL пользовательских типов записей (CPT), например, портфолио или товара.
  • Интеграция с плагинами, которые управляют SEO, чтобы отправлять URL после оптимизации.
  • Взаимодействие с внешними системами, например, CRM или ERP, которые влияют на контент.

Как создать webhook для отправки URL в IndexNow при публикации записи в WordPress

Для начала создадим плагин, который реализует webhook — обработчик изменения постов и отправляет URL в IndexNow.

Основная идея — использовать хук save_post, который вызывается при сохранении записи, и отправлять URL, если это публикация или обновление.

<?php
/**
 * Plugin Name: IndexNow Webhook Sender
 * Description: Автоматическая отправка URL в IndexNow через webhook при изменении постов
 * Version: 1.0
 * Author: indexnow.su
 */

function indexnowsu_send_url_to_indexnow($post_id) {
    // Проверяем, что это не автосохранение
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

    // Проверяем права пользователя
    if (!current_user_can('edit_post', $post_id)) return;

    $post = get_post($post_id);

    // Отправляем только для опубликованных постов
    if ($post->post_status !== 'publish') return;

    $url = get_permalink($post_id);

    if (!$url) return;

    $api_key = 'ВАШ_КЛЮЧ_API_INDEXNOW';
    $endpoint = 'https://api.indexnow.org/indexnow?url=' . urlencode($url) . '&key=' . $api_key;

    $response = wp_remote_get($endpoint);

    if (is_wp_error($response)) {
        error_log('IndexNow webhook error: ' . $response->get_error_message());
    } else {
        error_log('IndexNow webhook sent for URL: ' . $url);
    }
}
add_action('save_post', 'indexnowsu_send_url_to_indexnow');

Этот код — базовый пример. Он отправляет GET-запрос к API IndexNow с URL и ключом. В реальной практике лучше использовать POST-запрос, соответствующий официальной спецификации IndexNow, и обрабатывать ошибки более детально.

Расширение: отправка нескольких URL и поддержка пользовательских типов записей

Если сайт использует пользовательские типы записей, например, portfolio или product, нужно добавить проверку и для них. Также полезно отправлять не только основной URL, но и связанные — например, родительские страницы или таксономии.

function indexnowsu_send_url_to_indexnow_extended($post_id) {
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    if (!current_user_can('edit_post', $post_id)) return;

    $post = get_post($post_id);
    if ($post->post_status !== 'publish') return;

    $supported_post_types = ['post', 'page', 'portfolio', 'product'];
    if (!in_array($post->post_type, $supported_post_types, true)) return;

    $urls = [];
    $urls[] = get_permalink($post_id);

    // Добавляем URL родительской страницы, если есть
    if ($post->post_parent) {
        $parent_url = get_permalink($post->post_parent);
        if ($parent_url) $urls[] = $parent_url;
    }

    // Добавляем URL таксономий
    $taxonomies = get_object_taxonomies($post->post_type);
    foreach ($taxonomies as $taxonomy) {
        $terms = wp_get_post_terms($post_id, $taxonomy);
        foreach ($terms as $term) {
            $term_link = get_term_link($term);
            if (!is_wp_error($term_link)) {
                $urls[] = $term_link;
            }
        }
    }

    $api_key = 'ВАШ_КЛЮЧ_API_INDEXNOW';
    $endpoint = 'https://api.indexnow.org/indexnow';

    $body = json_encode(['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' => $body,
        'timeout' => 15,
    ]);

    if (is_wp_error($response)) {
        error_log('IndexNow webhook error: ' . $response->get_error_message());
    } else {
        error_log('IndexNow webhook sent for URLs: ' . implode(', ', $urls));
    }
}
add_action('save_post', 'indexnowsu_send_url_to_indexnow_extended');

Использование плагинов для расширения функционала webhook-ов с IndexNow

Если вы не хотите писать собственный код, можно воспользоваться плагинами, которые поддерживают webhook-и и интеграцию с внешними API:

  • WP Webhooks — мощный плагин для создания и управления webhook-ами, можно настроить отправку данных при публикации или обновлении записи, а дальше — через кастомный PHP-код отправлять URL в IndexNow.
  • Clearfy Pro — плагин для оптимизации WordPress, который частично автоматизирует работу с индексацией и может быть расширен для интеграции с IndexNow.
  • Custom webhook plugins — существуют узкоспециализированные решения, которые позволяют создавать шаблоны webhook-ов и отправлять запросы к любым API по событиям WordPress.

Использование плагинов удобно, если вы хотите гибко управлять событиями и не писать код, но для максимальной производительности и точечной настройки лучше создать небольшой кастомный плагин, как показано выше.

Пример интеграции WP Webhooks с IndexNow

В настройках WP Webhooks создайте событие, которое срабатывает при публикации записи. В качестве действия добавьте "Отправить POST-запрос" на адрес вашего собственного обработчика, который будет делать запрос к IndexNow API, используя полученные URL.

Вот пример простого обработчика, который можно разместить в корне сайта или как отдельный PHP-файл плагина:

<?php
// Получаем JSON из POST-запроса
$data = json_decode(file_get_contents('php://input'), true);
if (!$data || empty($data['url'])) {
    http_response_code(400);
    echo 'No URL provided';
    exit;
}

$url = $data['url'];
$api_key = 'ВАШ_КЛЮЧ_API_INDEXNOW';
$endpoint = 'https://api.indexnow.org/indexnow?url=' . urlencode($url) . '&key=' . $api_key;

$response = file_get_contents($endpoint);
if ($response === false) {
    http_response_code(500);
    echo 'Error sending to IndexNow';
} else {
    echo 'URL sent to IndexNow: ' . $url;
}
?>

Тонкости и подводные камни при использовании webhook-ов с IndexNow

Несмотря на простоту реализации, есть несколько важных моментов, которые нужно учитывать:

  • Ограничение частоты запросов. IndexNow рекомендует не превышать определённое количество запросов в секунду. При массовом обновлении контента нужно реализовать очередь или дебаунсинг отправки URL.
  • Обработка ошибок. В случае сетевых сбоев или ошибок API нужно предусмотреть повторную отправку или логирование с последующим разбором.
  • Безопасность webhook-ов. Если вы принимаете входящие webhook-запросы, обязательно проверяйте их источники и используйте секреты для аутентификации.
  • Проверка формата URL. Отправляйте только корректные и релевантные URL, чтобы не засорять индекс.

Как контролировать нагрузку и избежать блокировок

Для крупных проектов с частыми изменениями можно использовать следующие методы:

  • Буферизация URL в базе данных и отправка их пакетами по расписанию.
  • Использование очередей (например, через WP Cron или внешние сервисы).
  • Анализ логов и мониторинг успешности отправки.

Заключение

Интеграция IndexNow в WordPress через webhook-и — мощный и гибкий способ обеспечить мгновенную индексацию контента, снизить нагрузку на сервер и легко расширять функционал. Выше мы рассмотрели как написать собственный плагин с webhook-ом, расширить его для пользовательских типов записей и таксономий, а также использовать сторонние плагины для автоматизации процесса.

Для более удобной работы с IndexNow рекомендуем изучить и использовать плагины Clearfy Pro и WP Webhooks, которые помогут управлять SEO и интеграцией без лишнего кода. Подробнее о них можно узнать на WPSHOP.ru.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как удалить из индекса WordPress старые изображения с помощью IndexNow
14.12.2025
IndexNow и отладка отправки URL в крупных проектах WordPress: практические советы
24.02.2026
IndexNow автоматическое отправление изменений в WordPress: практическое руководство
11.12.2025
Как создать плагин WordPress для автоматической отправки URL в IndexNow
14.11.2025
IndexNow: как автоматически удалять слуги с постоянным редиректом в WordPress и обновлять индекс
14.04.2026
×
WPShop
честная партнерка!

Зарабатывай до 3225₽ с каждой продажи

Подключиться к партнерке