Внутренний поиск WordPress часто создаёт мусорные URL вида /?s=запрос, а иногда ещё и страницы с пустым результатом. Для пользователя это нормально, для поисковой системы — не всегда. Если такие страницы начинают попадать в индекс, они размывают качество обхода и создают лишние дубли, особенно на сайтах с большим количеством контента.
Ниже — рабочая схема: как понять, что проблема именно в поисковых страницах, чем их лучше закрывать и как проверить, что всё действительно сработало.
Когда внутренний поиск становится проблемой
Не каждый сайт обязан закрывать поиск от индексации. Если у вас небольшой блог и поисковые страницы не попадают в выдачу, трогать ничего не нужно. Но если в Search Console уже видны URL с параметром s, а в индексе появляются страницы с тонким или пустым контентом, это повод вмешаться.
Типичные признаки:
- в индексе есть URL вида
/?s=...; - поисковые страницы получают трафик из поиска, но не дают полезного результата;
- в отчётах видны дубли и страницы с низкой ценностью;
- поисковые боты тратят время на перебор внутренних запросов.
Что именно нужно закрывать
Обычно речь идёт не только о результатах поиска, но и о страницах без запроса. Если шаблон темы выводит страницу поиска даже при пустом s, такую страницу тоже лучше не индексировать. При этом сам поиск на сайте продолжит работать для пользователей — мы ограничиваем только индексацию, а не функциональность.
Диагностика: как понять, что проблема есть
Сначала проверьте, как WordPress отдаёт поисковые URL. Откройте несколько вариантов:
https://site.ru/?s=тестhttps://site.ru/?s=- страницу поиска в теме, если она использует красивый URL.
Посмотрите исходный код страницы и заголовки. Если в <head> нет noindex, а страница доступна по HTTP 200, поисковик может её индексировать. Ещё полезно проверить, не создаёт ли тема отдельный шаблон поиска с собственными мета-тегами, которые конфликтуют с SEO-плагином.
Если у вас установлен SEO-плагин, проверьте его настройки для архивов и служебных страниц. Но не полагайтесь только на интерфейс: иногда тема или другой плагин переопределяют поведение через фильтры.
Пошаговое решение
Есть три нормальных подхода: через SEO-плагин, через код или через комбинацию обоих. Выбор зависит от того, насколько у вас контролируемая установка.
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| SEO-плагин | Если нужен быстрый и безопасный вариант без правки темы | Просто включить, меньше риска сломать сайт | Не всегда закрывает именно поиск, а не все архивы сразу |
| Код в теме или mu-plugin | Если нужен точный контроль | Можно закрыть только нужные URL и добавить заголовки | Нужно аккуратно тестировать после обновлений |
| Комбинированный вариант | Если SEO-плагин уже используется, но его недостаточно | Гибкость и предсказуемость | Важно не задублировать правила |
Вариант 1: закрыть поиск через код
Если вам нужен надёжный и прозрачный способ, добавьте правило, которое ставит noindex, follow для поисковых страниц. Удобнее делать это в mu-plugin или в дочерней теме, а не в родительской теме, чтобы не потерять правку при обновлении.
<?php
/**
* Plugin Name: Noindex for search pages
*/
add_action('wp_head', function () {
if (is_search()) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1);
add_filter('wp_robots', function ($robots) {
if (is_search()) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Этот вариант хорош тем, что использует штатный механизм wp_robots. Если тема уже выводит robots-мета через WordPress, вы не создаёте лишний дублирующий код. Но если в теме есть собственный вывод <meta name="robots">, проверьте, не появляется ли на странице два одинаковых тега.
Вариант 2: запретить индексацию через SEO-плагин
Если у вас уже стоит SEO-плагин, сначала проверьте его настройки. Во многих случаях можно закрыть служебные страницы без кода. Это удобнее для редакторов и администраторов, которые не хотят лезть в PHP.
Но здесь есть нюанс: некоторые плагины дают настройку для архивов или таксономий, а поиск закрывают только косвенно. Поэтому после изменения обязательно смотрите исходный код страницы и заголовки ответа.
Вариант 3: дополнительно убрать поиск из карты сайта
Поисковые URL не должны попадать в XML-карту сайта. Обычно WordPress сам их туда не добавляет, но если у вас кастомная генерация ссылок или нестандартный SEO-плагин, это стоит проверить отдельно. Карта сайта должна содержать только канонические страницы, которые вы действительно хотите индексировать.
Проверка результата после внедрения
После правки не ограничивайтесь визуальной проверкой. Нужны три шага:
- Откройте
/?s=тести посмотрите исходный код: должен бытьnoindex. - Проверьте HTTP-заголовки, если у вас есть доступ к серверу или инструментам разработчика.
- В Search Console отправьте URL на проверку и посмотрите, как робот видит страницу.
Если используете командную строку, можно быстро проверить заголовки через curl:
curl -I 'https://site.ru/?s=тест'В ответе важно увидеть, что страница не выглядит как обычная индексируемая посадочная. Если сервер или плагин отдают X-Robots-Tag: noindex, это тоже рабочий вариант. Главное — чтобы правило реально применялось к поисковым URL.
Частые ошибки и как их исправить
- Закрыли весь сайт вместо поиска. Обычно это происходит, если в SEO-плагине включили глобальный noindex для архива или случайно добавили правило не в ту условную проверку. Решение: проверьте, что условие завязано именно на
is_search(). - Добавили meta robots, но страница всё равно индексируется. Иногда поисковик видит старую версию страницы или правило конфликтует с каноникалами. Решение: проверьте заголовки ответа и дождитесь переобхода.
- В теме два тега robots. Это бывает, когда SEO-плагин и кастомный код оба выводят мета-тег. Решение: оставьте один источник правды.
- Закрыли поиск, но он остался в sitemap. Значит, карта сайта генерируется отдельно и не учитывает ваш фильтр. Решение: проверьте настройки sitemap и исключите служебные URL.
- Поставили noindex, но не follow не сработал. Некоторые плагины или темы переопределяют robots-правила. Решение: смотрите итоговый HTML, а не только настройки в админке.
Что делать с пустыми и мусорными поисковыми запросами
Если сайт получает много пустых или бессмысленных запросов, можно не только закрыть индексацию, но и ограничить саму генерацию таких страниц. Например, не показывать отдельную страницу поиска без запроса и возвращать пользователя на обычную страницу сайта.
<?php
add_action('template_redirect', function () {
if (is_search() && !get_search_query(false)) {
wp_safe_redirect(home_url('/'), 302);
exit;
}
});Такой редирект стоит использовать осторожно. Он уместен, если пустой поиск не несёт ценности и только создаёт мусор. Если же тема или каталог завязаны на поиск как на часть интерфейса, лучше оставить страницу, но закрыть её от индексации.
Безопасность и производительность
Не правьте functions.php основной темы на живом сайте, если у вас нет нормального процесса деплоя. Для таких задач безопаснее использовать mu-plugin или дочернюю тему. Тогда обновление темы не сотрёт правку, а откат будет проще.
Если на сайте много трафика, не добавляйте тяжёлую логику в wp_head. Для проверки is_search() этого не нужно — условие дешёвое. Но если вы начинаете строить сложные правила по ролям, языкам и параметрам запроса, лучше вынести их в отдельный плагин и протестировать на staging.
Как понять, что решение работает стабильно
Через несколько дней после внедрения проверьте:
- страницы поиска больше не появляются в индексе как обычные URL;
- в исходном коде остаётся один корректный robots-мета;
- в Search Console нет новых предупреждений по этим адресам;
- поисковые страницы не попадают в sitemap;
- пользовательский поиск на сайте продолжает работать.
Если всё это выполняется, значит вы закрыли именно техническую проблему, а не просто спрятали симптом. Для WordPress это обычно и есть правильный результат: минимальное вмешательство, понятное правило и проверка на уровне HTML, а не только в админке.