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