На небольших и средних сайтах страница поиска часто превращается в источник технического мусора: поисковые URL индексируются, плодят дубли, а в логах остаются запросы вроде ?s= с пустыми или бессмысленными параметрами. Если поиск на сайте не нужен как публичная точка входа, его лучше либо закрыть, либо аккуратно перенаправить на главную, либо отдавать 404/410. Выбор зависит от того, как у вас устроена навигация и есть ли внешние ссылки на поиск.
Когда это вообще нужно
Проблема обычно проявляется не в админке, а в поисковой выдаче и аналитике. На сайт начинают заходить на адреса вида / ?s=ключ, /search/ключ/ или просто на пустую форму поиска. Если тема или плагин формируют отдельную страницу результатов, она может индексироваться как полноценная посадочная, хотя полезного контента там нет.
Есть три типичных сценария:
- поиск на сайте не нужен пользователям и только создаёт лишние URL;
- поиск нужен, но не должен попадать в индекс;
- поиск нужен, но старые URL надо мягко убрать через редирект.
Диагностика: что именно у вас индексируется
Сначала проверьте, какой формат поиска использует сайт. В WordPress базовый вариант — это GET-параметр s. Откройте несколько адресов вручную и посмотрите ответ сервера:
/ ?s=test
/?s=
/search/test/
Если у вас установлен SEO-плагин или кастомная тема, поведение может отличаться. Важно понять, отдаёт ли страница поиска 200 OK, 301, 404 или noindex. Это можно проверить через DevTools, curl -I или любой HTTP-проверщик.
curl -I https://example.com/?s=testЕсли ответ 200 и в HTML есть индексируемый контент, поисковики могут считать такую страницу обычной страницей сайта. Если ответ 301 на главную — это уже другая логика, и её надо оценивать отдельно, чтобы не сломать внутренний поиск и не создать цепочки редиректов.
Что выбрать: 404, 301 или noindex
| Вариант | Когда подходит | Минус |
|---|---|---|
| 404/410 | Поиск не нужен вообще | Пользователь не сможет искать по сайту |
| 301 на главную | Есть старые ссылки на поиск, но сам поиск не нужен | Неочевидно для пользователя, возможны нерелевантные переходы |
| noindex + работающий поиск | Поиск нужен, но не должен индексироваться | URL остаётся доступным, нужен контроль шаблона |
Если задача именно убрать страницу поиска из индекса, но оставить поиск для посетителей, чаще всего достаточно noindex и запрета на индексацию самих результатов. Если же поиск на сайте не используется, проще отдать 404 или 410 и не поддерживать лишнюю логику.
Пошаговое решение через код темы или мини-плагин
Надёжнее всего не править шаблон вручную, а вынести логику в мини-плагин или functions.php дочерней темы. Так вы не потеряете изменения после обновления.
Вариант 1: отдавать 404 для пустого поиска
Этот вариант полезен, если вы хотите оставить поиск только для реальных запросов, а пустой ?s= закрыть. Код ниже проверяет, пришёл ли пустой поисковый запрос, и переводит ответ в 404:
add_action('template_redirect', function () {
if (is_search() && '' === trim((string) get_query_var('s'))) {
global $wp_query;
$wp_query->set_404();
status_header(404);
nocache_headers();
include get_query_template('404');
exit;
}
});Это не отключает поиск целиком, но убирает бесполезную пустую страницу, которую часто создают боты и случайные переходы.
Вариант 2: перенаправлять поиск на главную
Если поиск на сайте не нужен, а старые URL уже где-то встречаются, можно сделать 301 на главную. Делать это стоит только осознанно: редирект должен быть один, без промежуточных шагов.
add_action('template_redirect', function () {
if (is_search()) {
wp_safe_redirect(home_url('/'), 301);
exit;
}
});Такой вариант удобен, когда у вас нет внутреннего поиска как функции, но есть внешние ссылки на старые поисковые URL. Для SEO это обычно лучше, чем бесконечно держать индексируемую пустую страницу.
Вариант 3: оставить поиск, но закрыть его от индексации
Если поиск нужен пользователям, а проблема только в индексации, добавьте noindex, follow на шаблон результатов. В зависимости от темы это можно сделать через wp_head:
add_action('wp_head', function () {
if (is_search()) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
});Этот способ не мешает работе поиска, но сигнализирует роботам не держать страницу в индексе. Если у вас уже подключён SEO-плагин, проверьте, не добавляет ли он свой robots meta — дублировать теги не нужно.
Если нужен более чистый вариант без кода
Когда на сайте много технических мелочей и не хочется поддерживать отдельные фрагменты вручную, удобнее использовать плагин для чистки дублей и технических страниц. Например, в Clearfy Pro есть инструменты для управления дублями и служебными URL. Это не отменяет проверки ответа сервера, но помогает централизованно держать технические настройки в одном месте: Clearfy Pro.
Плагин стоит рассматривать как способ упростить администрирование, а не как замену понимания того, что именно отдаёт сайт. Если страница поиска уже индексируется, сначала проверьте статус-код и robots meta, потом уже включайте автоматизацию.
Как проверить, что решение сработало
После внедрения откройте несколько вариантов URL и проверьте три вещи: статус ответа, наличие редиректа и мета-тег robots. Удобно смотреть через браузер и через curl.
/ ?s=testбольше не отдаёт200, если вы выбрали 404 или 301;- в HTML нет лишнего
index,followдля страницы поиска, если вы закрывали её от индексации; - в Search Console или аналогичном инструменте новые поисковые URL не появляются как полноценные страницы;
- внутренний поиск, если он нужен, продолжает работать на реальных запросах.
Дополнительно проверьте логи сервера: если боты продолжают стучаться в ?s=, это нормально. Важно, чтобы сервер отвечал предсказуемо и без лишней нагрузки.
Частые ошибки и как их исправить
Редирект на главную вместо 404 ломает аналитику
Если вы массово отправляете поисковые URL на главную, в отчётах может появиться шум: пользователи и боты будут считаться как переходы на главную, хотя пришли по мусорному адресу. Если поиск не нужен, 404 или 410 обычно честнее.
Пишут noindex, но страница всё равно индексируется
Одна мета-строка не всегда решает проблему, если поисковик уже знает URL и получает на него нормальный 200 OK. В таких случаях лучше сочетать noindex с внутренней очисткой ссылок, а при необходимости — с каноникалами или редиректом.
Правят шаблон темы, а потом теряют изменения
Это классическая ошибка. Если логика поиска нужна надолго, выносите её в дочернюю тему или мини-плагин. Иначе обновление темы вернёт всё как было.
Закрывают не только результаты, но и сам поиск для пользователей
Иногда администратор ставит редирект на все запросы ?s=, а потом обнаруживает, что поиск из меню перестал работать. Сначала решите, нужен ли поиск посетителям. Если нужен — не убирайте его полностью, ограничьтесь noindex или закрытием пустых запросов.
Безопасность и производительность
С точки зрения производительности поиск — не самая тяжёлая часть WordPress, но мусорные запросы могут создавать лишнюю нагрузку, особенно если сайт часто сканируют боты. Закрытие пустых поисковых URL и отказ от лишних индексируемых страниц уменьшают объём бесполезных обходов.
Если вы добавляете редиректы, используйте wp_safe_redirect(), а не произвольный header(). Это проще контролировать и меньше шансов случайно открыть уязвимость на внешние адреса. Для 404 не забывайте отправлять корректный статус и не выводить контент страницы как будто всё в порядке.
На сайтах с высокой посещаемостью лучше не делать тяжёлую логику в template_redirect без необходимости. Проверка должна быть короткой: определить тип запроса, выбрать статус и выйти. Чем меньше условий и сторонних вызовов, тем стабильнее поведение.
Что делать, если поиск нужен, но URL должны быть чистыми
Иногда задача не в отключении поиска, а в том, чтобы убрать из адресной строки ?s= и сделать более аккуратный маршрут. Это уже отдельная задача с rewrite-правилами и шаблоном результатов. Такой сценарий стоит внедрять только если вы готовы поддерживать кастомную логику и тестировать её после обновлений ядра, темы и SEO-плагина. Для большинства сайтов проще оставить стандартный механизм и закрыть его от индексации.
Если у вас уже есть SEO-плагин и технический долг по дублям, сначала проверьте, не решается ли вопрос настройками шаблона robots и каноникалами. Если нет — тогда переходите к коду. Важно не усложнять сайт ради косметики, если реальная проблема решается одним статусом ответа.