Внутренний поиск WordPress часто создаёт страницы, которые не нужны в индексе: результаты с пустым запросом, повторяющиеся выдачи по разным параметрам, URL с ?s= и служебные страницы поиска по сайту. Если такие адреса попадают в поиск, они размывают качество индекса и могут конкурировать с нормальными посадочными страницами.
Задача здесь не в том, чтобы «сломать поиск», а в том, чтобы оставить его рабочим для пользователей и одновременно убрать из индекса технический мусор. Для этого обычно достаточно правильно отдать noindex, при необходимости закрыть часть URL в robots.txt и проверить, что шаблон поиска не генерирует лишние дубли.
Когда проблема уже есть
Симптомы обычно видны в Google Search Console или в логах краулера:
- в индексе появляются URL вида
/ ?s=запрос; - одна и та же выдача доступна с разными параметрами;
- поисковые страницы получают трафик, но не дают полезных переходов;
- в отчётах растёт число «Просканировано, но не проиндексировано» для служебных URL.
Проверка вручную тоже простая: откройте поиск по сайту, выполните запрос и посмотрите исходный URL. Если там есть только ?s=, это нормальный сценарий. Если добавляются лишние параметры от темы, фильтров или плагинов, их уже нужно отдельно разбирать.
Что именно нужно закрывать
Не стоит бездумно закрывать весь поиск. Обычно достаточно:
- страницы результатов поиска по запросу;
- пустой поиск;
- поисковые URL с дополнительными параметрами, если они не нужны;
- внутренние служебные страницы, которые генерируются темой или плагином поверх поиска.
Если на сайте есть важный поиск по каталогу, базе знаний или архиву, лучше сначала проверить, не используются ли эти URL как рабочие точки входа для пользователей. Закрывать нужно только то, что не должно ранжироваться.
Как запретить индексацию поисковых страниц
Самый надёжный вариант — отдать noindex, follow для страниц поиска. Тогда поисковик не будет держать их в индексе, но сможет переходить по ссылкам внутри сайта. Для WordPress это можно сделать через фильтр wp_robots.
<?php
add_filter('wp_robots', function ($robots) {
if (is_search()) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Этот вариант удобен тем, что не зависит от SEO-плагина и работает на уровне темы или небольшого mu-plugin. Если у вас уже есть SEO-плагин, проверьте, не ставит ли он собственный noindex на поиск. Дублировать логику не нужно: выберите один источник правды.
Если нужно закрыть ещё и пустой поиск
Пустой запрос лучше не индексировать и не отдавать как полноценную страницу выдачи. Можно перенаправить его на главную или вернуть 404/410 в зависимости от сценария. Для обычного сайта чаще всего достаточно редиректа на главную или страницу поиска с подсказкой.
<?php
add_action('template_redirect', function () {
if (is_search() && isset($_GET['s']) && trim((string) $_GET['s']) === '') {
wp_safe_redirect(home_url('/'), 302);
exit;
}
});Если у вас есть причина оставлять пустой поиск доступным, тогда хотя бы не давайте ему индексироваться через wp_robots.
robots.txt: когда он помогает, а когда нет
robots.txt полезен для снижения лишнего обхода, но это не замена noindex. Если поисковик уже знает URL, запрет в robots может помешать ему увидеть мета-робот и убрать страницу из индекса. Поэтому для поисковых страниц WordPress обычно безопаснее сочетать noindex и аккуратный robots.txt.
Пример мягкого правила, если вы хотите сократить обход URL с поисковыми параметрами:
User-agent: *
Disallow: /*?s=
Disallow: /search/Но это не универсальный рецепт. Если у вас есть нестандартные URL поиска, сначала проверьте, как они реально выглядят в адресной строке и не блокируете ли вы случайно полезные страницы. Для сайтов на поддоменах и с языковыми префиксами шаблон правил может отличаться.
Сравнение подходов
| Способ | Что делает | Когда использовать | Ограничение |
|---|---|---|---|
wp_robots | Ставит noindex на страницы поиска | Почти всегда для WordPress | Нужно проверить, не конфликтует ли с SEO-плагином |
robots.txt | Снижает обход поисковыми роботами | Для мусорных параметров и служебных URL | Не гарантирует удаление из индекса |
| Редирект пустого поиска | Убирает бесполезные страницы | Если пустой поиск не нужен | Нельзя применять ко всем поисковым запросам подряд |
Пошаговая настройка без лишнего риска
- Проверьте, какие поисковые URL реально генерирует сайт.
- Добавьте
noindex, followдляis_search(). - Если есть пустой поиск, решите: редирект, 404 или отдельная подсказка.
- При необходимости добавьте точечные правила в
robots.txt. - Проверьте, не дублирует ли логику SEO-плагин или тема.
- После публикации изменений отправьте проблемные URL на повторную проверку в Search Console.
Как проверить, что решение сработало
Проверка должна быть не «на глаз», а по факту ответа сервера и HTML. Откройте страницу поиска и посмотрите исходный код: в блоке robots должен появиться noindex. Если используете SEO-плагин, проверьте, не переопределяет ли он мета-теги.
Минимальный набор проверок:
- в исходном коде страницы поиска есть
noindex; - страница не исчезла из пользовательского поиска;
- поиск по сайту продолжает работать;
- в Search Console проблемные URL постепенно уходят из индекса после переобхода;
- в логах нет всплеска 404 из-за слишком жёстких правил
robots.txt.
Если хотите проверить заголовки ответа, используйте:
curl -I https://example.com/?s=testВ ответе не обязательно будет отдельный заголовок X-Robots-Tag, если вы используете wp_robots: в этом случае ориентируйтесь на HTML-мета-тег в исходнике страницы.
Частые ошибки и как их исправить
Закрыли поиск в robots.txt, но не поставили noindex
Это частая ошибка. Робот может уже знать URL и продолжать держать его в индексе без возможности нормально переобойти страницу. Исправление: верните доступ к странице и добавьте noindex через wp_robots или SEO-плагин.
Закрыли слишком широкое правило
Иногда в robots.txt пишут что-то вроде Disallow: /?s=, а потом ломают другие параметры или нестандартные маршруты. Исправление: проверьте реальные URL и сузьте правило до конкретного шаблона.
Конфликт с SEO-плагином
Если плагин уже управляет мета-роботами, ваш код может быть проигнорирован или, наоборот, перезаписан. Исправление: оставьте один механизм. Либо код в теме/mu-plugin, либо настройки SEO-плагина.
Редирект пустого поиска отправляет на несуществующую страницу
Это бывает, если в коде указан неверный URL или сайт работает в подкаталоге. Исправление: используйте home_url('/') или явный адрес нужной страницы, а не жёсткую строку.
Что учесть по безопасности и производительности
Сам по себе поиск — не уязвимость, но он может создавать лишнюю нагрузку, если его активно сканируют боты. Поэтому полезно ограничивать мусорные параметры и не давать индексироваться пустым или повторяющимся выдачам. Если на сайте много служебных дублей, имеет смысл дополнительно проверить канонические URL и шаблоны архивов.
Если вы используете плагины для SEO и чистки дублей, смотрите, чтобы они не конфликтовали между собой. Например, в Clearfy Pro есть инструменты для закрытия дублей и технической чистки, но применять их стоит только после проверки, как именно у вас устроен поиск и какие URL реально попадают в индекс. Ставить всё подряд без ревизии — плохая идея.
Практически это сводится к одному правилу: сначала измеряем, какие поисковые URL существуют, потом закрываем только лишние, и только после этого проверяем индексацию повторно.