IndexNow и WooCommerce: автоматическое удаление товаров без наличия из индекса

Диагностика проблемы с индексацией отсутствующих товаров в WooCommerce

В интернет-магазинах на WooCommerce часто возникает ситуация, когда товары, которых нет в наличии, продолжают индексироваться поисковыми системами. Это ведет к снижению качества индекса, появлению неактуальных страниц в результатах поиска и ухудшению пользовательского опыта.

Проверить наличие такой проблемы можно с помощью анализа поисковых выдач и инструментов для веб-мастеров (например, Bing Webmaster Tools или Google Search Console) — если в индексе остаются товары с меткой «нет в наличии», значит, индексация не настроена корректно.

Как определить статус наличия товаров программно

WooCommerce хранит статус наличия в мета-поле _stock_status. Значения могут быть instock (в наличии) или outofstock (нет в наличии). Этот параметр удобно использовать для фильтрации товаров.

Пошаговое решение: автоматическая отправка IndexNow для удаления товаров без наличия

Ниже представлен пример реализации автоматической отправки URL товаров с отсутствием запасов в IndexNow для удаления из индекса.

1. Реализация функции отправки URL в IndexNow

function send_url_to_indexnow($url) {
    $key = 'ВАШ_КЛЮЧ_INDEXNOW';
    $host = 'https://api.indexnow.org/indexnow';

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

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

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

    if (is_wp_error($response)) {
        error_log('IndexNow отправка не удалась: ' . $response->get_error_message());
        return false;
    }

    $code = wp_remote_retrieve_response_code($response);
    if ($code === 200) {
        return true;
    } else {
        error_log('IndexNow вернул код ответа: ' . $code);
        return false;
    }
}

2. Отправка URL товара при смене статуса наличия на «outofstock»

add_action('save_post_product', 'send_outofstock_product_to_indexnow', 20, 3);
function send_outofstock_product_to_indexnow($post_ID, $post, $update) {
    if ($post->post_status !== 'publish') {
        return;
    }

    $stock_status = get_post_meta($post_ID, '_stock_status', true);
    if ($stock_status === 'outofstock') {
        $url = get_permalink($post_ID);
        send_url_to_indexnow($url);
    }
}

3. Регулярная проверка и отправка всех отсутствующих товаров (Cron)

Добавьте задание Cron для периодической отправки URL товаров без наличия, чтобы исключить пропуски при массовых изменениях.

if (!wp_next_scheduled('send_outofstock_products_indexnow_cron')) {
    wp_schedule_event(time(), 'hourly', 'send_outofstock_products_indexnow_cron');
}

add_action('send_outofstock_products_indexnow_cron', function() {
    $args = [
        'post_type' => 'product',
        'post_status' => 'publish',
        'meta_query' => [
            [
                'key' => '_stock_status',
                'value' => 'outofstock',
            ],
        ],
        'fields' => 'ids',
        'posts_per_page' => 100,
    ];

    $products = get_posts($args);

    foreach ($products as $product_id) {
        $url = get_permalink($product_id);
        send_url_to_indexnow($url);
    }
});

Проверка результата после внедрения

  • В Bing Webmaster Tools проверьте логи отправки IndexNow — должны появляться успешные запросы на удаление URL.
  • Через поисковик выполните поиск по URL отсутствующих товаров — они должны постепенно исчезать из выдачи.
  • Проверьте логи ошибок WordPress, чтобы убедиться в отсутствии проблем при отправке запросов.

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

  • Неверный ключ API или отсутствие файла ключа на сайте: Убедитесь, что файл indexnow-key.txt с ключом размещён в корне сайта и ключ совпадает с указанным в коде.
  • Отправка запросов без проверки статуса публикации товара: Добавляйте проверку $post->post_status === 'publish', чтобы не отправлять неактивные страницы.
  • Проблемы с Cron: Проверьте, что задания Cron действительно выполняются, используя плагин WP Crontrol или аналогичные инструменты.
  • Ошибки в JSON при отправке запроса: Проверяйте правильность JSON и наличие всех обязательных параметров.

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

  • Храните ключ IndexNow в wp-config.php или в защищённых настройках, а не жестко в коде.
  • Ограничьте частоту отправки запросов, чтобы не превышать лимиты API и избежать блокировок.
  • Используйте пакетную отправку URL (до 10 за запрос), если необходимо массовое удаление для оптимизации нагрузки.
  • Логируйте результаты отправки для своевременного обнаружения проблем.

Сравнение вариантов реализации автоматического удаления товаров без наличия

МетодПреимуществаНедостаткиПример
Отправка при сохранении товараМгновенная реакция на изменениеНе работает при массовых измененияхХук save_post_product
Периодический CronОбрабатывает массовые измененияЗадержка до часаWP Cron + get_posts с meta_query
Отправка через очередь (Queue)Управляемая нагрузка, пакетная отправкаСложнее в реализацииИспользование Transients и WP Cron

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

⭐⭐⭐⭐⭐
IndexNow автоматическая очистка кеша в WordPress: практическое руководство
24.01.2026
IndexNow: автоматическая очистка из индекса URL с редиректами в WordPress
10.06.2026
IndexNow и использование различных методов отправки URL в WordPress
29.03.2026
IndexNow в WordPress: решение проблем с отправкой URL при массовом изменении контента
28.05.2026
Как использовать IndexNow для удаления старого контента в WordPress
13.03.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее