На живых WordPress-сайтах проблема обычно не в одной «плохой» странице, а в десятках архивов, которые создаются автоматически: рубрики, метки, страницы поиска, вложения, служебные архивы таксономий. Они начинают конкурировать с основными посадочными, размывают краулинговый бюджет и создают мусор в индексе. Если закрывать всё подряд через robots.txt, можно только ухудшить ситуацию: URL останется в выдаче без сниппета, а поисковик не увидит noindex и каноникал.
Когда это действительно нужно
Сначала стоит понять, что именно вы хотите убрать из индекса. Не все архивы одинаково вредны. Рубрика с нормальным текстом и подборкой материалов может быть полезной страницей. А вот архивы меток, пустые таксономии, страницы поиска и вложения чаще всего не несут самостоятельной ценности.
Типичные симптомы:
- в индексе есть страницы вида
/tag/...,/page/2/,?s=,/attachment/...; - в Search Console растёт число «Просканировано, но не проиндексировано»;
- в выдаче всплывают служебные URL вместо нормальных посадочных;
- поисковик тратит обход на архивы, которые не приносят трафик.
Диагностика: что закрывать, а что оставить
Перед правками полезно посмотреть, какие типы архивов реально индексируются. Это можно сделать вручную через поиск по сайту и через инструменты вебмастера. Если у вас уже подключён Google Search Console, проверьте отчёт по страницам и запросы, которые ведут на архивы. Для Яндекса — аналогично смотрите страницы в индексе и исключённые URL.
На стороне WordPress проверьте, какие таксономии вообще используются как посадочные. Если рубрика содержит уникальный текст, хлебные крошки, нормальную пагинацию и полезный список материалов, её лучше не прятать. Если это техническая метка, которая дублирует рубрику, её можно закрывать.
Что обычно закрывают
- архивы меток;
- пустые рубрики и таксономии;
- страницы поиска;
- архивы вложений;
- страницы пагинации служебных архивов, если они не нужны в поиске;
- служебные таксономии, которые не должны ранжироваться.
Что обычно оставляют
- основные рубрики с контентом;
- страницы авторов, если это медиа-проект или экспертный сайт;
- архивы, которые реально получают трафик и отвечают на отдельный интент.
Пошаговое решение: как закрыть индексацию правильно
Самый надёжный путь — не robots.txt, а noindex на уровне HTML-мета или HTTP-заголовка. Для WordPress это можно сделать кодом в теме или через SEO-плагин. Если нужен точечный контроль без лишней магии, удобнее использовать фильтр wp_robots.
Вариант 1: закрыть архивы через wp_robots
Этот способ подходит, если вы хотите управлять индексированием программно. Код можно добавить в functions.php дочерней темы или в небольшой mu-plugin.
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_tag() || is_search() || is_attachment() ) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
$robots['max-snippet'] = '0';
$robots['max-image-preview'] = 'none';
$robots['max-video-preview'] = '0';
}
return $robots;
} );
Здесь логика простая: для страниц поиска, меток и вложений мы просим поисковики не индексировать страницу и не передавать по ней ссылочный вес. Для рубрик такой код лучше не применять без анализа, иначе можно случайно убрать из индекса полезные разделы.
Вариант 2: закрыть только конкретные таксономии
Если у вас есть служебная таксономия, которая не должна попадать в поиск, лучше проверять именно её. Это безопаснее, чем закрывать все архивы подряд.
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_tax( 'product_brand' ) || is_tax( 'topic' ) ) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
return $robots;
} );
Имена таксономий должны быть реальными для вашего сайта. Их можно посмотреть в коде темы, в регистрации CPT или через админку, если таксономия создаётся плагином.
Вариант 3: убрать архивы вложений с индексации и редиректить на файл
Страницы вложений часто индексируются отдельно, хотя там почти нет полезного контента. Если у вас нет задачи продвигать attachment-страницы, логичнее отправлять пользователя и робота на сам файл или на родительскую запись.
<?php
add_action( 'template_redirect', function() {
if ( is_attachment() ) {
$parent = get_post_field( 'post_parent', get_queried_object_id() );
if ( $parent ) {
wp_safe_redirect( get_permalink( $parent ), 301 );
exit;
}
}
} );
Если родительской записи нет, можно редиректить на главную или на медиафайл, но это уже зависит от структуры сайта. Важно не оставлять пустую attachment-страницу с тонким контентом.
Сравнение подходов
| Подход | Когда использовать | Минус |
|---|---|---|
| SEO-плагин | Нужны быстрые настройки без кода | Меньше точности, часть логики спрятана в интерфейсе |
Код через wp_robots |
Нужен точечный контроль по условиям WordPress | Требует проверки после обновлений темы |
robots.txt |
Нужно ограничить обход, а не индексацию | Не гарантирует исключение URL из индекса |
Если нужен более широкий контроль дублей и служебных страниц, на практике часто удобнее сочетать код с SEO-плагином или инструментами вроде Clearfy Pro: он помогает закрывать лишние архивы, чистить дубли и не раздувать индекс. Ссылка для ориентира: Clearfy Pro.
Проверка результата после внедрения
После правок не ограничивайтесь просмотром исходника. Нужно проверить, как страница отдаёт сигналы поисковикам и не сломались ли полезные разделы.
- Откройте проблемный URL и посмотрите исходный код: должен появиться
noindex. - Проверьте HTTP-ответ, если вы используете заголовки, а не мета-теги.
- В Search Console отправьте страницу на повторную проверку.
- Убедитесь, что внутренние ссылки на нужные рубрики остались доступными.
- Проверьте пагинацию: иногда закрывают первую страницу архива, но забывают про
/page/2/.
Для быстрой локальной проверки удобно использовать браузерный просмотр исходника или curl:
curl -I https://example.com/tag/sample/
Если вы ожидаете редирект с attachment-страницы, в ответе должен быть статус 301 и корректный Location.
Частые ошибки и как их исправить
Закрыли robots.txt вместо noindex
Это самая частая ошибка. Если URL уже в индексе, запрет в robots.txt не удалит его мгновенно и может даже помешать поисковику увидеть noindex. Сначала убирайте индексирование, потом при необходимости ограничивайте обход.
Случайно закрыли полезные рубрики
Если в коде стоит слишком широкое условие вроде is_archive(), под раздачу попадут и нормальные разделы. Лучше проверять конкретные типы: is_tag(), is_search(), is_attachment(), is_tax('slug').
Оставили дубли с пагинацией
Иногда закрывают только первую страницу архива, а страницы /page/2/ и дальше продолжают индексироваться. Нужно проверить все шаблоны, которые генерируют тот же тип контента.
Редирект на несуществующий родитель
Для вложений это бывает после удаления исходной записи. Перед редиректом проверяйте, что $parent существует и что ссылка не ведёт в 404.
Чек-лист перед публикацией правок
- Определены конкретные типы страниц, которые нужно закрыть.
- Полезные рубрики не попали под общий фильтр.
- На страницах есть
noindex, а не только запрет вrobots.txt. - Проверены пагинация и вложенные URL.
- Сделан бэкап или хотя бы сохранён фрагмент кода до правки.
- После изменения проверен исходный код и ответ сервера.
Что учесть по безопасности и производительности
Если вы вносите изменения кодом, не правьте напрямую родительскую тему. Используйте дочернюю тему или mu-plugin, чтобы обновление не затёрло настройки. Для сайтов с высокой нагрузкой лучше не добавлять тяжёлую логику в каждый запрос: проверка is_search() и is_attachment() дешева, а вот сложные запросы к базе в фильтре wp_robots уже лишние.
Ещё один практический момент: не смешивайте в одном месте SEO-логику, редиректы и очистку контента без комментариев. Через пару месяцев такой код становится источником ошибок, особенно если сайт ведут несколько разработчиков.