Ситуация типовая: в индексе оказываются страницы поиска, служебные архивы, дубли пагинации, тестовые разделы или приватные страницы, которые не должны конкурировать с основным контентом. Просто закрыть URL в robots.txt недостаточно: поисковик может знать адрес, но всё равно держать его в выдаче без сниппета. Для точечной задачи обычно нужен набор из noindex, корректного canonical и, где уместно, запрета обхода через robots.txt.
Ниже — рабочий сценарий для WordPress без установки SEO-плагина. Подход подходит, если нужно закрыть от индексации несколько конкретных типов страниц, а не весь сайт целиком.
Что именно нужно закрыть и почему одного robots.txt мало
Если задача звучит как «убрать из поиска страницу», сначала уточняем, что именно происходит сейчас. Поисковик может:
- индексировать сам URL;
- показывать его без сниппета;
- считать страницу дублем другой;
- держать в индексе старую версию после редиректа или смены шаблона.
robots.txt управляет обходом, но не гарантирует удаление из индекса. Если страница уже известна поисковой системе, чаще нужен noindex в HTML-ответе или в HTTP-заголовке. Для WordPress это удобно делать через wp_head и, при необходимости, через фильтр wp_robots.
Когда достаточно noindex
Обычно noindex ставят на:
- страницы поиска по сайту;
- архивы автора на небольших сайтах;
- страницы с фильтрами и параметрами;
- служебные страницы, которые не несут самостоятельной ценности;
- временные лендинги и тестовые разделы.
Если URL не должен даже обходиться ботом, можно дополнительно закрыть его в robots.txt, но только если вы понимаете последствия: поисковик не увидит noindex на самой странице, если ему запрещён доступ к ней.
Диагностика проблемы перед правкой
Перед изменениями проверьте, как именно страница отдается сейчас. Это экономит время и помогает не закрыть лишнее.
- Откройте проблемный URL в браузере и посмотрите исходный код страницы.
- Найдите тег
<meta name="robots" ...>. - Проверьте, нет ли уже
canonicalна другой адрес. - Посмотрите, не генерируется ли страница через шаблон архива, а не через обычную запись.
- Если сайт под кешем, очистите кеш перед повторной проверкой.
Быстрая проверка через терминал помогает увидеть заголовки и HTML без влияния браузера:
curl -I https://example.com/search/test/Если нужен именно HTML, а не только заголовки, используйте:
curl -s https://example.com/search/test/ | grep -i robotsНа этом этапе важно понять: проблема в шаблоне, в плагине, в кеше или в том, что страница вообще не помечена как неиндексируемая.
Пошаговое решение через functions.php или мини-плагин
Самый безопасный вариант — вынести код в небольшой mu-plugin или отдельный плагин. Если правите functions.php, помните, что при смене темы настройка исчезнет.
Ниже пример, который добавляет noindex, nofollow для поиска по сайту, архивов автора и нескольких конкретных страниц по ID. Логику можно расширить под свои условия.
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_search() || is_author() ) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
$blocked_pages = array( 12, 34, 56 );
if ( is_page( $blocked_pages ) ) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
return $robots;
} );Если нужен более точный контроль для отдельных шаблонов, можно добавить условие по slug:
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_page( 'testovaya-stranica' ) || is_page( 'vnutrennyaya-poiskovaya-stranica' ) ) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
return $robots;
} );Когда нужно закрыть от индексации не только HTML, но и сам обход, добавьте правила в robots.txt. Для WordPress это можно сделать через фильтр robots_txt:
<?php
add_filter( 'robots_txt', function( $output, $public ) {
$output .= "\nDisallow: /search/\n";
$output .= "Disallow: /tag/";
return $output;
}, 10, 2 );Но здесь есть важная оговорка: не закрывайте в robots.txt URL, которые уже должны выйти из индекса через noindex. Если бот не сможет зайти на страницу, он может не увидеть директиву noindex.
Сравнение подходов: код, плагин, компромисс
| Подход | Когда уместен | Плюсы | Минусы |
|---|---|---|---|
| Код в теме или mu-plugin | Нужно закрыть 2–10 точечных URL или шаблонов | Без лишних зависимостей, полный контроль | Нужно аккуратно сопровождать при обновлениях |
| SEO-плагин | Много типов архивов и страниц, нужна админка | Удобно для редакторов, меньше ручной логики | Лишний слой настроек, иногда конфликтует с темой |
| robots.txt только | Нужно ограничить обход, а не индексацию | Просто и быстро | Не решает задачу удаления уже известного URL из индекса |
Если на сайте уже стоит комплексный SEO-инструмент, например Clearfy Pro, часть задач можно закрыть через интерфейс без кода. Но для точечных правил по конкретным страницам код обычно быстрее и прозрачнее.
Как проверить, что решение сработало
После внедрения не ограничивайтесь просмотром исходника в браузере. Проверка должна быть в три шага.
- Откройте страницу и убедитесь, что в исходном коде есть
noindex. - Проверьте, не переопределяет ли его кеш или другой плагин.
- Запросите URL через Search Console и посмотрите, как поисковик видит страницу после переобхода.
В исходнике должен появиться примерно такой фрагмент:
<meta name="robots" content="noindex, nofollow" />Если вместо этого вы видите только index, follow или вообще ничего, значит фильтр не сработал, либо тема/плагин перезаписывает мета-теги позже по приоритету.
Что проверить, если тег не появился
- Код вставлен не в тот файл или не активен mu-plugin.
- Условие
is_page()не совпадает с реальным ID или slug. - Кеш страницы не обновился.
- Другой SEO-плагин уже формирует robots-мета и конфликтует с вашим кодом.
- Страница выводится не через
wp_head, а через кастомный шаблон без стандартного хука.
Частые ошибки и как их исправить
Закрыли страницу в robots.txt, но не поставили noindex
Это самая частая ошибка. Страница перестаёт обходиться, но может оставаться в индексе. Если цель — удалить URL из выдачи, сначала дайте поисковику увидеть noindex, а уже потом ограничивайте обход, если это действительно нужно.
Используют noindex на всех страницах подряд
Такое бывает после копипаста готового сниппета в wp_head. В результате из поиска исчезают и полезные страницы. Всегда проверяйте условия: is_search(), is_page(), is_category(), is_author() и конкретные ID.
Не учитывают canonical
Если на странице стоит noindex, но canonical ведёт на другой URL, поисковик может быстрее понять связь между дублями. Если же canonical указывает на саму страницу, а вы хотите убрать её из индекса, это противоречие лучше устранить.
Путают архивы и записи
Например, закрывают отдельную запись, а проблема на самом деле в архиве категории или в странице поиска. Перед правкой определите тип объекта через шаблон и условие WordPress.
Практические советы по безопасности и производительности
Если вы часто меняете правила индексации, не держите их в случайном functions.php. Лучше вынести в маленький плагин или mu-plugin: так код не потеряется при смене темы и проще контролировать изменения в git.
- Не закрывайте важные страницы только через CSS-скрытие — поисковик это не считает решением.
- Не используйте массовый
noindexбез списка URL и без ревизии sitemap. - После изменения правил обновите sitemap и проверьте, не попали ли туда закрытые страницы.
- Если сайт большой, тестируйте правила сначала на одном типе страниц, а не на всём архиве сразу.
Для сайтов с большим количеством дублей и служебных страниц иногда удобнее сначала навести порядок в шаблонах и архивах, а уже потом управлять индексацией. Иначе вы просто прячете симптом, а не убираете причину.
Если нужен более широкий набор инструментов для чистки дублей, архивов и служебных URL, можно посмотреть в сторону Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wplog.ru&utm_medium=article&utm_campaign=kak-zapretit-indeksaciyu-otdelnyh-stranic-wordpress-bez-plaginov