Внутренний поиск в WordPress часто создаёт страницы, которые не должны попадать в индекс: URL вида ?s=, пустые результаты, страницы с мусорными запросами и дубли с параметрами. Если оставить их как есть, поисковики тратят обход на бесполезные адреса, а в отчётах появляются сотни малоценных страниц.
Задача здесь не в том, чтобы «сломать поиск», а в том, чтобы:
- оставить поиск рабочим для посетителей;
- закрыть его результаты от индексации;
- не плодить дубли из-за параметров и пустых запросов;
- не создавать лишнюю нагрузку на сайт.
Когда проблема уже есть
Обычно её видно не сразу. Сначала в индексе появляются адреса поиска, потом в Search Console растёт число страниц с параметрами, а в логах заметно, что боты регулярно ходят по запросам, которые не несут ценности. На небольшом сайте это может быть незаметно, но на контентном проекте такие страницы быстро разрастаются.
Что проверить в первую очередь
- есть ли в индексе URL с
?s=; - открываются ли страницы поиска по пустому запросу;
- не генерируются ли отдельные URL для сортировки, фильтров или пагинации поиска;
- не стоит ли у темы или плагина лишний
noindexна всех страницах подряд.
Если поиск нужен только как инструмент для пользователей, а не как посадочная страница, его результаты почти всегда лучше закрывать от индексации.
Как закрыть страницы поиска от индексации
Есть три рабочих подхода: через SEO-плагин, через код темы или плагина, и через серверные правила для отдельных сценариев. Для WordPress чаще всего достаточно корректного noindex и запрета индексации в robots.txt не требуется.
| Подход | Когда подходит | Минус |
|---|---|---|
| SEO-плагин | Если уже используется Yoast SEO, Rank Math или аналог | Не всегда удобно тонко настроить пустые запросы и нестандартные шаблоны |
| Код в теме/плагине | Если нужен точный контроль над поиском | Нужно следить за обновлениями и тестировать после правок |
| Серверные правила | Для отдельных URL и редких случаев | Легко ошибиться и случайно закрыть лишнее |
Вариант через код: добавить noindex для страниц поиска
Если у вас нет SEO-плагина или нужно поведение, которое не покрывается настройками, можно добавить noindex, follow для результатов поиска. Код лучше размещать в мини-плагине или в functions.php дочерней темы.
add_action( 'wp_head', function () {
if ( is_search() ) {
echo "<meta name=\"robots\" content=\"noindex,follow\" />\n";
}
} );Этот вариант закрывает именно страницы поиска. Пользовательский поиск продолжит работать, а поисковик получит сигнал не индексировать такие URL, но переходить по ссылкам внутри страницы можно.
Если нужно убрать ещё и пустые запросы
Пустой поиск — отдельная история. Иногда тема или плагин выводят страницу результатов даже без запроса, и такая страница почти всегда бесполезна. В этом случае лучше отдавать 404 или редиректить на главную/страницу поиска с сообщением, в зависимости от логики проекта.
add_action( 'template_redirect', function () {
if ( is_search() && ! get_search_query() ) {
wp_safe_redirect( home_url( '/' ), 302 );
exit;
}
} );Редирект здесь уместен не всегда. Если у вас есть отдельная страница поиска с формой и объяснением, лучше оставить её доступной, но без индексации. Если же пустой запрос возникает только из-за кривой ссылки или бота, редирект помогает быстро убрать мусор.
Диагностика: почему поисковик всё равно видит эти URL
Даже после добавления noindex страницы поиска могут продолжать появляться в отчётах. Это не всегда ошибка. Поисковик может ещё не переобойти страницы, а старые URL какое-то время будут висеть в индексе или в статусе «обнаружено, не проиндексировано».
Проверьте три вещи:
- в исходном коде страницы поиска действительно есть
<meta name="robots" content="noindex,follow" />; - нет ли HTTP-заголовка
X-Robots-Tag, который переопределяет мета-тег; - не закрывает ли кэш старую версию страницы без мета-тега.
Если используется кэш-плагин или серверный кэш, после изменения шаблона нужно очистить кэш полностью: страницу, объектный кэш, CDN, если он есть.
Как проверить заголовки и код страницы
Самый практичный способ — посмотреть HTML и заголовки ответа. В браузере откройте страницу поиска, затем проверьте исходный код. Для заголовков удобно использовать curl:
curl -I