Почему важно отправлять URL заказов в IndexNow при массовых изменениях
В интернет-магазинах на WooCommerce часто происходят массовые изменения статусов заказов: оплата, отмена, возврат, изменение адреса доставки и т. п. Такие изменения влияют на страницы заказов, которые могут быть проиндексированы поисковыми системами. Если не уведомлять IndexNow, поисковики долго не узнают о свежих данных, что ведёт к устаревшей информации в поисковой выдаче и ухудшению пользовательского опыта.
Типичные кейсы массовых изменений заказов
- Переход группы заказов в статус "завершён" после обработки;
- Отмена нескольких заказов после проверки оплаты;
- Обновление адресов доставки по запросу клиента;
- Массовое применение возвратов после дефекта товара.
Диагностика проблемы: как понять, что URL заказов не отправляются в IndexNow
Если вы подозреваете, что изменения в заказах не отражаются в индексе поисковиков, сделайте следующие проверки:
- Проверьте логи отправки URL в IndexNow. Если отсутствуют адреса заказов, значит автоматизация не срабатывает.
- Убедитесь, что URL заказов доступны для индексации (нет блокировок в robots.txt или noindex).
- Используйте инструменты поисковых систем (например, Bing Webmaster Tools) для проверки состояния индексации страниц заказов.
- Отслеживайте HTTP-ответы сервера для URL заказов — они должны отдавать статус 200 или 301 (если редирект корректен), а не 404.
Пошаговое решение: автоматическая отправка URL заказов в IndexNow при массовых обновлениях
1. Подключение к хуку массового изменения заказов
WooCommerce не имеет готового хука для массовых изменений заказов, но можно использовать фильтр 'woocommerce_order_status_changed', который срабатывает при смене статуса каждого заказа. Для массовых операций это будет несколько вызовов подряд.
2. Формирование массива URL для отправки в IndexNow
Для каждого заказа формируем URL страницы заказа, например, get_permalink( $order_id ) или вручную по структуре.
3. Отправка URL в IndexNow через API
Для отправки используем стандартный HTTP POST-запрос на URL IndexNow с ключом API и массивом URL в теле запроса.
function send_indexnow_urls( array $urls ) {
$api_key = 'ВАШ_КЛЮЧ_API';
$endpoint = 'https://api.indexnow.org/indexnow?url='.urlencode($urls[0]).'&key='.$api_key.'&keyLocation=https://yourdomain.com/key.txt';
$payload = json_encode(['host' => parse_url($urls[0], PHP_URL_HOST), 'key' => $api_key, 'urlList' => $urls]);
$args = [
'headers' => ['Content-Type' => 'application/json'],
'body' => $payload,
'timeout' => 10,
];
$response = wp_remote_post($endpoint, $args);
return !is_wp_error($response) && wp_remote_retrieve_response_code($response) === 200;
}4. Реализация функции-обработчика для отправки при смене статуса заказа
add_action('woocommerce_order_status_changed', 'indexnow_send_order_url', 10, 4);
function indexnow_send_order_url( $order_id, $old_status, $new_status, $order ) {
// Фильтр по статусам, при которых отправляем URL
$send_statuses = ['processing', 'completed', 'cancelled'];
if ( in_array( $new_status, $send_statuses, true ) ) {
$url = get_permalink( $order_id );
if ( $url ) {
send_indexnow_urls( [$url] );
}
}
}5. Оптимизация для массовых обновлений
Если меняется сразу много заказов, желательно собрать URL в массив и отправить одним запросом, чтобы снизить количество вызовов API:
function indexnow_send_bulk_order_urls( array $order_ids ) {
$urls = [];
foreach ( $order_ids as $order_id ) {
$url = get_permalink( $order_id );
if ( $url ) {
$urls[] = $url;
}
}
if ( !empty($urls) ) {
send_indexnow_urls( $urls );
}
}Проверка результата после внедрения
- Произведите массовое изменение заказов (например, смените статус 5–10 заказов).
- Проверьте логи отправки — URL заказов должны отправиться в IndexNow.
- В Bing Webmaster Tools или Яндекс.Вебмастер проверьте обновление статусов индексации страниц заказов.
- Отследите HTTP-запросы к API IndexNow с помощью плагина Debug Bar или логирования.
Частые ошибки и как их исправить
- Отсутствие ключа API или неправильный ключ. Проверьте, что ключ доступен и совпадает с файлом
key.txtна сайте. - URL заказов недоступны для индексации. Убедитесь, что robots.txt, мета-теги или плагин SEO не блокируют эти страницы.
- Отправка URL не происходит при массовых изменениях. Используйте батчинг URL, чтобы снизить нагрузку на API и избежать таймаутов.
- Ошибки сети при отправке. Добавьте повторные попытки и логирование ошибок для диагностики.
Практические советы по производительности и безопасности
- Храните ключ API в
wp-config.phpили в защищённом месте, не в коде плагина. - Используйте transient API для кэширования URL перед отправкой, если изменения приходят часто.
- Разграничивайте права доступа — функции отправки URL должны срабатывать только для администраторов или cron-задач.
- Для больших магазинов применяйте очереди (WP-Cron или внешние сервисы) для пакетной отправки URL.
Сравнение вариантов реализации отправки URL заказов в IndexNow
| Метод | Плюсы | Минусы | Использование |
|---|---|---|---|
| Отправка URL при каждом изменении заказа | Простота реализации, моментальное обновление | Высокая нагрузка при массовых изменениях, много запросов | Небольшие магазины, редкие изменения |
| Пакетная отправка через cron или batch | Снижает нагрузку, эффективна при массовых изменениях | Задержка в обновлении индексации, сложнее реализовать | Большие магазины с высоким оборотом заказов |
| Использование сторонних плагинов | Готовое решение, поддержка и обновления | Может быть избыточным, зависит от качества плагина | Для тех, кто не хочет писать код |