Страницы внутреннего поиска WordPress часто попадают в индекс случайно: у них меняется URL, они плодят дубли по одним и тем же запросам, а в выдаче поисковика вместо полезных страниц появляются результаты поиска по сайту. На небольших проектах это обычно замечают только после роста числа мусорных URL в отчётах по индексации.
Задача здесь не в том, чтобы отключить поиск как функцию, а в том, чтобы оставить его для пользователей и убрать из индекса страницы вида ?s=запрос. Делать это лучше точечно: через noindex, а не через глобальное закрытие сайта в robots.txt.
Когда проблема уже видна в отчётах
Проверять нужно не только сам сайт, но и то, как его видит поисковик. Типичные признаки:
- в индексе есть URL с параметром
?s=; - в Search Console растёт число страниц с низкой ценностью или дубликатов;
- по запросу
site:example.com inurl:?s=находятся страницы поиска; - в выдаче отображаются результаты поиска вместо целевых страниц;
- внутренний поиск генерирует много пустых или почти пустых страниц.
Что именно нужно закрывать
Обычно речь идёт о страницах результатов поиска, а не о форме поиска. Форму оставляем, а страницы результатов помечаем как noindex. Если у вас есть отдельные шаблоны поиска, фильтры или AJAX-поиск, их нужно оценивать отдельно: не каждый поисковый endpoint должен быть закрыт одинаково.
Какой способ выбрать: плагин, код или оба
Если задача ограничивается стандартным поиском WordPress, надёжнее всего добавить noindex через код. Плагин удобен, когда на сайте уже есть SEO-плагин и вы не хотите поддерживать отдельную логику в теме.
| Подход | Когда подходит | Плюс | Минус |
|---|---|---|---|
| SEO-плагин | Если уже используется Yoast SEO, Rank Math или аналог | Меньше кода, управление из админки | Поведение зависит от настроек плагина |
| Код в теме или mu-plugin | Нужен контроль без лишних зависимостей | Прозрачно и предсказуемо | Нужно аккуратно поддерживать при обновлениях |
robots.txt | Только как дополнительная мера | Просто закрыть обход | Не убирает уже известные URL из индекса |
Если нужен именно результат в индексе, ориентируйтесь на noindex. Один robots.txt этого не гарантирует: поисковик может знать URL, но не увидеть содержимое, и страница всё равно останется в индексе как известный адрес.
Пошаговое решение через код
Самый практичный вариант — добавить мета-тег noindex, follow на страницы поиска. Для этого можно использовать хук wp_head. Код лучше положить в дочернюю тему или в отдельный mu-plugin, если не хотите терять настройку при смене темы.
<?php
add_action( 'wp_head', function () {
if ( is_search() ) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
} );Этот вариант работает для стандартного поиска WordPress. Он не отключает страницу, а только просит поисковик не индексировать её, при этом переходить по ссылкам на странице можно.
Если нужен более точный контроль через фильтр
Если у вас уже есть SEO-плагин или собственная логика вывода robots, удобнее использовать фильтр, который меняет массив директив. В WordPress нет единого универсального фильтра для всех SEO-плагинов, поэтому ниже — вариант для собственного шаблона, где вы сами формируете meta robots.
<?php
function wppay_search_robots_meta() {
if ( ! is_search() ) {
return '';
}
return '<meta name="robots" content="noindex,follow" />';
}
add_action( 'wp_head', 'wppay_search_robots_meta', 1 );Если на сайте уже есть SEO-плагин, не дублируйте мета-теги вручную без проверки. Два разных блока robots на одной странице — частая причина конфликтов, особенно если один плагин ставит index,follow, а ваш код — noindex.
Как закрыть поиск через SEO-плагин
В большинстве SEO-плагинов есть настройка для архивов поиска или для страниц с параметрами. Смысл тот же: нужно добиться, чтобы на страницах поиска выводился noindex. Если плагин позволяет отдельно управлять мета-тегом robots для search results, это предпочтительнее, чем править шаблон вручную.
Проверяйте не только галочку в интерфейсе, но и итоговый HTML. Иногда настройка включена, но кэш отдаёт старую версию страницы, либо тема выводит свой собственный meta robots.
Проверка результата после внедрения
После правки не ограничивайтесь просмотром страницы в браузере. Нужна проверка на уровне исходного HTML и кэша.
- Откройте страницу поиска, например
/?s=тест. - Посмотрите исходный код страницы и найдите
meta name="robots". - Убедитесь, что там есть
noindex,follow, а неindex. - Проверьте страницу в режиме инкогнито и после очистки кэша.
- Если используется CDN или серверный кэш, сбросьте его тоже.
Дополнительно можно проверить заголовки ответа, если у вас настроен вывод X-Robots-Tag. Но для стандартной задачи достаточно мета-тега в HTML, если он стабильно присутствует на страницах поиска.
Что смотреть в Search Console
Изменения не отражаются мгновенно. После переобхода страниц поисковик должен начать видеть директиву noindex. В отчётах важно отслеживать не только исчезновение URL, но и то, не появились ли новые варианты с параметрами, например с сортировкой или дополнительными query string.
Частые ошибки и как их исправить
- Закрыли поиск в robots.txt вместо noindex. Это не убирает уже известные URL из индекса. Исправление: оставьте robots.txt как дополнительную меру, но добавьте
noindexна сами страницы. - Поставили
noindexна весь сайт. Такое случается после копирования кода в неправильный шаблон. Исправление: ограничьте условие толькоis_search(). - Не очистили кэш. Поисковик и браузер видят старую версию страницы. Исправление: сбросьте кэш страницы, объекта и CDN.
- Дублируется meta robots из темы и плагина. Исправление: оставьте один источник директив, второй отключите.
- Закрыли поиск, но оставили индексируемыми параметры сортировки. Если у вас есть отдельные URL с параметрами, их нужно проверить отдельно.
Практические советы по безопасности и производительности
Если поиск на сайте активно используется, не пытайтесь решать проблему только через индексацию. Иногда лучше уменьшить нагрузку на сам поиск: ограничить тяжёлые запросы, не запускать поиск по лишним типам записей и не отдавать пустые результаты с большим количеством лишней разметки.
Для сайтов с большим объёмом контента полезно дополнительно проверить, не создают ли дубли страницы тегов, авторов и архивов. В таких случаях удобно использовать инструменты вроде Clearfy Pro для точечной чистки дублей и служебных страниц, но только после проверки, что он не конфликтует с вашим SEO-плагином и шаблоном.
Если поиск нужен только для внутренней навигации, а не для индексации, можно ещё и сократить количество ссылок на поисковые URL в шаблоне: не выводить их в хлебных крошках, не добавлять в sitemap и не использовать в блоках рекомендаций.
Мини-чек-лист перед публикацией изменений
- Проверили, что
noindexприменяется только к страницам поиска. - Убедились, что форма поиска продолжает работать.
- Сбросили кэш сайта и CDN.
- Посмотрели исходный HTML страницы
/?s=.... - Проверили, нет ли второго источника
meta robots. - Оценили, не нужны ли отдельные правила для AJAX-поиска или нестандартных шаблонов.
Если после внедрения страницы поиска всё ещё появляются в индексе, обычно проблема не в самом noindex, а в том, что поисковик видит старую версию страницы, альтернативный URL или дублирующий шаблон. В таком случае нужно идти от фактического HTML, а не от настроек в админке.