Внутренний поиск WordPress часто создает страницы, которые не нужны в индексе: результаты поиска по сайту, пустые выдачи, страницы с мусорными запросами и дубли с параметрами. Если их не контролировать, поисковик начинает тратить обход на бесполезные URL, а в отчётах появляются десятки или сотни страниц с тонким контентом.
Задача здесь не в том, чтобы «спрятать всё подряд», а в том, чтобы закрыть именно поисковые страницы, не ломая сам поиск для пользователей и не мешая индексации нормальных материалов.
Когда проблема действительно есть
Сначала проверьте, что у вас именно поисковые URL, а не другая причина дублей. В WordPress поиск обычно выглядит так: ?s=запрос. На некоторых темах и плагинах встречаются красивые URL, но логика та же: это страницы выдачи, а не контентные страницы.
Признаки, что их пора закрывать:
- в индексе есть URL с
?s=или аналогичными параметрами; - в Search Console растут страницы с типом «Просканировано — сейчас не проиндексировано» или «Дубликат, выбранная каноническая страница отличается»;
- поисковик регулярно заходит на пустые или почти пустые результаты поиска;
- в логах видно много запросов к внутреннему поиску от ботов.
Что именно нужно закрывать
Обычно закрывают только страницы результатов поиска. Саму форму поиска, виджет, AJAX-подгрузку и поиск по сайту для пользователей трогать не нужно. Если у вас есть отдельные страницы фильтрации, сортировки или поиска по каталогу, их надо оценивать отдельно: у них могут быть другие правила индексации.
Диагностика: как понять, что поисковые страницы уже индексируются
Проверка занимает несколько минут и помогает не лечить несуществующую проблему.
- Откройте сайт и выполните поиск по любому слову.
- Посмотрите URL в адресной строке.
- Скопируйте его и проверьте в поиске Google через оператор
site:example.com inurl:?s=или аналогичный запрос. - В Search Console откройте раздел с индексированием страниц и найдите URL с параметрами поиска.
Если у вас есть доступ к серверным логам, полезно посмотреть, как часто боты ходят на такие URL. Это особенно важно на больших сайтах: даже неиндексируемые страницы могут съедать краулинговый бюджет.
Рабочие способы закрыть поисковые страницы
Есть три нормальных подхода: noindex в заголовке или мета-теге, запрет в robots.txt и каноникал на основную страницу. Для поисковых страниц WordPress чаще всего нужен именно noindex,follow, а не жёсткий запрет в robots.
| Способ | Когда подходит | Ограничение |
|---|---|---|
noindex | Если страницу нужно отдать пользователю, но не показывать в поиске | Страница может ещё какое-то время оставаться в индексе до переобхода |
robots.txt | Если нужно сократить обход ботами | Запрещённый URL может остаться в индексе без контента |
| Каноникал | Если есть явный основной URL, а поиск — вторичный вариант | Не всегда подходит для поисковых выдач, потому что у них нет «основной» страницы |
Вариант 1. Закрыть поисковые страницы через код
Если вы не хотите ставить отдельный SEO-плагин или у вас уже есть своя логика, можно добавить noindex только на страницы поиска. Для этого используйте хук wp_robots — он есть в современных версиях WordPress и позволяет корректно добавить директивы без правки шаблонов.
add_filter( 'wp_robots', function( $robots ) {
if ( is_search() ) {
$robots['noindex'] = true;
$robots['nofollow'] = false;
}
return $robots;
} );Этот вариант хорош тем, что не зависит от темы. Но он не решает задачу полностью, если у вас есть старые страницы в индексе: поисковику нужно время, чтобы переобойти их и увидеть новую директиву.
Вариант 2. Добавить заголовок X-Robots-Tag
Если нужно закрыть не только HTML-страницу, но и любые ответы, которые отдает поиск, можно поставить заголовок X-Robots-Tag. Это удобно, когда тема или плагин генерируют нестандартную разметку, а вы хотите управлять индексацией на уровне ответа сервера.
add_action( 'send_headers', function() {
if ( is_search() ) {
header( 'X-Robots-Tag: noindex, follow', true );
}
} );Здесь важно не дублировать логику с другими SEO-плагинами без необходимости. Если плагин уже ставит noindex, второй механизм обычно не нужен. Два разных источника директив иногда создают путаницу при отладке.
Вариант 3. Ограничить обход в robots.txt
Если поисковые страницы создают лишнюю нагрузку, можно дополнительно закрыть их в robots.txt. Но это именно дополнительная мера, а не замена noindex.
User-agent: *
Disallow: /?s=
Disallow: /search/
Этот вариант работает только если у вас действительно такие URL. Если поиск строится на других параметрах, правило нужно адаптировать под фактический адрес. И не забывайте: запрет в robots.txt не удаляет URL из индекса сам по себе.
Пошаговая схема внедрения
- Определите, как именно формируется URL поиска на вашем сайте.
- Выберите один основной способ:
noindexчерезwp_robotsили заголовокX-Robots-Tag. - Если ботам нужно меньше ходить по поиску, добавьте ограничение в
robots.txt. - Проверьте, не ставит ли SEO-плагин свои директивы на эти же страницы.
- После публикации изменения отправьте на переобход несколько проблемных URL в Search Console.
Если у вас есть SEO-плагин, сначала посмотрите его настройки. В некоторых случаях проще включить noindex для поисковых страниц в интерфейсе плагина, чем писать код. Но код полезен, когда нужно точечно закрыть только внутренний поиск, а остальную логику индексации оставить без изменений.
Как проверить, что решение сработало
Проверка должна быть не «на глаз», а по факту ответа сервера и индексации.
- Откройте поисковую страницу в браузере и посмотрите исходный код: должен быть
noindexв мета-robots или соответствующий заголовок. - Проверьте заголовки через
curl -Iили инструменты разработчика. - В Search Console используйте проверку URL и убедитесь, что страница распознаётся как не предназначенная для индексации.
- Через несколько дней проверьте отчёт по страницам: количество URL поиска должно начать снижаться.
Пример проверки заголовков:
curl -I https://example.com/?s=testВ ответе ищите X-Robots-Tag: noindex, follow, если вы выбрали этот путь.
Частые ошибки и как их исправить
Закрыли поиск в robots.txt, но не поставили noindex
Это самая частая ошибка. URL перестаёт сканироваться, но уже известные поисковику страницы могут остаться в индексе. Исправление простое: добавьте noindex и дождитесь переобхода.
Случайно закрыли весь сайт
Такое бывает, когда правило в коде написано без проверки is_search() или когда в robots.txt добавили слишком широкую маску. Сразу проверьте главную, записи, рубрики и страницы. Если они тоже получили noindex, откатывайте изменение и сузьте условие.
Конфликт с SEO-плагином
Если плагин уже управляет мета-тегами, а вы добавили второй слой через тему или mu-plugin, итоговый HTML может быть непредсказуемым. Оставьте один источник истины: либо настройка плагина, либо ваш код.
Ожидание мгновенного удаления из индекса
noindex не удаляет страницы моментально. Поисковику нужно заново обойти URL. Если страница важна для очистки индекса, ускорьте переобход через Search Console и не меняйте директивы туда-сюда в течение пары дней.
Что ещё стоит проверить рядом с поиском
Когда вы закрываете внутренний поиск, заодно проверьте похожие источники мусорных URL: страницы с параметрами сортировки, фильтры, пустые архивы тегов и служебные страницы темы. Часто проблема не в одном поиске, а в общей генерации тонких страниц.
Если на сайте много технических дублей, удобнее сначала собрать карту проблемных URL, а потом уже решать, что закрывать через noindex, что — через каноникал, а что — вообще удалять из шаблона. Такой подход обычно даёт более чистый индекс, чем точечные правки «по жалобе».
Для сайтов, где техническая чистка повторяется регулярно, имеет смысл вынести правила в отдельный mu-plugin или использовать SEO-плагин с понятными настройками индексации. Это проще сопровождать, чем держать логику в functions.php темы, которая может смениться при следующем редизайне.