Страница внутреннего поиска в WordPress часто попадает в индекс случайно: поисковики находят URL вида ?s=, а дальше начинают собирать тонны бесполезных дублей. На небольшом сайте это выглядит как мелочь, но на практике такие страницы размывают краулинговый бюджет, засоряют отчёты в Search Console и иногда создают дубли с параметрами сортировки или фильтрации.
Ниже — рабочий сценарий: как понять, что проблема именно в индексации поиска, чем закрывать её безопасно и как проверить, что решение сработало.
Когда страницу поиска нужно закрывать от индексации
Не каждый сайт обязан прятать поиск. Если у вас каталог, база знаний или большой контентный проект, внутренняя выдача может быть полезной пользователю, но почти никогда не должна конкурировать с основными страницами в поиске. Проблема возникает, когда поисковик индексирует URL с пустым запросом, мусорными параметрами или однословными запросами, которые не несут самостоятельной ценности.
Типичные признаки:
- в индексе есть URL вида
/?s=,/search/?s=или?s=keyword; - в отчётах Search Console появляются страницы с параметрами поиска;
- в логах краулинга видно, что бот часто заходит на внутренний поиск;
- в выдаче по брендовым запросам всплывают страницы поиска вместо нормальных посадочных.
Диагностика: что именно индексируется
Сначала проверьте, какой у вас формат поиска. В WordPress это может быть стандартный URL с параметром s, а может быть кастомный шаблон в теме или плагине. Откройте несколько вариантов:
https://example.com/?s=testhttps://example.com/search/test/https://example.com/?s=
Если страница открывается как обычная HTML-страница и в <head> нет noindex, поисковик может её индексировать. Дополнительно проверьте исходный код и заголовки ответа. Иногда разработчик добавляет мета-тег, но забывает про каноникал или наоборот.
Что смотреть в исходнике
<meta name="robots" content="index,follow">или отсутствиеnoindex;<link rel="canonical" ...>— не указывает ли он на саму страницу поиска;- HTTP-статус — поиск должен отдавать 200 только если вы сознательно хотите его индексировать;
- наличие параметров в URL, которые создают дубли.
Как закрыть поиск от индексации: рабочие варианты
Есть три нормальных подхода: через SEO-плагин, через код темы или через серверную логику. Выбор зависит от того, как у вас устроен сайт и кто будет поддерживать решение дальше.
| Способ | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| SEO-плагин | Если уже используете плагин для мета-тегов и robots | Быстро, без правки темы | Зависимость от интерфейса плагина |
| Код в теме/плагине | Если нужен точный контроль | Прозрачно, легко ревизовать | Нужно не забыть при обновлении темы |
| Серверные правила | Если нужно жёстко ограничить обход | Снижает мусорный краулинг | Можно случайно сломать полезные URL |
Вариант 1: добавить noindex для страниц поиска
Если у вас нет сложной логики, самый безопасный путь — отдать поиску noindex,follow. Это не запрещает обход ссылок, но просит не включать страницу в индекс.
<?php
add_action( 'wp_head', function () {
if ( is_search() ) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1 );Код можно добавить в дочернюю тему или в небольшой must-use плагин. Если вы работаете с SEO-плагином, лучше не дублировать мета-теги вручную: проверьте, не ставит ли плагин уже свой robots.
Вариант 2: убрать поиск из индекса через wp_robots
Начиная с современных версий WordPress, удобнее использовать фильтр wp_robots. Он чище, чем ручной вывод в wp_head, и не зависит от порядка подключения шаблонов.
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_search() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );Этот вариант лучше, если вы хотите не просто вставить HTML, а управлять robots на уровне WordPress. Но важно не смешивать его с другими фильтрами, которые уже меняют robots для архивов, пагинации или страниц вложений.
Вариант 3: закрыть поиск на уровне robots.txt
Иногда пытаются закрыть поиск через robots.txt. Это не всегда плохая идея, но у неё есть ограничение: запрет в robots не гарантирует удаление URL из индекса, если на него уже есть ссылки. Поэтому robots.txt — это скорее дополнительная мера, а не основное решение.
User-agent: *
Disallow: /*?s=
Disallow: /search/Такой подход полезен, если бот активно сканирует мусорные запросы. Но не рассчитывайте, что это заменит noindex.
Пошаговая настройка без лишнего риска
- Определите, какой формат поиска используется на сайте: параметр
s, ЧПУ или кастомный маршрут. - Проверьте, не стоит ли уже
noindexв SEO-плагине или теме. - Добавьте один способ управления robots, а не два одновременно.
- Если поиск не нужен для пользователей из поиска, оставьте
noindex,follow. - При необходимости дополнительно ограничьте обход через
robots.txt. - Очистите кеш страницы, кеш объекта и CDN, если они используются.
Как проверить, что решение сработало
После внедрения не ограничивайтесь просмотром страницы в браузере. Нужна проверка на уровне HTML и индексации.
- Откройте страницу поиска и проверьте исходный код: должен быть
noindex,follow. - Проверьте HTTP-заголовки, если у вас есть серверная логика или прокси.
- Посмотрите, не дублируется ли robots-мета из темы и SEO-плагина.
- В Search Console отправьте проверку URL и посмотрите, как робот видит страницу.
- Через несколько дней проверьте, уменьшается ли число URL поиска в отчётах индексирования.
Если у вас есть доступ к командной строке, можно быстро проверить ответ страницы так:
curl -I "https://example.com/?s=test"И отдельно посмотреть HTML:
curl -s "https://example.com/?s=test" | grep -i robotsЕсли в ответе нет нужного robots-мета, значит код не сработал, кеш не обновился или его перехватывает другой плагин.
Частые ошибки и как их исправить
Ставят одновременно noindex и жёсткий запрет в robots.txt
Это частая путаница. Если вы закрыли поиск в robots.txt, бот может не увидеть страницу и не прочитать мета-тег noindex. В итоге URL продолжает жить в индексе дольше, чем нужно. Для удаления уже известных страниц лучше оставить доступ к обходу и добавить noindex.
Добавляют код в тему, а потом теряют его после обновления
Если правка сделана в родительской теме, она исчезнет при обновлении. Для таких задач лучше использовать дочернюю тему или небольшой плагин с одним назначением.
Не чистят кеш
После изменения robots-мета старый HTML может ещё отдаваться из кеша. Это особенно заметно на сайтах с серверным кешем, плагином кеширования и CDN одновременно. Сначала очищайте все уровни кеша, потом проверяйте страницу заново.
Закрывают не тот URL
На практике поиск может жить и на /?s=, и на красивом маршруте /search/. Если вы закрыли только один вариант, второй продолжит индексироваться. Проверьте реальные URL, которые видит бот.
Когда лучше не трогать поиск кодом
Если поиск генерирует полезные посадочные страницы, например на крупном каталоге или в базе знаний, иногда имеет смысл не закрывать его полностью, а ограничить только пустые запросы и мусорные параметры. В таком случае нужна более точная логика: noindex только для пустого поиска, а для осмысленных запросов — отдельная стратегия. Но это уже зависит от архитектуры сайта и не решается одной строкой для всех.
Практика по безопасности и производительности
Не делайте из поиска публичный генератор дублей. Чем меньше URL с параметрами попадает в индекс и кеш, тем проще поддерживать сайт. Если у вас много мусорных запросов, полезно:
- ограничить индексацию параметров на уровне SEO-плагина;
- не выводить лишние блоки на странице поиска;
- не подключать тяжёлые виджеты в шаблоне результатов поиска;
- проверить, не создаёт ли тема отдельные шаблоны для пустого поиска.
Если вы используете набор инструментов для технической чистки WordPress, посмотрите на Clearfy Pro: у него есть функции для удаления дублей и базовой SEO-гигиены, что удобно, когда таких мелких правок на сайте много.
В итоге задача сводится к одному: не дать внутреннему поиску конкурировать с нормальными страницами и не плодить мусорные URL. Если сделать это аккуратно, сайт станет чище для поисковиков и проще для поддержки.