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