Внутренний поиск на WordPress часто создает мусорные URL: результаты по пустому запросу, страницы с редкими запросами, дубли с сортировками и параметрами. Для пользователя это полезный инструмент, а для индексации — источник тонких и повторяющихся страниц. Если такие URL уже попали в поиск, их лучше закрыть аккуратно: не ломая форму поиска, не мешая навигации и не пряча нужные страницы сайта.
Ниже — рабочая схема для типового WordPress-сайта: что именно закрывать, чем это сделать и как проверить, что поисковики действительно перестали индексировать внутренний поиск.
Когда внутренний поиск становится проблемой
Сам по себе поиск не вреден. Проблема начинается, когда поисковые URL начинают жить своей жизнью: их много, они почти не отличаются по содержанию и не несут самостоятельной ценности. Особенно это заметно на сайтах с большим архивом записей, каталогами статей, документацией или новостями.
Типичные признаки:
- в индексе есть страницы вида
?s=или/search/...; - в отчётах по страницам много URL с одинаковыми заголовками и очень коротким контентом;
- поиск генерирует страницы с нулевым или почти нулевым числом результатов;
- в логах и аналитике видны частые заходы роботов на внутренний поиск.
Что именно нужно закрывать
Обычно речь идет не о самой форме поиска, а о страницах результатов. Форму на сайте оставляют, а URL результатов либо помечают как noindex, либо отдают с заголовком X-Robots-Tag, либо закрывают на уровне шаблона и SEO-плагина. Выбор зависит от того, как у вас устроен сайт и есть ли уже SEO-плагин.
Диагностика: как понять, что поиск уже индексируется
Сначала проверьте, какие URL реально доступны. На классическом WordPress поиск обычно выглядит как /?s=запрос. У некоторых тем и плагинов есть человекопонятные адреса вроде /search/запрос/. Оба варианта могут попадать в индекс, если их не ограничить.
Проверка вручную:
- Откройте несколько поисковых URL с разными запросами.
- Посмотрите исходный код страницы и наличие
<meta name="robots" content="noindex">. - Проверьте заголовки ответа сервера на наличие
X-Robots-Tag. - Сравните, не отдаются ли одинаковые title и description для разных запросов.
Если у вас есть доступ к командной строке, удобно проверить заголовки так:
curl -I 'https://example.com/?s=тест'В ответе ищите либо X-Robots-Tag: noindex, либо хотя бы отсутствие индексации в HTML, если это сделано через SEO-плагин. Один только robots.txt здесь не решает задачу: он может ограничить обход, но не гарантирует удаление уже известных URL из индекса.
Рабочие способы закрыть страницы поиска
Есть три нормальных варианта: через SEO-плагин, через код в теме или плагине, и через серверный заголовок. На практике чаще всего хватает первого или второго.
| Способ | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| SEO-плагин | Уже используется Yoast, Rank Math или аналог | Быстро, без кода, удобно поддерживать | Зависит от настроек плагина |
| Код в теме/плагине | Нужен точечный контроль | Не зависит от интерфейса SEO-плагина | Нужно следить за обновлениями и тестировать |
| X-Robots-Tag | Нужно закрыть на уровне ответа сервера | Работает даже без изменения шаблона | Не все хостинги удобно настраиваются |
Вариант 1. Через SEO-плагин
Если у вас уже стоит SEO-плагин, сначала проверьте его настройки для архивов поиска. В большинстве случаев можно задать noindex для search pages и оставить их доступными для пользователей. Это самый безопасный путь, если сайт уже живет на одном SEO-стеке и не хочется плодить собственный код.
Смысл настройки простой: поисковая страница должна открываться, но не должна попадать в индекс. Для пользователя она остается рабочей, для робота — нет.
Вариант 2. Через код в WordPress
Если нужен точный контроль без привязки к интерфейсу плагина, можно добавить noindex в шаблонно через хук wp_robots. Это современный способ, который не требует правки header.php и не ломает тему при обновлении.
add_filter( 'wp_robots', function( array $robots ) {
if ( is_search() ) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
return $robots;
} );Если nofollow вам не нужен, его можно убрать. Для большинства сайтов достаточно только noindex. nofollow имеет смысл, когда вы не хотите, чтобы роботы дополнительно ходили по ссылкам с поисковой страницы, но это не обязательное требование.
Если нужно закрыть именно результат поиска по пустому запросу, можно добавить более узкое условие:
add_filter( 'wp_robots', function( array $robots ) {
if ( is_search() && '' === trim( get_search_query( false ) ) ) {
$robots['noindex'] = true;
}
return $robots;
} );Такой вариант полезен, если у вас есть сценарии, где обычные поисковые страницы вы хотите оставить доступными, а пустой поиск — закрыть.
Вариант 3. Через X-Robots-Tag
Если поисковые страницы отдаются нестандартно или тема вмешивается в head, можно отправлять заголовок ответа. Это удобно, когда нужно закрыть URL независимо от HTML.
add_action( 'template_redirect', function() {
if ( is_search() && ! headers_sent() ) {
header( 'X-Robots-Tag: noindex, nofollow', true );
}
} );Этот способ особенно полезен, если вы не уверены, что SEO-плагин корректно отрабатывает на всех типах шаблонов. Но важно не дублировать несколько разных правил одновременно, иначе потом будет сложно понять, какое из них реально сработало.
Пошаговая схема внедрения
- Определите, какой тип поисковых URL у вас используется:
?s=или человекопонятный путь. - Проверьте, есть ли уже SEO-плагин и не закрывает ли он поиск сам.
- Выберите один основной способ: через плагин или через код.
- Добавьте
noindexдля страниц поиска. - При необходимости добавьте
X-Robots-Tagкак запасной вариант. - Очистите кэш страницы, объектный кэш и CDN, если они есть.
- Проверьте заголовки и HTML на тестовом поисковом URL.
Если вы вносите код в тему, лучше делать это не в functions.php активной темы, а в небольшом mu-plugin или в собственном мини-плагине. Так решение не исчезнет после смены темы.
Как проверить, что решение сработало
Проверка должна быть не формальной, а технической. Откройте поисковый URL и убедитесь в трех вещах: страница открывается, в HTML есть noindex или в ответе есть X-Robots-Tag, а в кэше не осталась старая версия без ограничений.
Минимальный чек-лист:
- поисковая страница открывается без ошибки 404;
- в исходном коде есть
noindexили в заголовках ответа естьX-Robots-Tag; - в Google Search Console URL не получает статус «Разрешено к индексированию»;
- после очистки кэша страница не возвращает старый head;
- внутренний поиск по сайту продолжает работать для пользователей.
Если используете командную строку, удобно проверить и HTML, и заголовки отдельно. Например:
curl -I 'https://example.com/?s=тест'
curl 'https://example.com/?s=тест' | grep -i robotsЕсли в ответе все еще виден старый meta robots, значит где-то остался кэш или конфликтует другой плагин.
Частые ошибки и как их исправить
Закрывают поиск только в robots.txt
Это частая ошибка. Disallow в robots.txt не гарантирует удаление URL из индекса, если поисковик уже знает адрес. Для реального исключения нужен noindex или заголовок X-Robots-Tag.
Ставят noindex и одновременно ломают поиск
Иногда вместе с закрытием страниц поиска случайно отключают саму форму или обработку запроса. Пользователь вводит запрос, а сайт возвращает 404 или пустую страницу. Проверьте, что вы закрываете именно индексирование, а не функциональность поиска.
Дублируют правила в плагине и теме
Если SEO-плагин уже добавляет noindex, а вы сверху еще раз отправляете заголовок, это обычно не критично, но усложняет диагностику. При проблемах сначала оставьте один источник правила, потом добавляйте второй только если он действительно нужен.
Не чистят кэш
На сайтах с кешированием старый head может жить дольше, чем кажется. После изменения правил обязательно очистите page cache, object cache и, если есть, CDN. Иначе проверка покажет старый результат, хотя код уже исправлен.
Что делать с уже проиндексированными страницами поиска
Если поисковые URL уже попали в индекс, одного изменения шаблона мало. Нужно дождаться повторного обхода или ускорить переобход через инструменты для вебмастеров. Для массовых случаев полезно оставить страницу доступной, но с noindex, чтобы робот мог увидеть новое правило и убрать URL из индекса.
Не стоит сразу отдавать 404 на все поисковые URL, если они уже в индексе и на них есть трафик. Для поисковика это резкий сигнал, а для пользователя — лишняя ошибка. Обычно мягкое закрытие через noindex безопаснее.
Практика по безопасности и производительности
Если внутренний поиск активно используется, он может нагружать базу данных, особенно на больших сайтах. Это уже не про индексацию, а про производительность. В таком случае имеет смысл проверить, не слишком ли тяжелые запросы генерирует тема или плагин поиска, нет ли лишних JOIN и не кэшируются ли результаты.
Для безопасности тоже есть нюанс: поисковые URL часто попадают в логи и аналитику с пользовательскими запросами. Если сайт работает с чувствительным контентом, не стоит бездумно отправлять эти данные в сторонние сервисы. Минимум — проверьте, что в URL не передаются лишние параметры, кроме самого поискового запроса.
Если вам нужно еще и убрать технические дубли, связанные с параметрами и архивами, удобно смотреть на это вместе с другими SEO-правками. Например, в Clearfy Pro есть инструменты для чистки сайта и управления дублями, но даже с плагином логику закрытия поиска все равно нужно проверять вручную по заголовкам и исходному коду.
Главная идея простая: внутренний поиск должен оставаться рабочим инструментом для посетителя, но не превращаться в отдельный слой мусорных страниц для индексации. Если вы один раз настроили правило и проверили его на реальном URL, дальше это решение обычно не требует постоянного внимания.