IndexNow и WooCommerce: автоматическая отправка URL при изменении цен товаров

Диагностика проблемы: почему изменения цен не всегда индексируются быстро

В WooCommerce цены товаров часто меняются — акции, скидки, динамическое ценообразование. Однако поисковые системы могут не сразу увидеть эти обновления, если URL не отправляются на переиндексацию. IndexNow позволяет мгновенно уведомлять поисковики о важных изменениях, но стандартные реализации в WooCommerce обычно не отслеживают именно изменения цен, а реагируют на изменение контента поста.

Проверить, что изменения цен не отправляются в IndexNow, можно по логам плагина или анализу сетевых запросов. Если при обновлении цены URL не отправляется, значит требуется доработка.

Как настроить автоматическую отправку URL при изменении цен в WooCommerce

Отслеживаем изменение цены с помощью хука

Цены в WooCommerce хранятся в метаполях товара: _price, _regular_price, _sale_price. При обновлении этих полей срабатывает хук updated_postmeta или update_postmeta. Используем его, чтобы поймать изменение цены и отправить URL в IndexNow.

add_action('updated_postmeta', 'indexnow_send_url_on_price_change', 10, 4);

function indexnow_send_url_on_price_change($meta_id, $post_id, $meta_key, $meta_value) {
    if (!in_array($meta_key, ['_price', '_regular_price', '_sale_price'])) {
        return;
    }
    $post_type = get_post_type($post_id);
    if ($post_type !== 'product') {
        return;
    }

    // Получаем URL товара
    $url = get_permalink($post_id);
    if (!$url) {
        return;
    }

    // Отправляем URL в IndexNow
    indexnow_send_url($url);
}

function indexnow_send_url($url) {
    $api_key = 'ВАШ_КЛЮЧ_INDEXNOW'; // Замените на ваш ключ
    $endpoint = 'https://api.indexnow.org/indexnow';
    $urls = [$url];

    $payload = [
        'host' => parse_url(home_url(), PHP_URL_HOST),
        'key' => $api_key,
        'keyLocation' => home_url('/' . $api_key . '.txt'),
        'urlList' => $urls
    ];

    $args = [
        'headers' => [
            'Content-Type' => 'application/json'
        ],
        'body' => json_encode($payload),
        'timeout' => 10
    ];

    $response = wp_remote_post($endpoint, $args);

    if (is_wp_error($response)) {
        error_log('IndexNow отправка URL не удалась: ' . $response->get_error_message());
    } elseif (wp_remote_retrieve_response_code($response) !== 200) {
        error_log('IndexNow ответ сервера: ' . wp_remote_retrieve_response_message($response));
    } else {
        error_log('IndexNow URL успешно отправлен: ' . $url);
    }
}

Особенности реализации

  • Отправка происходит только при изменении цены, чтобы не перегружать API.
  • Адрес ключа IndexNow должен быть доступен по URL https://ваш-сайт/ВАШ_КЛЮЧ_INDEXNOW.txt.
  • Логи ошибок и успешных отправок помогут отладить работу.

Проверка результата: как убедиться, что URL отправлен

1. Проверьте логи ошибок WordPress (error_log) на наличие записей об отправке URL.

2. Используйте инструменты разработчика браузера или плагины для мониторинга HTTP-запросов — должен быть POST-запрос на https://api.indexnow.org/indexnow с корректным payload.

3. В панели поисковой системы (если поддерживает IndexNow) можно отследить время последней индексации измененного товара.

Частые ошибки и их исправление

  • Отсутствие ключа API или неправильный путь к файлу ключа: убедитесь, что файл ВАШ_КЛЮЧ_INDEXNOW.txt лежит в корне сайта и доступен по прямой ссылке.
  • Хук срабатывает слишком часто: фильтруйте только нужные метаполя _price, _regular_price, _sale_price.
  • Проблемы с SSL или блокировки на сервере: проверьте, что сайт и сервер могут делать внешние HTTPS-запросы.
  • Неправильный формат запроса: payload должен быть JSON с ключами host, key, keyLocation и urlList — не забывайте это соблюдать.

Практические советы по безопасности и производительности

  • Храните ключ IndexNow в защищенных параметрах конфигурации, например, в wp-config.php или в настройках плагина, чтобы не оставлять в открытом виде в коде.
  • Добавьте кеширование или дебаунсинг отправки, чтобы при массовых обновлениях цены не создавать излишнюю нагрузку на API.
  • Проверяйте HTTP-ответы и ведите журнал ошибок для оперативной отладки отправок.
  • Для крупных WooCommerce-магазинов рассмотрите пакетную отправку URL, объединяя несколько обновлений в один запрос IndexNow.

Сравнение вариантов реализации отправки URL при изменении цены в WooCommerce

МетодПреимуществаНедостатки
Хук updated_postmeta (как в статье)Точный запуск при изменении цены, минимальный код, быстрое реагированиеМожет сработать много раз при массовых изменениях, требуется фильтрация
Отслеживание в save_post_product с кешированиемМожно объединять изменения, меньше запросов к APIСложнее реализовать, возможна задержка отправки
Периодический Cron с сравнением цен (batch)Контроль нагрузки, отправка только действительно измененных URLЗадержка в обновлении индекса, сложная логика сравнения

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

⭐⭐⭐⭐⭐
Решение проблем с отправкой URL в IndexNow при большом объеме сайта WordPress
20.01.2026
IndexNow и кэширование в WordPress: практические советы и решения
22.12.2025
Как автоматически отслеживать изменения в метаданных WordPress и отправлять их в IndexNow
21.02.2026
IndexNow автоматическая отправка URL для пользовательских таксономий WordPress
10.02.2026
Как использовать IndexNow для удаления старых URL из WordPress
17.02.2026
×
WPShop
честная партнерка!

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

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