Страницы внутреннего поиска в WordPress часто попадают в индекс не потому, что это полезные посадочные, а потому что поисковик видит их как обычные URL с параметром ?s=. В итоге в отчётах появляются тонкие страницы без ценности, а в индексе — десятки вариантов одного и того же поиска. При этом полностью ломать поиск не нужно: пользователю он нужен, а вот роботам — не всегда.
Ниже разберём практический сценарий: когда закрывать страницы поиска от индексации, как сделать это без конфликтов с темой и плагинами, и как проверить, что решение действительно сработало.
Когда страницы поиска становятся проблемой
Сам по себе поиск не вреден. Проблема начинается, когда сайт генерирует много URL вида / ?s=запрос, а поисковик начинает обходить их как отдельные страницы. Это особенно заметно на сайтах с большим количеством контента, где пользователи ищут по коротким или часто повторяющимся запросам.
Типичные признаки:
- в индексе появляются страницы поиска с пустым или почти пустым сниппетом;
- в отчётах по обходу растёт число URL с параметром
s; - в Search Console видны страницы с низкой ценностью и одинаковой структурой;
- поиск создаёт дубли, если тема или плагин формируют отдельные шаблоны результатов.
Что именно нужно закрывать
Чаще всего речь идёт не о самом поиске как функции, а о страницах результатов поиска. Пользователь должен продолжать искать, но роботам не нужно индексировать каждую выдачу по отдельному запросу. Если у вас есть отдельная страница с формой поиска, её можно оставить открытой, а вот результаты — закрыть от индексации.
Диагностика: как понять, что проблема уже есть
Сначала проверьте, как сайт отдаёт результаты поиска. Откройте несколько запросов вручную и посмотрите исходный код страницы. Если там уже есть noindex, возможно, проблема решена частично. Если нет — нужно понять, кто отвечает за мета-теги: тема, SEO-плагин или кастомный код.
Полезно проверить три вещи:
- какой URL формируется у поиска:
/?s=...,/search/...или другой вариант; - есть ли в HTML тег
<meta name="robots" content="noindex,follow">; - не добавляет ли канонический URL страницу поиска на главную или на саму выдачу без смысла.
Если у вас установлен SEO-плагин, сначала посмотрите его настройки. Иногда он уже умеет закрывать поиск от индексации, и тогда дополнительный код только создаст конфликт.
Пошаговое решение через код
Если нужен контролируемый вариант без лишних зависимостей, добавьте noindex,follow для страниц поиска. Это сохраняет переход по ссылкам внутри выдачи, но просит поисковики не индексировать саму страницу результатов.
Самый безопасный способ — через фильтр wp_robots. Он работает в современных версиях WordPress и не требует правки шаблонов.
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_search() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );Если тема или плагин уже выводят robots-мета через старый механизм, можно дополнительно проверить, не дублируется ли тег. Два разных robots-тега в одной странице — частая причина странного поведения в индексации.
Когда этого недостаточно
Иногда поисковик всё равно продолжает обходить URL, потому что они доступны по внутренним ссылкам, из sitemap или из истории обхода. В таком случае имеет смысл добавить ещё и заголовок X-Robots-Tag на уровне сервера, если у вас есть доступ к конфигурации. Но это уже нужно делать аккуратно: не на весь сайт, а только на поисковые страницы.
Для Apache это обычно решают через mod_headers и условие по query string. Пример ниже — ориентир, а не готовый шаблон для копипаста без проверки на вашем сервере:
<IfModule mod_headers.c>
<If "%{QUERY_STRING} =~ /(^|&)s=/">
Header set X-Robots-Tag "noindex, follow"
</If>
</IfModule>Если вы не уверены в синтаксисе Apache или используете Nginx, лучше ограничиться WordPress-уровнем и SEO-плагином, чем вносить правила в серверную конфигурацию наугад.
Что выбрать: плагин, код или серверное правило
Для большинства сайтов достаточно одного корректного способа. Ниже — практическое сравнение.
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| SEO-плагин | Если уже используется Yoast, Rank Math или аналог | Быстро, без кода, удобно для редактора | Может конфликтовать с темой или другим SEO-слоем |
Код через wp_robots | Нужен точечный контроль | Прозрачно, без лишних зависимостей | Требует аккуратного размещения в теме или mu-plugin |
| Серверное правило | Нужна защита на уровне ответа | Работает независимо от WordPress | Сложнее тестировать, легко ошибиться в конфиге |
Если у вас уже есть Clearfy Pro, там есть инструменты для технической чистки и управления SEO-элементами сайта. В таком случае имеет смысл сначала проверить, не закрывает ли он поиск от индексации штатно, чтобы не дублировать логику кодом. Ссылка на продукт: Clearfy Pro.
Проверка результата после внедрения
После изменения не ограничивайтесь просмотром страницы в браузере. Нужно проверить именно то, что видит робот.
- Откройте страницу поиска и посмотрите исходный код: должен быть
noindex,follow. - Проверьте, не появился ли второй тег robots из SEO-плагина.
- Убедитесь, что ссылки внутри выдачи по-прежнему доступны для обхода.
- Проверьте заголовки ответа, если добавляли серверное правило.
- Через Search Console отправьте URL на повторную проверку, если страница уже была в индексе.
Для быстрой локальной проверки удобно использовать curl:
curl -I "https://example.com/?s=тест"Если вы настраивали X-Robots-Tag, он должен быть виден в заголовках ответа. Если работали только через HTML, заголовок может не меняться — это нормально.
Частые ошибки и как их исправить
Закрыли не выдачу, а весь поиск
Иногда разработчик ставит noindex на шаблон поиска и одновременно ломает переходы по ссылкам или форму. Пользовательский поиск должен работать. Закрывать нужно индексацию, а не функциональность.
Получился конфликт с SEO-плагином
Если плагин уже добавляет свои robots-правила, а вы сверху добавили ещё один фильтр, в коде может появиться дублирование или противоречие. В такой ситуации оставьте один источник правды: либо настройки плагина, либо кастомный код.
Правило применили ко всем страницам
Ошибка встречается, когда условие написано слишком широко. Например, вместо is_search() используют общий фильтр без проверки контекста. В результате noindex получает весь сайт или лишние типы страниц.
Оставили в sitemap URL поиска
Если поисковые URL каким-то образом попали в карту сайта, их нужно убрать. Страницы поиска не должны быть в sitemap, иначе вы сами подсказываете поисковику, что их надо обходить.
Практические советы по безопасности и производительности
Не храните такой код в functions.php активной темы, если тема часто обновляется или меняется. Лучше использовать дочернюю тему или небольшой mu-plugin, чтобы правило не исчезло после обновления.
Если сайт большой и поиск генерирует много запросов, посмотрите ещё и на нагрузку. Внутренний поиск WordPress на слабом хостинге может быть тяжёлым, особенно если пользователи ищут по длинным фразам. Но это уже отдельная задача: оптимизация самого поиска, а не только индексации.
Хорошая практика — держать технические правила рядом с документацией проекта: что закрыто, почему закрыто и где это реализовано. Тогда при смене SEO-плагина или темы вы не потеряете логику и не начнёте искать причину дублей заново.
Если нужен более широкий набор технических настроек для чистки сайта, индексации и SEO-правил, можно посмотреть и на инструменты уровня Clearfy Pro: https://wpshop.ru/plugins/clearfy.