Как закрыть от индексации страницы поисковой выдачи WordPress: robots, meta robots и код

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

Когда проблема действительно в индексации поиска

Сначала проверьте, что в индексе именно страницы поиска, а не обычные архивы или фильтры. Типичный признак — URL с параметром s в отчёте по страницам или в логах обхода. Если сайт небольшой, такие страницы можно найти вручную через поиск по сайту в Google с оператором site:example.com inurl:?s=. Если страниц много, смотрите отчёт «Страницы» в Google Search Console и фильтруйте по шаблону URL.

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

Обычно речь идёт о трёх сценариях:

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

Не стоит закрывать весь сайт через robots.txt только потому, что на нём есть поиск. Это грубый способ, который легко зацепит нужные разделы и не решит вопрос с уже проиндексированными URL.

Диагностика: почему robots.txt не всегда достаточно

Если вы просто добавите Disallow: /*?s=, поисковый робот перестанет обходить такие URL, но это не гарантирует их исчезновение из индекса. Если на них уже есть внешние или внутренние ссылки, поисковик может продолжать хранить их как известные страницы без содержимого. Для чистого результата обычно нужен не один, а несколько уровней защиты: ограничение обхода, noindex для самих страниц и отсутствие ссылок на мусорные варианты.

Ещё одна частая ошибка — закрыть поиск в robots.txt, но оставить в шаблоне заголовок с индексируемым <title> и без noindex. Тогда URL может оставаться в индексе дольше, чем ожидается.

Рабочая схема: robots.txt, meta robots и каноникал

Лучше всего закрывать страницы поиска на уровне вывода HTML, а robots.txt использовать как дополнительный барьер. Для WordPress это можно сделать без плагина, если у вас есть доступ к теме или небольшому mu-plugin.

1. Ограничьте обход в robots.txt

Добавьте правило для параметра поиска. Это не финальное решение, а только первый слой.

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

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

2. Поставьте noindex, follow на страницы поиска

Для WordPress удобнее всего добавить метатег через хук wp_head. Так вы не трогаете обычные страницы и закрываете только результаты поиска.

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

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

3. Добавьте канонический URL на главную или на сам поиск, если это оправдано

Для большинства сайтов поисковая выдача не должна иметь собственный каноникал, который указывает на саму себя. Если страница поиска не нужна для индексации, достаточно noindex. Но если тема или SEO-плагин ставит странный canonical на поисковые URL, это стоит проверить и при необходимости переопределить.

<?php
add_filter( 'get_canonical_url', function ( $canonical, $post ) {
    if ( is_search() ) {
        return home_url( '/' );
    }
    return $canonical;
}, 10, 2 );

Используйте этот приём осторожно. На некоторых сайтах лучше вообще не вмешиваться в canonical для поиска и ограничиться noindex. Если у вас уже стоит SEO-плагин, сначала посмотрите его настройки, чтобы не получить конфликт фильтров.

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

СпособЧто делаетПлюсыМинусы
robots.txtОграничивает обходПросто внедрить, снижает лишний crawlНе гарантирует удаление из индекса
meta robots noindexЗапрещает индексацию страницыТочный контроль на уровне HTMLНужно дождаться повторного обхода
SEO-плагинДаёт настройку без кодаУдобно для редакторовИногда создаёт дубли настроек и лишнюю нагрузку

Если у вас уже используется SEO-плагин, проверьте, умеет ли он отдельно закрывать архивы поиска. Но не включайте одновременно несколько механизмов, которые делают одно и то же.

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

  1. Проверьте, как выглядит URL поиска на вашем сайте.
  2. Добавьте правило в robots.txt для параметра s.
  3. Вставьте noindex,follow через wp_head только для is_search().
  4. Очистите кеш страницы и объектный кеш, если он есть.
  5. Переобойдите URL в Search Console через проверку страницы.

Если у вас включён серверный кеш, убедитесь, что он не отдаёт старую версию страницы поиска без метатега. После правки иногда нужно сбросить не только плагин кеша, но и кеш на уровне хостинга или CDN.

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

Проверка должна быть не только визуальной. Откройте страницу поиска в браузере и посмотрите исходный код: в <head> должен быть noindex,follow. Затем проверьте HTTP-ответ и убедитесь, что страница отдается как обычная HTML-страница, а не редиректится на другой URL без причины.

Дальше используйте Search Console:

  • проверьте URL через инструмент проверки;
  • посмотрите, видит ли Google тег noindex;
  • отслеживайте, уменьшается ли число проиндексированных URL с параметром s.

Если страница всё ещё в индексе, это не всегда ошибка. Поисковику нужно время, чтобы переобойти URL и обновить статус.

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

Закрыли поиск только в robots.txt

Это самая частая проблема. Робот перестаёт обходить URL, но старые записи могут оставаться в индексе. Добавьте noindex на саму страницу поиска.

Поставили noindex на все страницы сайта

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

SEO-плагин и тема выводят два разных canonical

В исходнике должен быть один канонический URL. Если их два, отключите дублирующую настройку в теме или плагине и оставьте один источник правды.

Кеш мешает увидеть изменения

После внедрения правки очистите страницу, объектный кеш и CDN. Иначе вы будете проверять старую версию HTML и решите, что код не работает.

Безопасность и производительность

Сам по себе код для закрытия поиска лёгкий, но важно не плодить лишние фильтры в functions.php. Если правка нужна надолго, лучше вынести её в небольшой mu-plugin или в отдельный файл, который не потеряется при обновлении темы. Это особенно полезно на сайтах, где тема часто меняется.

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

Для сайтов с большим количеством поисковых запросов полезно ещё и сократить внутренние ссылки на страницы поиска. Не выводите их в меню, не ставьте в блоки рекомендаций и не генерируйте sitemap для таких URL. Поисковику там обычно нечего индексировать.

Если нужен минимальный готовый вариант

Для большинства проектов достаточно такого набора: Disallow в robots.txt и noindex,follow на страницах поиска. Это не ломает поиск для пользователей и даёт поисковикам понятный сигнал, что индексировать такие страницы не нужно.

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

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

Как добавить уникальное поле в метабокс WordPress с проверкой уникальности
23.09.2026
Как отключить XML-RPC в WordPress без поломки Jetpack и внешних сервисов
25.09.2026
WordPress: как удалить или изменить shortcode без плагинов
20.09.2026
Как добавить поддержку формата WebP в WordPress без плагинов
01.10.2026
Как отключить от индексации страницу автора в WordPress без лишних дублей
23.08.2026