Если в индексе начинают всплывать служебные страницы WordPress — результаты поиска, страницы вложений, служебные архивы, тестовые шаблоны, — проблема обычно не в robots.txt. Чаще поисковик уже успел увидеть URL, а запрет в robots.txt только мешает ему зайти и увидеть директиву noindex. В итоге страница может висеть в индексе дольше, чем нужно.
Надёжнее работать на уровне ответа страницы: отдавать корректный noindex, при необходимости ставить canonical и отдельно проверять, не создаёт ли тема или плагин новые дубли. Ниже — сценарий, который можно внедрить без ломки сайта и без лишней магии.
Когда это действительно нужно
Не стоит закрывать от индексации всё подряд. Служебные страницы полезно оставить открытыми только если у них есть ценность для поиска. Во всех остальных случаях они создают шум: расходуют краулинговый бюджет, плодят дубли и мешают нормальным страницам ранжироваться.
Типичные кандидаты на noindex
- страницы внутреннего поиска WordPress;
- страницы вложений медиафайлов, если они не используются как отдельные посадочные;
- архивы по датам, если они не несут самостоятельной ценности;
- служебные страницы пагинации в некоторых сценариях;
- страницы с параметрами фильтрации и сортировки, если они индексируются как отдельные URL;
- тестовые или временные разделы, которые забыли удалить после разработки.
Диагностика: что именно попало в индекс
Сначала нужно понять, какие URL реально индексируются. Не ориентируйтесь только на отчёты плагина SEO: они показывают настройки, но не факт индексации.
Проверьте три вещи:
- поиск в Google по оператору
site:example.comи по конкретным шаблонам URL; - отчёт «Страницы» в Google Search Console;
- исходный код проблемной страницы: есть ли там
<meta name="robots" content="noindex,follow">и какой canonical указан.
Если страница уже в индексе, но вы просто добавили noindex, поисковику нужно время на переобход. Если же URL закрыт в robots.txt, а не через мета-тег, робот может не увидеть обновление. Это частая причина, почему «настройка вроде есть, а в индексе всё равно висит».
Как закрыть страницы от индексации правильно
Есть три рабочих подхода: через SEO-плагин, через код темы или через комбинацию обоих. Выбор зависит от того, насколько у вас типовой сайт и есть ли уже плагин, который управляет мета-тегами.
| Подход | Когда подходит | Плюс | Минус |
|---|---|---|---|
| SEO-плагин | Типовой сайт, без сложной логики | Быстро и без кода | Не всегда удобно для точечных исключений |
| Код в теме или mu-plugin | Нужны точные правила для отдельных шаблонов | Полный контроль | Нужно аккуратно тестировать |
| Комбинация | Часть правил в плагине, часть в коде | Гибкость | Легко запутаться, если нет документации |
Вариант 1: через SEO-плагин
Если у вас уже стоит плагин, который умеет управлять мета-роботами, используйте его для базовых правил: noindex для архивов, вложений, поиска и других служебных страниц. Это безопаснее, чем править шаблоны вручную, если сайт поддерживает не один разработчик.
Плюс такого подхода в том, что настройки обычно сохраняются при обновлениях темы. Минус — не все плагины позволяют тонко настроить исключения, например закрыть только часть архивов или только страницы с определённым параметром.
Вариант 2: точечное noindex через код
Если нужно закрыть конкретные типы страниц, можно добавить фильтр в functions.php дочерней темы или в отдельный mu-plugin. Ниже пример для WordPress с использованием стандартного фильтра wp_robots.
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_search() || is_attachment() || is_date() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );Этот вариант хорош тем, что он не зависит от конкретного SEO-плагина. Но важно не переусердствовать: если вы закрываете архивы или страницы поиска, убедитесь, что это действительно нужно для вашего проекта.
Вариант 3: закрыть страницы с параметрами
Частая проблема — URL с параметрами сортировки, фильтра или UTM-меток. Если такие адреса генерируются и попадают в индекс, лучше не пытаться лечить это только robots.txt. Для страниц, которые должны открываться пользователю, но не индексироваться, используйте noindex на уровне шаблона.
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( ! empty( $_GET['sort'] ) || ! empty( $_GET['filter'] ) ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );Здесь важно не полагаться на один параметр. Если на сайте есть несколько вариантов фильтрации, список условий нужно собрать по фактическим URL, а не по предположениям.
Что делать с canonical и robots.txt
noindex и canonical решают разные задачи. noindex говорит «не показывай эту страницу в поиске», а canonical подсказывает, какая версия должна считаться основной. Если у вас есть дубль, но он нужен пользователю, canonical часто полезнее, чем жёсткий запрет.
Robots.txt стоит использовать только для технических ограничений краулинга: например, если вы не хотите, чтобы робот тратил ресурсы на определённый каталог. Но для уже известных поисковику URL это не замена noindex.
Когда canonical достаточно
- страница почти полностью повторяет основную версию;
- дубль нужен для навигации или фильтрации;
- вы хотите сохранить переходы и не ломать пользовательский сценарий.
Когда нужен именно noindex
- страница не несёт самостоятельной ценности;
- это служебный URL, который не должен конкурировать с основным контентом;
- дубль создаётся автоматически и не должен ранжироваться вообще.
Пошаговое решение без лишнего риска
- Составьте список URL-шаблонов, которые нужно закрыть.
- Проверьте, есть ли для них отдельные шаблоны в теме или плагине.
- Добавьте
noindex,followчерез SEO-плагин или фильтрwp_robots. - Для дублей укажите canonical на основную страницу.
- Не блокируйте эти URL в
robots.txt, если они уже в индексе и вам нужно, чтобы робот увидел директиву. - После внедрения отправьте страницы на переобход в Search Console.
Как проверить, что всё сработало
Проверка должна быть не «на глаз», а по конкретным признакам. Сначала откройте проблемную страницу в браузере и посмотрите исходный код. Вам нужен именно мета-тег robots или HTTP-заголовок, если вы используете серверную настройку.
Дальше проверьте:
- в исходнике есть
noindex; - canonical указывает на нужный URL;
- страница не закрыта в
robots.txtраньше времени; - в Google Search Console статус меняется после переобхода;
- в кэше плагина или CDN не осталась старая версия без мета-тега.
Если у вас включён кэш, очистите его после правок. Иначе вы будете смотреть на старый HTML и решать несуществующую проблему.
Частые ошибки и как их исправить
Закрыли страницу в robots.txt и ждёте удаления из индекса
Это самая частая ошибка. Если робот не может зайти на страницу, он не увидит noindex. В результате URL может оставаться в индексе дольше, чем вы ожидаете. Решение: временно разрешите обход, добавьте noindex, дождитесь переобхода, потом уже решайте, нужен ли запрет в robots.txt.
Ставят noindex на важные посадочные страницы
Иногда под раздачу попадают страницы категорий, тегов или фильтров, которые реально приводят трафик. Перед изменением проверьте, есть ли у URL поисковый спрос и входящий трафик. Если страница полезна, лучше доработать её, а не закрывать.
Забывают про кэш и CDN
После правок в коде или настройках старый HTML может продолжать отдаваться из кэша. В итоге в браузере вы видите одно, а поисковик — другое. Решение простое: очистить кэш плагина, серверный кэш и CDN, если он есть.
Дублируют правила в плагине и в теме
Когда часть страниц закрыта через SEO-плагин, а часть — через код в теме, легко получить конфликт. Например, один слой ставит noindex, другой — canonical на другую страницу, а третий вообще ничего не знает о правиле. Лучше зафиксировать, где именно живёт логика, и не размазывать её по проекту.
Практические советы по производительности и безопасности
Если вы добавляете условия на основе $_GET, не строите логику на доверии к входным данным. Проверяйте только наличие ожидаемых параметров и не используйте их для генерации SQL или файловых путей. Для задачи индексации это не нужно.
Для производительности лучше не делать тяжёлые проверки на каждом запросе. Фильтр wp_robots с простыми условиями вроде is_search() и is_attachment() почти не влияет на нагрузку. Проблемы начинаются, когда в него тащат запросы к базе или сложный парсинг URL.
Если на сайте много дублей и служебных страниц, иногда проще сначала навести порядок в генерации контента, чем бесконечно закрывать следствия. В таких задачах полезны плагины для чистки SEO-дублей и служебных элементов, например Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wpskins.ru&utm_medium=article&utm_campaign=kak-zapretit-indeksaciyu-tekhnicheskikh-stranic-v-wordpress-bez-robots-txt.
Мини-чек-лист перед публикацией правок
- Проблемные URL перечислены по факту, а не по предположению.
- Для каждого типа страниц выбран один способ управления индексированием.
noindexвиден в исходном коде или заголовках.- Canonical указывает на правильную основную страницу.
- Кэш и CDN очищены.
- Страницы отправлены на переобход в Search Console.
- Через несколько дней проверен статус индексации по конкретным URL.
Если после всех правок URL всё ещё висит в поиске, не добавляйте новые запреты хаотично. Сначала проверьте, что поисковик действительно видит обновлённый HTML, а не старую версию из кэша или страницу, закрытую раньше времени в robots.txt.