Страницы внутреннего поиска WordPress часто попадают в индекс сами по себе: поисковый робот находит URL вида ?s=..., а дальше начинает собирать десятки и сотни дублей. Для небольшого сайта это выглядит как мусор в отчётах, для большого — ещё и как лишняя нагрузка на сервер, особенно если поиск открыт для всех и не ограничен по частоте.
Задача здесь не в том, чтобы «сломать» поиск, а в том, чтобы оставить его рабочим для пользователей и одновременно не отдавать такие страницы в индекс. Ниже — рабочие варианты: через noindex, через robots.txt и через доработку шаблона поиска.
Когда это действительно проблема
Сначала стоит убедиться, что речь именно о результатах поиска, а не о другом типе дублей. В WordPress поисковая выдача обычно живёт на URL с параметром s, например / ?s=seo или /page/2/?s=seo. Если такие страницы уже есть в индексе, вы увидите их в отчётах Google Search Console или Яндекс Вебмастера как страницы с низкой ценностью, дубли или URL с параметрами.
Диагностика проблемы
- Проверьте, индексируются ли URL с
?s=через поиск по сайту в поисковике. - Откройте несколько поисковых запросов и посмотрите исходный код страницы: есть ли
meta name="robots". - Посмотрите, не генерирует ли тема отдельный шаблон поиска с каноникалами на саму выдачу.
- Проверьте, не закрыт ли поиск только в
robots.txt: это не всегда убирает уже известные URL из индекса.
Если страницы уже попали в индекс, одного Disallow в robots.txt обычно недостаточно. Робот может перестать обходить URL, но сам адрес останется в индексе, если на него уже были ссылки или он был найден раньше.
Какой способ выбрать: noindex, robots.txt или код
Для внутреннего поиска лучше использовать noindex, follow на самих страницах выдачи. Это самый предсказуемый вариант: поисковик видит директиву прямо на странице и не должен включать её в индекс. robots.txt можно добавить как дополнительную меру, но не как единственную.
| Способ | Что делает | Плюс | Минус |
|---|---|---|---|
| meta robots noindex | Запрещает индексацию страницы | Работает на уровне страницы | Нужно внедрить в шаблон или через SEO-плагин |
| robots.txt | Запрещает обход | Просто добавить | Не гарантирует удаление уже проиндексированных URL |
| Каноникал на главную или архив | Подсказывает основной URL | Полезно для дублей | Для поиска часто спорно и не всегда уместно |
Пошаговое решение через код
Если у вас нет SEO-плагина или вы хотите контролировать поведение вручную, можно добавить noindex для страниц поиска через фильтр wp_robots. Это современный способ, который WordPress поддерживает штатно.
add_filter('wp_robots', function ($robots) {
if (is_search()) {
$robots['noindex'] = true;
$robots['nofollow'] = false;
}
return $robots;
});Этот код можно разместить в functions.php дочерней темы или в небольшом mu-plugin, если не хотите зависеть от темы. Для поиска это обычно достаточно: в HTML появится директива noindex, а ссылки внутри страницы останутся доступными для обхода.
Если нужен более жёсткий вариант
Иногда имеет смысл дополнительно закрыть поиск от индексации на уровне заголовка X-Robots-Tag. Это полезно, если тема или плагин переопределяют мета-теги в шаблоне. Но такой подход стоит использовать аккуратно: он должен срабатывать только на поисковых страницах.
add_action('template_redirect', function () {
if (is_search() && !headers_sent()) {
header('X-Robots-Tag: noindex, follow', true);
}
});Не дублируйте этот заголовок без необходимости, если уже есть корректный meta robots. Для большинства сайтов достаточно одного способа.
Как закрыть поиск через SEO-плагин
Если на сайте уже стоит SEO-плагин, проще использовать его настройки, чем писать код. В большинстве случаев у таких плагинов есть отдельные опции для архивов, пагинации и страниц поиска. Логика одна: найти раздел, связанный с индексированием, и отключить индексацию поисковых результатов.
Плюс этого пути в том, что не нужно править тему. Минус — после обновления плагина или смены настроек можно случайно вернуть индексацию обратно, поэтому проверка обязательна.
Что добавить в robots.txt, а что не стоит
robots.txt можно использовать как дополнительный барьер для обхода URL с параметром s, но не как единственное решение. Если вы всё же добавляете правило, делайте это точечно и не блокируйте весь сайт поиска, если он нужен пользователям.
User-agent: *
Disallow: /*?s=
Disallow: /search/Такое правило может сработать не у всех роботов одинаково, а для уже проиндексированных страниц оно не решает вопрос удаления из индекса. Поэтому сначала ставьте noindex, а потом уже при необходимости усиливайте ограничение через robots.txt.
Проверка результата после внедрения
После изменений не ограничивайтесь визуальной проверкой. Откройте страницу поиска и посмотрите исходный код: в блоке <head> должен быть noindex. Если используете заголовок, проверьте его через инструменты разработчика или curl.
curl -I "https://example.com/?s=test"Что должно быть видно:
- в HTML есть
meta name="robots" content="noindex,follow"или эквивалент; - поисковая страница открывается для пользователя;
- в Search Console/Вебмастере новые URL поиска перестают попадать в индекс;
- старые URL постепенно выпадают после переобхода.
Если у вас кэш-плагин, очистите кэш после правок. Иначе вы можете смотреть на старую версию страницы и ошибочно думать, что код не сработал.
Частые ошибки и как их исправить
Закрыли только в robots.txt
Это самая частая ошибка. Робот перестаёт обходить URL, но уже известная страница может оставаться в индексе. Исправление: добавьте noindex на саму страницу поиска.
Поставили noindex на все страницы сайта
Такое бывает, если фильтр написан без проверки is_search(). В результате сайт теряет видимость целиком. Исправление: ограничьте условие только поисковой выдачей и проверьте, что код не срабатывает на обычных страницах.
Оставили поиск доступным, но не ограничили нагрузку
Если на сайте много запросов, поиск может создавать лишние обращения к базе. В этом случае стоит смотреть не только на индексацию, но и на производительность: кэширование, ограничение частоты запросов, корректные индексы в базе, если поиск кастомный.
Не проверили тему и SEO-плагин одновременно
Иногда тема уже выводит свои мета-теги, а SEO-плагин добавляет вторые. В итоге получается конфликт или дублирование директив. Исправление: оставьте один источник управления robots-метками.
Практические советы по безопасности и производительности
Если внутренний поиск открыт для гостей, не давайте ему превращаться в точку для перебора запросов. Это не полноценная защита от атак, но базовая гигиена помогает: кэшируйте результаты, если это допустимо, и следите за логами на предмет странных запросов.
- Не закрывайте поиск полностью, если он нужен пользователям и по нему идут переходы.
- Не полагайтесь только на
robots.txtдля удаления уже известных URL. - После внедрения проверьте кэш, CDN и серверные заголовки.
- Если используете несколько SEO-инструментов, оставьте один источник для
noindex.
Для сайтов, где много технических дублей и мусорных URL, имеет смысл посмотреть в сторону комплексной чистки SEO-настроек и дублей. В таких задачах удобно использовать инструменты уровня Clearfy Pro, если вам нужен централизованный контроль над индексированием, архивами и служебными страницами: https://wpshop.ru/plugins/clearfy.