Как запретить индексацию поисковых страниц в WordPress без поломки внутреннего поиска

Поисковые страницы WordPress часто попадают в индекс как тонкие дубли: у них мало контента, они создают шум в отчётах и иногда конкурируют с нормальными посадочными страницами. При этом сам внутренний поиск должен продолжать работать для пользователей и для админки. Задача не в том, чтобы «сломать поиск», а в том, чтобы убрать из индекса именно страницы результатов.

Когда проблема уже видна в поиске и в логах

Сначала проверьте, действительно ли в индекс попали URL вида /search/... или ?s=.... Обычно это заметно по одному из сценариев:

  • в Google Search Console появляются страницы с параметром s;
  • в выдаче находятся результаты поиска по сайту вместо полезных страниц;
  • в логах много заходов на URL поиска от роботов, но почти нет пользовательской ценности;
  • в отчётах по дублям видны страницы с одинаковым шаблоном и разным поисковым запросом.

Важно не путать индексацию поисковых страниц с запретом на сам поиск. Если вы просто закроете все URL с s через серверный редирект или жёсткий Disallow, можно получить побочные эффекты: поисковая форма останется, но страницы результатов перестанут нормально обрабатываться для пользователей и для некоторых сценариев навигации.

Что именно нужно закрывать

В WordPress поиск обычно живёт в двух вариантах URL: стандартный параметр ?s=запрос и, если тема или плагин переписывает ссылки, человекопонятный путь. Для индексации опасны оба варианта, но решение лучше строить так, чтобы:

  • страница результатов поиска отдавалась пользователю как обычно;
  • роботы получали noindex,follow;
  • по возможности не создавались лишние дубли в sitemap и навигации;
  • внутренние ссылки на поиск не разрастались по всему сайту.

Пошаговое решение без плагина

1. Добавьте noindex на поисковые страницы

Самый надёжный вариант — вывести мета-тег robots только для страниц поиска. Это не мешает пользователю, но подсказывает поисковикам не индексировать такие страницы.

add_action('wp_head', function () {
    if (is_search()) {
        echo "<meta name=\"robots\" content=\"noindex,follow\" />\n";
    }
});

Если у вас уже стоит SEO-плагин, проверьте, не добавляет ли он свой robots-тег на поиск. Два разных тега с конфликтующими директивами — частая причина странного поведения в индексации.

2. Закройте поиск от индексации через robots.txt только как дополнительный слой

robots.txt полезен, но не заменяет noindex. Его задача — уменьшить обход мусорных URL, а не гарантировать удаление из индекса.

User-agent: *
Disallow: /?s=
Disallow: /search/

Этот вариант не универсален для всех серверов и схем URL, поэтому после правки обязательно проверьте, как именно формируется поиск у вас на сайте. Если поиск использует только параметр ?s=, строка Disallow: /search/ может быть лишней.

3. Уберите поисковые страницы из sitemap и внутренних ссылок

Поисковые результаты не должны попадать в карту сайта. Если они там есть, значит, SEO-плагин или кастомный код добавляет лишние URL. В этом случае нужно искать источник генерации sitemap, а не править карту вручную.

Также проверьте шаблоны: иногда в хедере, сайдбаре или хлебных крошках случайно выводится ссылка на страницу поиска с пустым запросом. Такие ссылки не нужны и только плодят дубли.

Если нужен более жёсткий контроль через wp_robots

Начиная с WordPress 5.7, можно использовать фильтр wp_robots. Это аккуратнее, чем печатать тег вручную, потому что WordPress сам соберёт корректный robots-атрибут.

add_filter('wp_robots', function (array $robots) {
    if (is_search()) {
        $robots['noindex'] = true;
        $robots['follow']  = true;
    }

    return $robots;
});

Этот способ удобен, если тема уже использует wp_robots и вы хотите не дублировать разметку в wp_head. Для большинства проектов это предпочтительнее ручного вывода.

Сравнение подходов

СпособЧто делаетПлюсыМинусы
SEO-плагинДаёт настройку noindex для search-страницБыстро, без кодаЗависит от плагина и его логики
Код через wp_robotsДобавляет noindex,follow только на поискТочно и прозрачноНужно править тему или mu-plugin
robots.txtОграничивает обходСнижает нагрузкуНе гарантирует удаление из индекса

Как проверить, что решение сработало

Проверка должна быть не на глаз, а по фактам. После внедрения сделайте три шага:

  1. Откройте страницу поиска в браузере и посмотрите исходный код: должен быть noindex,follow.
  2. Проверьте заголовки ответа через DevTools или curl -I, если у вас дополнительно настроен X-Robots-Tag.
  3. В Search Console отправьте проверку URL и посмотрите, как робот видит страницу поиска.

Пример проверки через консоль:

curl -I "https://example.com/?s=test"

Если вы используете SEO-плагин, убедитесь, что он не переопределяет ваши правила. Иногда проблема не в коде, а в том, что плагин выставляет index,follow для шаблона поиска по умолчанию.

Частые ошибки и как их исправить

Закрыли поиск в robots.txt, но страницы остались в индексе

Это ожидаемо. Disallow не удаляет уже проиндексированные URL. Добавьте noindex и дождитесь переобхода.

Поставили noindex на весь сайт

Такое случается, когда условие is_search() написано не там или сломана логика шаблона. Проверьте, что код выполняется только на страницах поиска, а не в wp_head без условий.

Сломали поиск редиректом

Если вы отправляете все URL с ?s= на главную, пользователь не получит результаты поиска. Редирект допустим только для пустого запроса или явно мусорных параметров, но не для нормального поиска.

Оставили поисковые URL в sitemap

Даже с noindex это лишний шум. Найдите источник генерации и исключите search-страницы на уровне плагина или фильтра.

Практические советы по безопасности и производительности

Если на сайте много поисковых запросов от ботов, имеет смысл дополнительно ограничить бесполезные обращения к поиску на уровне кеша и логики шаблона. Но не делайте это через агрессивные блокировки без диагностики: иногда поиск используют реальные пользователи, а не только роботы.

  • не выводите на странице поиска тяжёлые блоки, которые не помогают пользователю найти результат;
  • проверьте, не кэшируется ли страница поиска как обычная статическая страница;
  • если у вас есть фильтрация по нескольким параметрам, следите, чтобы поисковые URL не плодили комбинации дублей;
  • для крупных сайтов полезно ограничить длину поискового запроса и отбрасывать пустые значения.

Если нужен более широкий набор правок для дублей и технической чистки сайта, в некоторых проектах удобно сочетать ручной код с инструментами вроде Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wp-puzzle.ru&utm_medium=article&utm_campaign=kak-zapretit-indeksaciyu-poiskovykh-stranic-v-wordpress

Главный критерий успеха простой: поисковые страницы остаются рабочими для людей, но перестают быть отдельным индексируемым мусорным слоем. Если после правок в Search Console продолжают появляться старые URL, это обычно вопрос времени переобхода, а не признак того, что решение не работает.