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

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

Ниже — практический разбор, как закрыть такие страницы от индексации без лишних побочных эффектов и как проверить, что всё действительно сработало.

Когда проблема уже есть: как её диагностировать

Сначала убедитесь, что в индекс попали именно поисковые страницы, а не обычные записи или архивы. Самый простой способ — посмотреть отчёт по страницам в Google Search Console и отфильтровать URL с параметром ?s=. Если у вас есть доступ к логам сервера, можно увидеть и обход таких адресов ботами.

Типичные признаки:

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

Важно не путать индексацию поисковых страниц с индексацией результатов фильтров в каталоге или архивов таксономий. Для них стратегия может быть другой.

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

В WordPress внутренний поиск обычно живёт на URL с параметром s. Например:

https://example.com/?s=seo

Если тема или плагин переписывают поиск в человеко-понятный URL, логика та же: нужно закрыть именно страницы результатов поиска, а не форму поиска и не страницу, где она размещена.

Что не стоит делать

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

Также не стоит просто ставить noindex на все страницы шаблона без проверки, если на этом же шаблоне отображаются не только результаты поиска, но и другие важные элементы.

Пошаговое решение: закрываем поиск от индексации

Самый надёжный вариант — отдать поисковым страницам мета-тег noindex,follow. Тогда страница не будет индексироваться, но робот сможет пройти по ссылкам внутри неё, если они есть.

Добавьте код в functions.php дочерней темы или в небольшой mu-plugin.

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

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

Для более жёсткого варианта можно отправлять заголовок X-Robots-Tag. Это полезно, если шаблон поиска генерируется не только HTML-страницей, но и другими ответами, где мета-тег не поможет.

<?php
add_action('template_redirect', function () {
    if (is_search() && !headers_sent()) {
        header('X-Robots-Tag: noindex, follow', true);
    }
});

Обычно достаточно одного способа. Если вы уже добавили noindex в <head>, не спешите дублировать его заголовком без необходимости.

Если нужен не только noindex, но и защита от мусорных запросов

Иногда проблема не в индексации, а в том, что поиском злоупотребляют боты или пользователи отправляют пустые запросы. Тогда имеет смысл дополнительно ограничить поведение формы поиска.

Например, можно не показывать результаты для слишком коротких запросов и возвращать 404, если запрос пустой. Делать это нужно аккуратно, чтобы не сломать UX.

<?php
add_action('template_redirect', function () {
    if (!is_search()) {
        return;
    }

    $query = trim((string) get_search_query(false));

    if ($query === '' || mb_strlen($query) < 2) {
        global $wp_query;
        $wp_query->set_404();
        status_header(404);
        nocache_headers();
        include get_query_template('404');
        exit;
    }
});

Этот вариант уместен только если на сайте нет сценария, где пустой поиск должен показывать каталог или подборку. Для обычного блога это чаще всего нормально, для сложного каталога — уже нет.

Сравнение подходов: плагин, код, robots.txt

ПодходКогда подходитПлюсыМинусы
SEO-плагинЕсли уже используется и умеет управлять robots metaБыстро, без кодаНужно проверить, не конфликтует ли с темой
Код в теме / mu-pluginЕсли нужен точечный контроль над is_search()Прозрачно и предсказуемоТребует аккуратного теста после обновлений
robots.txtРедко, только для технических ограничений обходаПросто добавить правилоНе решает проблему индексации надёжно

Если у вас уже стоит плагин для SEO, сначала проверьте его настройки. В ряде случаев проще включить noindex для страниц поиска в интерфейсе плагина, чем поддерживать отдельный код.

Проверка результата после внедрения

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

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

Пример проверки заголовков:

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

В ответе вы должны увидеть либо заголовок X-Robots-Tag: noindex, follow, либо убедиться, что в HTML есть корректный meta robots. Если этого нет, значит код не сработал или выполняется не там, где нужно.

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

Ставят noindex не на поиск, а на весь шаблон

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

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

Закрывают поиск через robots.txt и ждут удаления из индекса

Disallow мешает обходу, но не гарантирует удаление уже известных URL. Если страница уже в индексе, нужен noindex или удаление через инструменты поисковой системы.

Оставляют дубли с разными параметрами

Иногда поиск генерирует URL с дополнительными параметрами сортировки, фильтрации или пагинации. Если закрыт только ?s=, а остальные варианты открыты, дубли останутся.

Проверьте, какие именно URL создаёт ваша тема или плагин поиска, и закройте все технически одинаковые варианты.

Не проверяют конфликт с SEO-плагином

Если SEO-плагин уже управляет robots meta, ваш код может не дать ожидаемого результата или будет перебит настройками плагина. Сначала найдите источник тега в исходном коде, потом меняйте логику.

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

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

  • ограничение слишком коротких запросов;
  • кэширование результатов поиска на уровне объекта или страницы, если это допустимо;
  • отсечение пустых и мусорных запросов;
  • контроль логов на всплески обращений к ?s=.

Если нужен более широкий контроль над дублями, техническими страницами и индексацией, в экосистеме WPShop есть Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином полезно понимать, какие именно URL он закрывает и как это отражается в HTML.

В итоге рабочая схема обычно выглядит так: найти все варианты поисковых URL, закрыть их от индексации через noindex или заголовок, проверить ответ сервера и убедиться, что в Search Console новые поисковые страницы перестали появляться как отдельные документы.

Как создать собственный виджет в WordPress: подробное руководство с примерами
22.11.2025
Как сделать отложенный запуск cron задач в WordPress
10.02.2026
Автоматизация обновлений WordPress с WPengine: настройка и примеры
14.12.2025
Автоматизация отключения неиспользуемых плагинов в WordPress на WPengine
26.01.2026
Как использовать хуки и фильтры в WordPress для кастомизации сайта
18.11.2025