IndexNow и автоматизация отправки URL в WordPress с помощью Cron и REST API

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.

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

⭐⭐⭐⭐⭐
IndexNow и WooCommerce: решение проблем с обновлением наличия товаров
06.05.2026
Изменение URL в WordPress без потери индексации и позиций
08.12.2025
IndexNow и безопасность WordPress: как правильно хранить и использовать ключи API
24.02.2026
Оптимизация отправки URL в IndexNow при большом объеме сайта WordPress
14.02.2026
IndexNow: автоматическая очистка неиспользуемых URL в WordPress
23.03.2026
×
WPShop
честная партнерка!

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

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