Как закрыть от индексации страницы поиска в WordPress через robots.txt и noindex

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

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

Какие страницы поиска реально нужно закрывать

В WordPress поиск может существовать в нескольких вариантах. Чаще всего это:

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

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

Диагностика: что именно попало в индекс

Перед правками проверьте, какие URL уже индексируются. Это можно сделать в Google Search Console, через поиск по сайту или по логам сервера. Ищите URL с параметром s=, а также страницы, которые возвращают пустую выдачу, но доступны для обхода.

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

Что смотреть в первую очередь

  • есть ли в индексе URL вида /?s=...;
  • открываются ли пустые результаты поиска с кодом 200 OK;
  • не закрыт ли поиск только в robots.txt без noindex;
  • не создаёт ли тема отдельный шаблон поиска с лишними параметрами.

Что выбрать: robots.txt, noindex или оба варианта

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

ПодходКогда уместенОграничение
robots.txtЧтобы не тратить crawl budget на поискНе убирает уже проиндексированные URL сам по себе
noindexЧтобы исключить страницу из индексаСтраница должна быть доступна для обхода
Оба вариантаКогда нужно и закрыть обход, и убрать индексированиеНужна аккуратная настройка, чтобы не закрыть лишнее

На практике для поиска WordPress чаще используют связку: noindex, follow на search-страницах и аккуратный Disallow только для технических URL, если они действительно не нужны поисковику.

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

Если не хотите ставить отдельный SEO-плагин только ради одной задачи, можно закрыть поиск через код темы или мини-плагин. Самый безопасный вариант — добавить метатег noindex, follow на страницы поиска.

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

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

Если нужно дополнительно закрыть обход технических search-URL в robots.txt, можно добавить правило через фильтр robots_txt:

<?php
add_filter( 'robots_txt', function ( $output, $public ) {
    $output .= "\nUser-agent: *\n";
    $output .= "Disallow: /?s=\n";
    $output .= "Disallow: /search/\n";
    return $output;
}, 10, 2 );

Но здесь есть нюанс: путь поиска зависит от темы и структуры сайта. Если у вас поиск работает только через параметр ?s=, правило Disallow: /search/ может быть лишним. Не копируйте оба правила без проверки.

Если используете SEO-плагин

Во многих проектах проще и надежнее управлять индексированием через SEO-плагин, если он уже стоит на сайте. Например, в Clearfy Pro есть инструменты для закрытия технических страниц и удаления дублей, если вам нужен централизованный контроль без правки шаблонов.

Плюс плагина в том, что вы не привязываетесь к теме. Минус — лишний слой настроек, который надо документировать, чтобы через полгода не искать, где именно включили noindex.

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

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

  1. Откройте страницу поиска в браузере и посмотрите исходный код: должен быть <meta name="robots" content="noindex, follow" />.
  2. Проверьте, не закрыли ли вы случайно важные страницы сайта в robots.txt.
  3. В Search Console отправьте страницу на повторный обход, если она уже была в индексе.
  4. Убедитесь, что поиск по сайту по-прежнему работает для пользователя.

Если хотите проверить быстро через консоль, можно посмотреть заголовки ответа:

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

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

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

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

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

Поставили noindex на все архивы по ошибке

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

Закрыли поиск, но оставили внутренние ссылки на пустые выдачи

Если форма поиска отправляет пользователя на бессмысленные запросы, это уже UX-проблема. Проверьте placeholder, автоподстановки и страницы с нулевым результатом. Иногда полезнее улучшить шаблон поиска, чем просто закрывать его от индексации.

Использовали несколько SEO-решений одновременно

Когда noindex ставит тема, SEO-плагин и еще отдельный сниппет в functions.php, результат становится непредсказуемым. Оставьте один источник правды: либо тема, либо плагин, либо мини-плагин.

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

Не редактируйте родительскую тему напрямую. Если решение вшито в functions.php, используйте дочернюю тему или небольшой mu-plugin. Так вы не потеряете правки после обновления.

Если сайт большой, не закрывайте от индексации всё подряд в надежде «почистить SEO». Сначала проверьте, какие URL реально создают мусор и расходуют обход. Иногда достаточно закрыть только внутренний поиск, а не трогать архивы или теги.

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

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

⭐⭐⭐⭐⭐