Страницы внутреннего поиска в WordPress часто попадают в индекс не потому, что сайт «плохо настроен», а потому что поисковый робот видит обычные URL с параметрами и начинает обходить их как отдельные страницы. На небольшом сайте это обычно незаметно. На контентном проекте или каталоге публикаций такие URL быстро превращаются в мусорные дубли: разные запросы, пустые выдачи, страницы с тонким контентом и одинаковыми шаблонами.
Задача здесь не в том, чтобы «сломать поиск», а в том, чтобы оставить его рабочим для пользователей и одновременно убрать поисковые URL из индекса. Ниже — рабочая схема для WordPress: что проверить, чем закрывать, как не испортить SEO и как убедиться, что всё действительно сработало.
Когда страницы поиска становятся проблемой
Типичный сценарий выглядит так: в поисковой системе появляются URL вида /?s=..., /search/... или адреса с параметрами фильтрации, которые ведут на результаты поиска. Иногда это не один URL, а целая группа страниц с одинаковым шаблоном и разным запросом. Для робота это отдельные документы, хотя для пользователя это просто служебная выдача.
Проблема усиливается, если:
- поиск открыт для индексации и отдаёт
200 OKдаже на пустые или бессмысленные запросы; - в теме или плагине поиск оформлен как обычная страница с заголовком, хлебными крошками и текстом;
- поисковые URL попадают во внутренние ссылки, карту сайта или блоки «похожие запросы»;
- на сайте есть фильтры, которые генерируют много похожих адресов.
Что именно нужно закрывать
Не стоит закрывать саму функцию поиска. Пользователь должен продолжать искать по сайту. Закрывать нужно именно страницы результатов поиска как индексируемые документы. Это можно сделать несколькими способами: через noindex, через X-Robots-Tag на уровне ответа, через правила плагина SEO или через код в теме/плагине.
Если у вас уже есть статья про дубли страниц, не путайте её с этой задачей: здесь речь не о canonical для обычных страниц, а о служебных URL поиска, которые вообще не должны конкурировать в выдаче.
Диагностика: как понять, что поиск уже индексируется
Перед правкой проверьте, какие именно URL попали в индекс и как они отдаются сервером. Это экономит время: иногда проблема не в WordPress, а в теме, которая выводит поисковую выдачу как полноценную страницу без ограничений для роботов.
- Вбейте в поиск сайта несколько разных запросов и посмотрите адрес в браузере.
- Проверьте исходный код страницы: есть ли
meta name="robots"и что в нём указано. - Посмотрите заголовки ответа сервера для поисковой страницы.
- В Search Console или аналогичном инструменте найдите URL с параметром
s=или служебным поисковым путём.
Для быстрой проверки заголовков удобно использовать curl:
curl -I "https://example.com/?s=wordpress"
Если в ответе нет X-Robots-Tag: noindex, а страница отдаёт 200, робот может продолжить её обход. Это не всегда означает немедленную индексацию, но риск лишних URL в поиске уже есть.
Пошаговое решение: закрываем поисковые страницы правильно
Ниже — рабочая последовательность. Если у вас уже установлен SEO-плагин, сначала проверьте его настройки. Если нет — можно решить задачу кодом, но аккуратно: без редиректов на главную и без блокировки самого поиска.
Вариант 1. Через SEO-плагин
Многие SEO-плагины умеют ставить noindex для страниц поиска. Это самый безопасный путь, если вы не хотите поддерживать код в теме. Смысл простой: поисковая страница остаётся доступной пользователю, но не должна попадать в индекс.
Плюс этого подхода — минимум риска сломать шаблон. Минус — нужно проверить, что плагин действительно ставит нужные мета-теги и не конфликтует с кэшированием.
| Подход | Плюсы | Минусы |
|---|---|---|
| SEO-плагин | Быстро, без кода, удобно поддерживать | Зависит от настроек и совместимости |
| Код в теме/плагине | Точный контроль, не зависит от интерфейса | Нужно тестировать после обновлений |
| Редирект поиска | Просто технически | Ломает пользовательский сценарий поиска |
Вариант 2. Добавить noindex через код
Если нужен точечный контроль, можно добавить noindex, follow для страниц поиска. Это не запрещает переход по ссылкам внутри страницы, но просит поисковик не индексировать саму выдачу.
Добавьте код в мини-плагин или в functions.php дочерней темы:
add_filter( 'wp_robots', function( array $robots ) {
if ( is_search() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );
Этот вариант подходит для стандартного WordPress-поиска. Если у вас кастомный поиск через плагин, проверьте, использует ли он обычные шаблоны WordPress или собственный вывод. Иногда нужен отдельный хук самого плагина.
Вариант 3. Отдать X-Robots-Tag на уровне ответа
Если нужно закрыть не только HTML-мета-тег, но и сам HTTP-ответ, можно добавить заголовок X-Robots-Tag для поисковых страниц. Это полезно, когда шаблон страницы меняется или часть контента отдаётся не через стандартный <head>.
add_action( 'template_redirect', function() {
if ( is_search() && ! headers_sent() ) {
header( 'X-Robots-Tag: noindex, follow', true );
}
} );
Важно: не дублируйте конфликтующие правила. Если SEO-плагин уже ставит noindex, а вы сверху добавляете другое поведение, потом будет сложно понять, что именно сработало. Лучше выбрать один источник истины.
Как не сломать поиск и внутренние ссылки
Самая частая ошибка — попытка «решить проблему» редиректом всех поисковых URL на главную. Для пользователя это выглядит как поломка: он ищет конкретный материал, а попадает на стартовую страницу без контекста. Для поисковика это тоже плохой сигнал, потому что возникает неочевидная подмена ответа.
Вместо редиректа проверьте три вещи:
- страница поиска открывается для пользователя;
- в ней есть корректный ответ на запрос, а не пустой шаблон;
- для робота она помечена как
noindex.
Если у вас в теме есть блоки с внутренним поиском, убедитесь, что они не создают лишние URL в навигации. Иногда разработчики случайно выводят ссылки на результаты поиска в меню, хлебных крошках или виджетах. Такие ссылки лучше убрать или оставить только для пользователя, но не для индексации.
Проверка результата после внедрения
После правки не ограничивайтесь визуальной проверкой. Нужно убедиться, что поисковая страница действительно отдаёт нужные сигналы.
- Откройте страницу поиска с тестовым запросом.
- Посмотрите исходный код и найдите
noindexвmeta robots. - Проверьте заголовки ответа через
curl -Iили инструменты разработчика. - Убедитесь, что страница не попала в XML-карту сайта.
- Если URL уже был в индексе, дождитесь переобхода или отправьте его на повторную проверку в Search Console.
Пример проверки через командную строку:
curl -I "https://example.com/?s=wordpress"
В идеале вы должны увидеть либо X-Robots-Tag: noindex, follow, либо соответствующий meta robots в HTML. Если ничего из этого нет, значит правило не применилось или его перезаписывает другой плагин.
Частые ошибки и как их исправить
1. Закрыли поиск через robots.txt
Это распространённая, но не лучшая практика для служебных страниц, которые уже известны поисковику. Disallow не гарантирует удаление из индекса, если URL уже найден. Кроме того, робот может не увидеть noindex, если вы одновременно закрыли обход.
Что делать: использовать noindex на самой странице, а не только запрет обхода.
2. Поставили редирект на главную
Такой редирект ломает сценарий поиска и может выглядеть как soft-404. Пользователь ищет одно, получает другое. Поисковик тоже не любит массовые неочевидные перенаправления.
Что делать: оставить страницу поиска доступной, но закрыть её от индексации.
3. Не учли кэш
Если на сайте стоит кэш-плагин или серверный кэш, старый HTML может продолжать отдавать страницу без noindex. В результате вы внесли правку, но робот видит прежний вариант.
Что делать: очистить кэш страницы, кэш плагина и, если есть, кэш на уровне CDN.
4. Дублирующие правила в нескольких местах
Когда noindex ставит и SEO-плагин, и тема, и кастомный код, потом сложно отследить источник конфликта. Иногда один слой перезаписывает другой, иногда возникает непредсказуемый результат.
Что делать: оставить одно правило и документировать, где именно оно живёт.
Безопасность и производительность
С точки зрения безопасности поисковые страницы не опаснее обычных, но они часто становятся точкой лишней нагрузки: бот перебирает запросы, сайт генерирует множество однотипных ответов, а кэш раздувается служебными URL. Если поиск тяжёлый, это уже вопрос производительности.
Практически полезно:
- ограничить индексацию служебных URL, чтобы не плодить мусор в выдаче;
- не выводить поисковые формы и результаты там, где они не нужны;
- проверить, не создаёт ли поиск лишнюю нагрузку на базу данных;
- исключить поисковые URL из sitemap, если они туда попали из-за плагина или шаблона.
Если вы используете комплексный плагин для технической чистки сайта, например Clearfy Pro, проверьте, какие именно опции он включает для noindex, дублей и служебных страниц. Но даже в этом случае полезно понимать, что именно делает настройка, а не включать её вслепую.
Что должно быть в итоговой проверке
Перед тем как закрыть задачу, пройдитесь по короткому чек-листу:
- поисковая страница открывается для пользователя;
- в HTML или заголовках есть
noindex; - редиректа на главную нет;
- поисковый URL не попадает в sitemap;
- кэш очищен;
- внутренние ссылки не ведут на служебные варианты поиска без необходимости.
Если после внедрения URL всё ещё индексируется, не спешите менять стратегию. Сначала проверьте, не мешает ли старый кэш, не переопределяет ли правило другой плагин и не отдает ли сервер отдельный ответ для мобильной версии или AMP-шаблона. В WordPress такие расхождения встречаются чаще, чем кажется.