Страницы внутреннего поиска в WordPress часто попадают в индекс как тонкие и дублирующиеся URL: ?s=..., а иногда ещё и с параметрами сортировки или фильтрации, если тема или плагин добавляют их поверх поиска. Для SEO это почти всегда лишний шум. При этом полностью ломать поиск не нужно — задача обычно сводится к тому, чтобы оставить его рабочим для пользователей и одновременно не отдавать поисковикам страницы результатов.
Ниже — рабочий сценарий: что проверить, как закрыть поиск от индексации, когда достаточно noindex, а когда лучше отдавать 404 или 410. Код рассчитан на обычный WordPress без выдуманных хуков и без привязки к конкретной теме.
Когда страницы поиска становятся проблемой
Если сайт небольшой, внутренний поиск может вообще не создавать заметной нагрузки. Но на контентных проектах и каталогах ситуация другая: поисковые URL генерируются под каждый запрос, а поисковики иногда начинают обходить их как отдельные страницы. В результате в индексе появляются десятки или сотни адресов с почти пустым контентом.
Типичные признаки:
- в Google Search Console видны URL вида
/?s=...или/search/?s=...; - в выдаче встречаются страницы поиска с заголовками вроде «Результаты поиска для…»;
- в логах сервера заметны частые заходы ботов на поисковые URL с разными запросами;
- поисковые страницы конкурируют с нормальными посадочными страницами по низкочастотным запросам.
Что именно нужно закрывать
Обычно речь идёт не о самом поиске как функции, а о страницах результатов. Пользователь должен продолжать искать по сайту, но поисковики не должны индексировать выдачу. Это разные задачи, и их нельзя смешивать.
| Подход | Когда уместен | Минус |
|---|---|---|
noindex, follow | Поиск нужен пользователям, но страницы не должны попадать в индекс | Боты всё равно могут обходить URL, если на них есть ссылки |
Запрет в robots.txt | Как дополнительная мера для снижения обхода | Не гарантирует удаление уже проиндексированных URL |
404 или 410 | Если поиск на сайте вообще не нужен | Ломает пользовательский сценарий |
Диагностика: как понять, что проблема есть
Сначала проверьте, как WordPress отдаёт страницы поиска сейчас. Откройте несколько URL с запросом и посмотрите исходный код страницы. Если там есть мета-тег robots с index, а в выдаче уже есть поисковые URL, значит закрытие не настроено.
Полезно проверить и серверный ответ. Для обычной страницы поиска он должен быть 200 OK, если поиск нужен пользователям. Если вы решили полностью отключить поиск, тогда уже имеет смысл отдавать 404 или 410.
curl -I "https://example.com/?s=wordpress"Если вы используете SEO-плагин, сначала посмотрите его настройки. Многие плагины умеют задавать noindex для архивов поиска без кода. Но если нужно точечно управлять логикой или у вас конфликт с темой, надёжнее сделать это на уровне темы или мини-плагина.
Пошаговое решение через код
Самый безопасный вариант для большинства сайтов — оставить поиск доступным, но добавить noindex, follow на страницы результатов. Это не мешает пользователю искать по сайту и снижает шанс попадания таких URL в индекс.
Шаг 1. Добавьте robots-мета для поисковых страниц
Вставьте код в functions.php дочерней темы или в собственный плагин. Он добавит нужный robots-мета только на страницы поиска.
add_filter('wp_robots', function ($robots) {
if (is_search()) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Этот способ предпочтительнее, чем ручная печать <meta name="robots"> в шаблоне, потому что WordPress сам соберёт корректный тег, а другие фильтры не будут ломать разметку.
Шаг 2. При необходимости ограничьте каноникал
Если поисковая страница уже индексировалась, одного noindex может быть мало для быстрой чистки. В таком случае проверьте, не ставит ли тема каноникал на саму поисковую выдачу. Для поисковых страниц обычно не стоит указывать их как канонические версии контента.
Если SEO-плагин позволяет, оставьте каноникал по умолчанию для обычных страниц, но не подменяйте его вручную для поиска без необходимости. Здесь важно не создать конфликт между плагином и кодом.
Шаг 3. Добавьте запрет в robots.txt как дополнительный слой
Это не замена noindex, а вспомогательная мера. Она уменьшает обход мусорных URL, особенно если боты активно генерируют запросы поиска.
add_filter('robots_txt', function ($output, $public) {
$output .= "\nUser-agent: *\nDisallow: /?s=\nDisallow: /search/\n";
return $output;
}, 10, 2);Здесь есть нюанс: путь поиска зависит от структуры сайта. Если у вас поиск живёт не в корне, а, например, на /search/, подстройте правило под реальный URL. Не копируйте строку вслепую.
Если поиск на сайте не нужен вообще
Иногда внутренний поиск только создаёт нагрузку и не даёт пользы. Такое бывает на небольших лендингах, сайтах-визитках или проектах, где поиск заменён фильтрами и навигацией. Тогда лучше не закрывать выдачу от индексации, а отключить саму функцию поиска для пользователей.
В этом случае можно перехватить запрос и вернуть 404 или 410. 410 Gone обычно уместен, если вы сознательно убрали поиск навсегда. 404 — если хотите просто показать, что страницы не существует.
add_action('template_redirect', function () {
if (is_search()) {
global $wp_query;
$wp_query->set_404();
status_header(410);
nocache_headers();
exit;
}
});Такой вариант стоит применять только если вы понимаете последствия: пользователи больше не смогут искать по сайту, а ссылки на ?s= перестанут работать как раньше.
Как проверить, что решение сработало
После внедрения не ограничивайтесь визуальной проверкой. Нужны минимум три шага:
- откройте страницу поиска в браузере и проверьте исходный код на наличие
noindex; - проверьте заголовки ответа через
curl -Iили DevTools, если вы меняли статус-код; - в Search Console отправьте URL на повторную проверку, если они уже были в индексе.
Если используете noindex, не ждите мгновенного исчезновения из индекса. Поисковику нужно переобойти страницу. Если же вы поставили 410, удаление обычно идёт быстрее, но это зависит от частоты обхода и истории URL.
Частые ошибки и как их исправить
Закрыли поиск только в robots.txt
Это частая ошибка. Запрет в robots.txt не гарантирует удаление уже известных URL из индекса. Если страница уже проиндексирована, нужен noindex или статус 404/410.
Поставили noindex, но оставили конфликтующий каноникал
Если SEO-плагин или тема подставляет канонический URL на главную или на саму поисковую выдачу, поисковик может интерпретировать страницу не так, как вы ожидаете. Проверьте исходный код и настройки SEO-плагина.
Сломали поиск для пользователей
Это случается, когда вместо noindex сразу возвращают 404 или отключают шаблон поиска без анализа. Если поиск нужен посетителям, не трогайте статус-код. Достаточно закрыть от индексации.
Не учли нестандартный URL поиска
Некоторые темы и плагины используют не стандартный ?s=, а собственный путь. Перед добавлением правил в robots.txt и перед написанием условий проверьте реальный адрес, который генерирует сайт.
Практические советы по безопасности и производительности
Если на сайт идут боты, которые массово перебирают поисковые запросы, это может создавать лишнюю нагрузку. В таком случае полезно смотреть не только на SEO, но и на серверные логи. Иногда проблему решает ограничение частоты запросов на уровне хостинга или WAF, а не только мета-теги.
Если вы ведёте большой контентный проект, имеет смысл регулярно проверять индекс на наличие поисковых URL и других технических дублей. Для этого удобно использовать Search Console, а также периодически смотреть, какие страницы реально получают обход от ботов.
Если нужен более широкий набор инструментов для чистки дублей, robots и технической оптимизации, можно посмотреть на Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином полезно понимать, что именно он меняет и где это проверять вручную.
Главная идея простая: не пытайтесь лечить внутренний поиск одной настройкой. Сначала определите, нужен ли он пользователям, потом выберите способ закрытия, а после этого обязательно проверьте исходный код, статус ответа и поведение в Search Console.