Внутренний поиск WordPress часто оставляет в индексе страницы вида / ?s=.... На небольшом сайте это может выглядеть безобидно, но на практике такие URL быстро плодят мусор: дубли, пустые выдачи, тонкие страницы и лишнюю нагрузку на обход. При этом сам поиск должен продолжать работать для пользователей и не ломать навигацию по сайту.
Ниже — рабочие способы закрыть именно страницы поисковой выдачи, а не весь поиск целиком. Это важно: если поставить грубый запрет не туда, можно случайно сломать внутренний поиск, фильтры или страницы, которые завязаны на параметр s.
Когда проблема действительно есть
Сначала проверьте, что в индексе или в обходе поисковиков вообще присутствуют страницы поиска. Обычно это видно по одному из признаков:
- в Google Search Console появляются URL с параметром
?s=; - в логах сервера есть частые запросы к поиску с пустыми или однословными запросами;
- в выдаче поисковика находятся страницы вида
site:example.com ?s=; - поисковый робот тратит время на бессмысленные результаты поиска вместо полезных страниц.
Ещё один практический сигнал — если на сайте много внутренних ссылок на поиск, например из шаблона, виджетов или хлебных крошек. Тогда робот легко находит такие URL и начинает их обходить.
Что именно закрывать
Нужно различать три сценария:
- страница поиска как HTML-результат — её обычно закрывают от индексации;
- сам функционал поиска — его не трогают;
- параметры фильтрации — если они есть, их закрывают отдельно и аккуратно.
Если задача именно в индексации, а не в работе поиска, то правильнее использовать noindex для страниц результатов и не запрещать сам путь поиска в robots.txt без необходимости.
Что выбрать: robots.txt, noindex или код
Для WordPress есть несколько подходов, и у каждого свой компромисс. Коротко сравнение:
| Способ | Что делает | Плюсы | Минусы |
|---|---|---|---|
noindex в HTML | Просит поисковик не индексировать страницу | Не ломает поиск, гибко | Нужно убедиться, что тег реально выводится |
robots.txt | Ограничивает обход | Просто добавить | Не гарантирует удаление из индекса, если URL уже известен |
| Код в теме/плагине | Точечная логика для поиска | Контроль без лишних плагинов | Нужно аккуратно тестировать |
Если страница уже попала в индекс, одного robots.txt часто недостаточно. Поисковик может оставить URL в индексе без контента. Для удаления из выдачи обычно нужен именно noindex и последующий обход страницы роботом.
Пошаговое решение через код
Самый предсказуемый вариант — добавить noindex, follow только для страниц поиска. Это можно сделать в дочерней теме или в небольшом функциональном плагине. Если у вас уже стоит SEO-плагин, сначала проверьте, не делает ли он это сам, чтобы не получить дублирующиеся мета-теги.
Вариант для wp_head
Этот способ подходит, если вы хотите управлять логикой без зависимости от SEO-плагина. Код выводит мета-тег только на страницах поисковой выдачи:
<?php
add_action( 'wp_head', function () {
if ( is_search() ) {
echo '<meta name="robots" content="noindex, follow" />' . "\n";
}
}, 1 );Здесь важно, что используется is_search(). Это штатная функция WordPress, она срабатывает именно на страницах результатов поиска. Не нужно проверять вручную $_GET['s'], если нет особой причины: штатная условная логика надёжнее и понятнее.
Если нужно закрыть только пустой поиск
Иногда индексируется не вся поисковая выдача, а только пустые запросы или мусорные переходы. Тогда можно закрывать только пустой поиск, а нормальные результаты оставлять доступными для обхода. Такой сценарий встречается реже, но он полезен на сайтах с большим количеством контента.
<?php
add_action( 'wp_head', function () {
if ( is_search() && '' === trim( get_search_query( false ) ) ) {
echo '<meta name="robots" content="noindex, follow" />' . "\n";
}
}, 1 );Этот вариант стоит применять только если вы понимаете, зачем оставляете часть поисковых страниц открытыми. Для большинства сайтов проще и безопаснее закрыть всю поисковую выдачу.
Если используете SEO-плагин
Во многих случаях удобнее не писать код, а настроить правило в SEO-плагине. Но здесь есть типичная ошибка: люди включают noindex и одновременно закрывают URL в robots.txt. В результате поисковик может не увидеть мета-тег и не понять, что страницу нужно убрать из индекса.
Проверьте, умеет ли ваш SEO-плагин задавать noindex для поисковых страниц отдельно. Если умеет — это нормальный путь, особенно если в проекте уже есть единая SEO-логика. Если не умеет, лучше добавить небольшой код, чем городить костыли через редиректы.
Если вы используете Clearfy Pro, у него есть инструменты для чистки технических страниц и управления дублями. Но даже в этом случае проверьте итоговый HTML и не полагайтесь только на галочку в интерфейсе: на разных темах и связках плагинов результат может отличаться.
Что делать с robots.txt
robots.txt можно использовать как дополнительный слой, но не как единственный механизм. Если вы всё же хотите ограничить обход поисковых страниц, делайте это аккуратно. Пример:
User-agent: *
Disallow: /?s=
Disallow: /search/Этот вариант подходит не для всех конфигураций. На некоторых сайтах поиск работает через красивый URL, на других — через параметр s. Перед правкой посмотрите, какой именно адрес генерирует ваша тема или плагин поиска. Если путь нестандартный, не копируйте правило вслепую.
И ещё момент: robots.txt не удаляет уже проиндексированные страницы. Он только ограничивает обход. Поэтому для уже существующего мусора сначала нужен noindex, а потом — переобход через Search Console.
Проверка результата после внедрения
После правки не ограничивайтесь визуальной проверкой страницы. Нужно убедиться, что поисковик видит именно то, что вы задумали.
- Откройте страницу поиска в браузере и посмотрите исходный код: должен быть
<meta name="robots" content="noindex, follow" />. - Проверьте, что обычный поиск на сайте всё ещё работает и выдаёт результаты.
- В Search Console отправьте URL на проверку и посмотрите, как робот считывает страницу.
- Если URL уже был в индексе, дождитесь повторного обхода или запросите переобход вручную.
Для быстрой локальной проверки можно использовать curl:
curl -I https://example.com/?s=testНо заголовки сами по себе не всегда покажут noindex, потому что он обычно выводится в HTML. Поэтому полезнее смотреть именно содержимое страницы, а не только ответ сервера.
Частые ошибки и как их исправить
Закрыли поиск в robots.txt, но не добавили noindex
Это самая частая проблема. URL остаётся в индексе, потому что поисковик уже знает о нём, но не может нормально переобойти страницу и увидеть запрет. Исправление простое: верните доступ для обхода и добавьте noindex в HTML.
Поставили noindex на все страницы сайта
Такое бывает, когда условие написано слишком широко, например без проверки is_search(). В итоге поисковик перестаёт индексировать вообще всё. Проверьте, где именно подключён код, и сузьте условие до поисковой выдачи.
Сделали редирект с поиска на главную
Это плохая идея для обычного поиска. Пользователь вводит запрос, а попадает на главную без контекста. Поисковики тоже получают странный сигнал. Если нужно убрать мусорные запросы, лучше закрывать их от индексации, а не подменять ответ редиректом.
Дублирующийся meta robots
Если SEO-плагин уже выводит noindex, а вы добавили ещё один тег вручную, может получиться конфликт или просто лишний шум в коде. Оставьте один источник правды: либо плагин, либо ваш код.
Практические советы по безопасности и производительности
Поисковые страницы сами по себе не являются уязвимостью, но они часто создают лишнюю нагрузку. На больших сайтах это заметно по логам и по количеству бесполезных запросов к базе. Если поиск тяжёлый, имеет смысл дополнительно:
- ограничить индексацию только полезных страниц;
- не генерировать ссылки на пустые поисковые запросы;
- проверить, не кешируется ли поисковая выдача слишком агрессивно;
- убрать из шаблонов автоматические ссылки на поиск, если они не нужны пользователю.
Если у вас есть возможность управлять логикой в теме, лучше держать решение в одном маленьком файле, чем размазывать его по нескольким плагинам. Так проще отлаживать и переносить сайт между окружениями.
Короткий рабочий чек-лист
- Проверить, какие URL поиска реально генерирует сайт.
- Убедиться, что поисковая выдача не нужна в индексе.
- Добавить
noindex, followтолько дляis_search(). - Не закрывать поиск только через
robots.txt. - Проверить исходный код страницы и Search Console.
- Убедиться, что обычный поиск на сайте не сломан.
Если нужен более широкий порядок в технических страницах и дублях, иногда удобнее собрать это в один набор настроек через Clearfy Pro: он помогает убрать часть мусорных URL и не держать всё на ручных правках. Но даже в таком случае финальную проверку HTML и индексации лучше делать вручную — это единственный способ понять, что правило сработало именно на вашем сайте.