Страницы внутреннего поиска в WordPress часто попадают в индекс не потому, что сайт «плохо настроен», а потому что поисковые URL легко обходятся роботами: у них предсказуемый шаблон, они генерируют много дублей и почти всегда содержат тонкий или пустой контент. Если не ограничить такие страницы, в индексе появляются десятки и сотни бесполезных URL вида ?s=..., а это уже лишний шум для краулинга и аналитики.
Ниже — практический сценарий: как закрыть страницы поиска от индексации, не ломая сам поиск для пользователей и не создавая конфликтов с кэшем, темой и SEO-плагином.
Когда проблема действительно есть
Сначала стоит убедиться, что речь именно о страницах поиска, а не о других параметрах URL. В WordPress стандартный поиск обычно выглядит так: /?s=текст. На некоторых темах и плагинах встречаются более сложные варианты, но логика одна: это динамическая страница с непредсказуемым набором результатов.
Проверить проблему можно по нескольким признакам:
- в Google Search Console в отчёте по страницам есть URL с параметром
s=; - в поиске по сайту через
site:example.ru inurl:?s=видны страницы поиска; - в логах сервера или аналитике заметно, что поисковые URL часто обходят боты;
- в выдаче появляются страницы с одинаковым заголовком, но разным запросом поиска.
Что обычно ломают при попытке исправить
Самая частая ошибка — просто добавить noindex в шаблон без проверки, как это влияет на кэш, каноникал и вывод результатов. Вторая ошибка — закрыть поиск через robots.txt и считать задачу решённой. Это не одно и то же: robots.txt мешает обходу, но не гарантирует удаление уже проиндексированных URL.
Если страницы уже в индексе, нужен именно noindex на самих страницах поиска, а не только запрет сканирования.
Какой способ выбрать: плагин, код или настройка темы
Для этой задачи есть три рабочих подхода. Выбор зависит от того, есть ли у вас SEO-плагин и насколько вы готовы править код темы или мини-плагина.
| Подход | Когда подходит | Плюс | Минус |
|---|---|---|---|
| SEO-плагин | Если уже используется Yoast SEO, Rank Math или аналог | Быстро, без правки темы | Нужно проверить, не конфликтует ли с шаблоном поиска |
| Код в теме/мини-плагине | Если нужен точечный контроль | Не зависит от интерфейса плагина | Нужно аккуратно обновлять и тестировать |
| robots.txt | Только как дополнительная мера | Снижает обход мусорных URL | Не убирает уже проиндексированные страницы |
Пошаговое решение через код
Если вам нужен предсказуемый результат без привязки к конкретному SEO-плагину, проще всего добавить noindex, follow для страниц поиска. Для WordPress это можно сделать через фильтр wp_robots, который поддерживается в современных версиях ядра.
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_search() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );Этот вариант хорош тем, что не трогает саму логику поиска. Пользователь по-прежнему получает результаты, а робот видит указание не индексировать страницу.
Если у вас старая тема или кастомный шаблон, стоит дополнительно проверить, что в <head> не выводится второй meta robots tag. Дублирование мета-тегов часто возникает, когда SEO-плагин и тема одновременно пытаются управлять индексированием.
Если нужен запрет только для URL с параметром s
Иногда на сайте есть отдельные страницы поиска, а иногда параметр s используется в других местах. Тогда лучше ограничить условие именно страницами поиска WordPress:
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_search() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );В большинстве случаев этого достаточно. Не стоит усложнять проверку через разбор $_GET, если у вас обычный поиск ядра WordPress.
Как сделать это через SEO-плагин
Если на сайте уже стоит SEO-плагин, лучше использовать его штатные настройки, а не городить отдельную логику. В Yoast SEO и Rank Math обычно можно задать noindex для архивов, результатов поиска и других служебных страниц. Названия пунктов могут отличаться в зависимости от версии, но смысл один: страницы поиска должны быть закрыты от индексации, а не от обхода.
Плюс этого пути в том, что плагин сам управляет мета-тегами и каноникалами. Минус — если тема выводит собственный meta name=