Если в WordPress есть тип записи product или любой другой каталог с большим количеством однотипных страниц, архивы часто начинают мешать SEO: в индекс попадают страницы без уникального контента, с дублями сортировок, пагинацией и фильтрами. В итоге поисковик тратит краулинговый бюджет не туда, а в отчётах появляются лишние URL.
Ниже — рабочий сценарий: как закрыть архивы товаров от индексации, не ломая сам каталог, хлебные крошки и переходы по сайту. Подходы подходят не только для WooCommerce, но и для любого кастомного post type с архивом.
Когда это действительно нужно
Не стоит закрывать архивы «на всякий случай». Сначала проверьте, что проблема есть именно у архивных страниц, а не у отдельных карточек. Типичный сигнал — в поиске появляются URL вида /product/, /catalog/, страницы пагинации, сортировки или фильтров, которые не несут самостоятельной ценности.
Что обычно индексируется лишним
- архив основного каталога без уникального текста;
- страницы пагинации архива;
- URL с параметрами сортировки и фильтрации;
- дубли архива по тегам, рубрикам или таксономиям;
- страницы поиска по каталогу, если они открыты для индексации.
Диагностика: что именно попало в индекс
Перед правками нужно понять, какой URL-тип создаёт мусор. Это можно проверить вручную и через инструменты для вебмастеров.
Быстрая проверка в браузере и через поиск
Откройте архив каталога и посмотрите исходный код страницы. Если на странице уже есть <meta name="robots" с index, значит запрет не настроен. Если архив доступен по нескольким адресам, например с параметрами сортировки, это тоже кандидат на закрытие.
Полезно проверить и серверный ответ:
curl -I https://example.com/product/В ответе ищите заголовки X-Robots-Tag и статус 200. Если заголовка нет, значит запрет на уровне HTTP не выставлен.
Что смотреть в Search Console
В отчёте по страницам и в проверке URL обратите внимание на:
- страницы архива, которые уже в индексе;
- дубли с параметрами
?orderby=,?filter=и похожими; - страницы пагинации, если они не должны ранжироваться;
- разницу между «просканировано» и «проиндексировано».
Как отключить индексацию архива через код
Если нужен точечный контроль, удобнее всего повесить noindex на архивный шаблон или на конкретный тип записи. Для этого не нужно трогать карточки товаров и не нужно закрывать каталог от пользователей.
Пример для functions.php дочерней темы или собственного мини-плагина:
add_action( 'wp_head', function () {
if ( is_post_type_archive( 'product' ) ) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
} );Этот вариант работает, если архив отдается через обычный HTML-шаблон. Он не мешает переходам по ссылкам и оставляет follow, чтобы поисковик мог проходить по внутренним ссылкам каталога.
Если нужен заголовок X-Robots-Tag
Для некоторых конфигураций удобнее отдать запрет на уровне HTTP. Это полезно, когда шаблонов несколько или архив формируется нестандартно:
add_action( 'send_headers', function () {
if ( is_post_type_archive( 'product' ) ) {
header( 'X-Robots-Tag: noindex, follow', true );
}
} );Не используйте оба способа без необходимости. Обычно достаточно одного: либо meta robots, либо HTTP-заголовка. Двойная настройка не даёт пользы и усложняет диагностику.
Что делать с пагинацией и фильтрами
Если закрыть только первую страницу архива, а пагинацию оставить открытой, поисковик всё равно может тратить ресурсы на пустые или почти пустые страницы. Для таких URL лучше отдельно настроить правила.
Пагинация архива
Если страницы /product/page/2/ и дальше не должны индексироваться, добавьте условие на is_paged():
add_action( 'wp_head', function () {
if ( is_post_type_archive( 'product' ) && is_paged() ) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
} );Так вы оставите доступ к товарам через навигацию, но уберёте из индекса технические страницы.
Фильтры и сортировки
Для URL с параметрами сортировки и фильтрации лучше не полагаться только на robots.txt. Если страница уже доступна и может быть просканирована, безопаснее отдать noindex на уровне HTML или заголовка. Логика может быть такой: если в запросе есть параметр orderby или любой ваш фильтр, ставим noindex.
add_action( 'wp_head', function () {
if ( is_post_type_archive( 'product' ) && ( isset( $_GET['orderby'] ) || isset( $_GET['filter'] ) ) ) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
} );Здесь важно не переборщить: если фильтр ведёт на полезную посадочную страницу, её лучше оставить индексируемой и оптимизировать отдельно.
Сравнение подходов: плагин, код или robots.txt
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Плагин SEO | Нужно быстро закрыть архив без разработки | Просто включить, есть интерфейс | Меньше точности, возможны лишние правила |
| Код в теме или мини-плагине | Нужен контроль над конкретным архивом или параметрами | Точно, прозрачно, без лишних зависимостей | Нужно тестировать после обновлений |
| robots.txt | Нужно ограничить обход, а не индексацию уже известных URL | Быстро и просто | Не гарантирует удаление из индекса, если URL уже известен поисковику |
Если задача именно в индексации, robots.txt — не основной инструмент. Он полезен как дополнительный барьер, но не заменяет noindex.
Пошаговое решение без лишнего риска
- Определите, какой архив нужно закрыть: основной архив, пагинацию, фильтры или всё вместе.
- Проверьте, нет ли на этом URL уникального контента, который должен ранжироваться.
- Добавьте
noindex,followчерезwp_headилиX-Robots-Tag. - Для пагинации и параметров добавьте отдельные условия.
- Очистите кэш сайта, CDN и серверный кэш.
- Переобойдите страницу через проверку URL в Search Console.
Как проверить, что всё сработало
После внедрения не ограничивайтесь визуальной проверкой. Нужны три уровня контроля.
- Исходный код страницы — должен появиться
noindex,follow. - HTTP-ответ — при использовании заголовка должен быть
X-Robots-Tag. - Search Console — при повторной проверке URL статус должен измениться после переобхода.
Если архив всё ещё индексируется, проверьте кэш: часто старая версия страницы отдаётся CDN или плагином кеширования, и вы тестируете уже не тот HTML, который видит робот.
Частые ошибки и как их исправить
Закрыли архив, но не закрыли пагинацию
В результате в индексе остаются страницы /page/2/ и далее. Решение — добавить отдельное условие на is_paged().
Использовали только robots.txt
Это не убирает URL из индекса, если он уже известен поисковику. Для индексации нужен noindex или заголовок X-Robots-Tag.
Поставили noindex на весь каталог
Так можно случайно закрыть и полезные карточки товаров. Проверяйте условие: должно срабатывать только на архиве, а не на single-страницах.
Не очистили кэш
После правки старый HTML может ещё долго отдаваться из кеша. Очистите плагин кеширования, серверный кеш и CDN, если он есть.
Безопасность и производительность
Если вы вносите код вручную, не редактируйте родительскую тему. Используйте дочернюю тему или небольшой mu-plugin, чтобы не потерять изменения при обновлении. Для проверки синтаксиса удобно сначала прогнать файл локально или на staging-сервере.
Если на сайте уже есть SEO-плагин, сначала посмотрите, не умеет ли он закрывать архивы штатно. Иногда проще настроить это в интерфейсе, чем поддерживать свой код. Но если нужна точечная логика по условиям, код остаётся самым предсказуемым вариантом.
Для сайтов с большим каталогом полезно дополнительно убрать из индекса технические страницы, которые создают дубли: сортировки, внутренний поиск, архивы дат и авторов. Это снижает шум в индексации и упрощает контроль над тем, что реально должно ранжироваться.