Диагностика задачи: зачем исключать товар из показа и индексации
В WooCommerce иногда требуется временно или постоянно скрыть товар от посетителей сайта и поисковых систем, например, при снятии товара с продажи, работе с устаревшими позициями или для товаров, доступных только по закрытому заказу. Простое отключение товара не всегда решает задачу, так как он может оставаться индексируемым поисковиками и отображаться в результатах поиска сайта.
Задача: исключить товар из каталога, поиска и поисковой индексации без удаления из базы.
Как проверить, что товар индексируется и отображается
- Откройте страницу товара — он должен быть публично доступен.
- Поиск по сайту — товар находится в результатах.
- Проверьте страницу архива категорий — товар отображается.
- Через Google Search Console или оператор site:site.ru в поиске Google — товарные страницы видны в индексе.
Пошаговое решение: скрытие товара от показа и поисковой индексации
1. Изменение статуса товара
Для начала измените статус товара на private или draft, чтобы он не отображался в публичных каталогах.
wp post update PRODUCT_ID --post_status=privateГде PRODUCT_ID — ID товара. Это можно сделать через админку вручную или WP-CLI.
2. Исключение товара из запросов WooCommerce
Если по каким-то причинам товар должен оставаться в статусе publish, можно программно исключить его из запросов каталога и поиска:
add_action('pre_get_posts', function($query) {
if (!is_admin() && $query->is_main_query()) {
if (is_shop() || is_product_category() || is_product_tag() || $query->is_search()) {
// ID товара для исключения
$exclude_ids = array(1234);
$post__not_in = $query->get('post__not_in');
if (!is_array($post__not_in)) {
$post__not_in = array();
}
$query->set('post__not_in', array_merge($post__not_in, $exclude_ids));
}
}
});3. Запрет индексации через мета-тег robots
Чтобы поисковики не индексировали страницу товара, добавьте в <head> мета-тег noindex, nofollow. Это можно сделать, подключившись к хуку wp_head:
add_action('wp_head', function() {
if (is_product() && get_the_ID() === 1234) {
echo '<meta name="robots" content="noindex, nofollow">';
}
});4. Альтернативный вариант — использовать SEO-плагины
Если на сайте установлен Yoast SEO или Rank Math, удобно выставлять для конкретных товаров мета-теги noindex и отключать отображение в поиске через интерфейс плагина.
Проверка результата после внедрения
- Отключите кэш сайта и браузера.
- Проверьте, что товар не отображается в каталоге и поиске сайта.
- Откройте страницу товара — в коде страницы должен быть мета-тег
noindex, nofollow. - Через консоль разработчика убедитесь, что запросы к REST API не возвращают товар (если нужно, дополнительно фильтруйте API).
- В Google Search Console используйте инструмент проверки URL — убедитесь, что страница помечена как исключённая из индекса.
Частые ошибки и их исправление
- Ошибка: Товар виден в каталоге, хотя статус изменён на private.
Причина: Кэширование или сторонний плагин кэширования.
Решение: Очистите кэш сайта и браузера; проверьте работу на другом устройстве. - Ошибка: Мета-тег noindex не выводится.
Причина: Хукwp_headне подключён или есть конфликты в теме.
Решение: Проверьте тему, отключите плагины поочерёдно, убедитесь, что код размещён в functions.php или плагине. - Ошибка: Товар остаётся в поисковых результатах Google.
Причина: Поисковик ещё не обновил индекс.
Решение: Используйте Google Search Console для удаления URL из индекса и подождите несколько дней.
Практические советы по безопасности и производительности
- Не удаляйте товар из базы без необходимости — лучше скрывать через статус и фильтры.
- Используйте WP-CLI для массовой смены статусов товаров, это быстрее и безопаснее.
- Добавляйте фильтры исключения товаров в
pre_get_posts, чтобы минимизировать нагрузку на базу. - При использовании SEO-плагинов настройте исключение товаров через интерфейс, чтобы избежать ошибок в коде.
Сравнение вариантов скрытия товара
| Метод | Преимущества | Недостатки | Когда использовать |
|---|---|---|---|
| Статус "private" или "draft" | Простая реализация, исключение из каталога и поиска | Товар недоступен на прямой ссылке | Когда товар временно не продаётся |
| Фильтрация в pre_get_posts + noindex | Товар остаётся в базе и доступен по прямой ссылке, гибкость | Требует кода, можно забыть о кэшировании | Когда нужен доступ по ссылке, но без индексации |
| Использование SEO-плагинов (Yoast, Rank Math) | Удобный интерфейс, дополнительные SEO функции | Зависимость от плагина | Для управляющих SEO без кода |