Внутренний поиск WordPress часто создает страницы, которые не нужны в индексе: результаты по пустым запросам, дубли с параметрами, тонкие страницы без ценности для поиска. Если такие URL уже попали в индекс, они начинают конкурировать с нормальными страницами сайта и размывают краулинговый бюджет. Решение здесь не в одном «магическом» теге, а в аккуратной настройке: запретить индексацию самих страниц поиска, не сломать работу формы и не получить лишние ошибки в логах.
Когда проблема действительно есть
Сначала стоит убедиться, что речь именно о страницах поиска, а не о других дублях. В WordPress поисковая выдача обычно выглядит как URL с параметром ?s=, например / ?s=seo или /search/seo/ в зависимости от темы и настроек. Если такие страницы уже индексируются, это видно по нескольким признакам:
- в Google Search Console есть URL с параметром
sили поисковые страницы в отчете по индексированию; - в выдаче находятся страницы с заголовками вроде «Результаты поиска для…»;
- в логах сервера заметны частые заходы ботов на пустые и мусорные поисковые запросы;
- поисковые страницы получают показы, но не дают полезного трафика и не конвертируют.
Если у вас уже настроены robots.txt и sitemap, это не отменяет отдельной проверки поисковых страниц. Их можно случайно оставить открытыми для индексации, даже если остальные технические URL закрыты правильно.
Что именно нужно закрывать
Обычно задача состоит из двух частей: запретить индексацию страниц внутреннего поиска и убрать их из sitemap, если они туда попали через тему или плагин. Для WordPress это лучше делать на уровне meta robots и, при необходимости, через заголовок X-Robots-Tag. Так поисковик увидит запрет прямо на странице, а не только в robots.txt.
Почему robots.txt здесь не всегда достаточно
Если закрыть поиск только в robots.txt, бот может не увидеть содержимое страницы, но URL все равно способен остаться в индексе как «известный, но не просканированный». Для мусорных страниц поиска это плохой сценарий: они продолжают висеть в индексе без нормального сниппета. Поэтому для таких URL обычно нужен именно noindex.
Пошаговое решение через код
Если вы работаете без SEO-плагина или хотите контролировать поведение точечно, добавьте фильтр в functions.php дочерней темы или в небольшой mu-plugin. Ниже вариант, который ставит noindex,follow на все поисковые страницы WordPress.
<?php
add_filter('wp_robots', function (array $robots) {
if (is_search()) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Этот вариант работает на современных версиях WordPress, где используется фильтр wp_robots. Он не ломает форму поиска и не влияет на обычные записи, страницы и архивы.
Если вам нужно дополнительно отдать заголовок для серверов и ботов, которые лучше реагируют на HTTP headers, можно добавить X-Robots-Tag для поисковых страниц на уровне шаблона или через хук send_headers:
<?php
add_action('send_headers', function () {
if (is_search()) {
header('X-Robots-Tag: noindex, follow', true);
}
});На практике обычно достаточно одного механизма — либо wp_robots, либо SEO-плагина. Дублировать все сразу не обязательно, если только у вас нет отдельной причины для этого.
Если используете SEO-плагин
В популярных SEO-плагинах настройка обычно уже есть, но спрятана в разделе индексации архивов и таксономий. Для поисковых страниц важно проверить, не переопределяет ли плагин стандартное поведение темы. Если плагин умеет управлять robots meta для поиска, лучше использовать его интерфейс, а не смешивать несколько источников правил.
| Подход | Плюсы | Минусы |
|---|---|---|
Код через wp_robots | Точечно, прозрачно, не зависит от плагина | Нужно править код и не забыть про обновления темы |
| SEO-плагин | Удобно для редактора, меньше ручной поддержки | Возможны конфликты настроек и лишние слои логики |
robots.txt без noindex | Быстро и просто | Не гарантирует удаление URL из индекса |
Если у вас уже стоит плагин, который управляет мета-тегами, не добавляйте второй независимый механизм без проверки. Два разных источника noindex обычно не критичны, но потом сложнее искать причину, если поведение меняется после обновления.
Как проверить, что решение сработало
После внедрения откройте несколько поисковых URL вручную и проверьте исходный код страницы. В <head> должен появиться тег robots с noindex. Если вы добавляли заголовок, проверьте его через DevTools или curl.
curl -I 'https://example.com/?s=seo'В ответе ищите строку наподобие:
X-Robots-Tag: noindex, followДальше проверьте страницу в Google Search Console через инспекцию URL. Если URL уже был в индексе, удаление не происходит мгновенно: поисковику нужно заново обойти страницу и увидеть запрет. Для ускорения можно отправить URL на повторную проверку, но это не заменяет корректную настройку на сайте.
Чек-лист проверки
- поисковая страница возвращает
200 OK, а не ошибку; - в исходном коде есть
noindex; - в ответе сервера нет конфликтующего
robotsот другого плагина; - поисковые URL не попадают в sitemap;
- в Search Console нет массового роста страниц поиска в индексе после обновления темы или плагина.
Частые ошибки и как их исправить
Закрыли только robots.txt
Это самая частая ошибка. Бот может не сканировать страницу, но URL останется известным поисковику. Для удаления из индекса нужен именно noindex.
Поставили noindex на все страницы сайта
Иногда фильтр пишут слишком грубо и он срабатывает не только на поиск, но и на записи, архивы или пагинацию. Проверяйте условие is_search() и тестируйте на нескольких типах страниц.
Конфликт темы и SEO-плагина
Некоторые темы уже выводят свои meta robots, а SEO-плагин добавляет свои. В результате в коде появляется несколько тегов robots, и поведение становится непредсказуемым. Оставьте один источник правды: либо тема, либо плагин, либо собственный код.
Поисковые страницы закрыли, но они остались в sitemap
Если sitemap генерируется плагином или темой отдельно, проверьте, не включены ли туда служебные URL. Поисковые страницы не должны попадать в карту сайта вообще.
Что делать с безопасностью и нагрузкой
Внутренний поиск может быть не только SEO-проблемой, но и источником лишней нагрузки. Боты и пользователи часто дергают поиск с пустыми или очень широкими запросами, а тема при этом строит тяжелую выдачу. Если сайт большой, имеет смысл ограничить частоту таких запросов на уровне кеша или веб-сервера, но без агрессивных блокировок, которые ломают нормальный поиск для посетителей.
Практически полезно:
- не индексировать поиск, но оставить его рабочим для пользователей;
- проверить, не создает ли тема отдельные URL для поиска с лишними параметрами;
- убедиться, что на страницах поиска нет тяжелых виджетов, которые грузят лишние запросы к базе;
- не использовать сомнительные плагины, которые «ускоряют SEO» за счет скрытия контента или подмены ответов сервера.
Если нужна более широкая чистка дублей и технических страниц, иногда удобнее собрать это в одном SEO-инструменте, чем держать набор разрозненных сниппетов. Но даже тогда проверка исходного кода и ответов сервера остается обязательной.
После настройки у вас должны исчезнуть новые попадания поисковых страниц в индекс, а старые URL — постепенно уйти после повторного обхода. Если этого не происходит, значит где-то остался второй источник правил: тема, SEO-плагин, кеш или серверный заголовок, который перебивает ваш код.