Внутренний поиск WordPress часто создает страницы, которые не нужны в поиске: результаты по пустым запросам, мусорные запросы, дубли с параметрами и страницы без полезного контента. Если такие URL попадают в индекс, они размывают качество сайта и мешают поисковым системам тратить краулинговый бюджет на важные страницы.
Ниже — рабочий сценарий: как закрыть от индексации именно страницы поиска, не ломая сам поиск для пользователей и не трогая полезные разделы сайта.
Когда это действительно проблема
Сначала стоит убедиться, что речь именно о страницах поиска, а не о нормальных посадочных страницах с фильтрами или архивами. В WordPress поисковая выдача обычно выглядит так: /?s=запрос. Если сайт активно индексируется, в отчете поисковой системы можно увидеть URL с параметром s, которые ведут на пустые или слабые страницы.
Признаки в индексе
- в поиске находятся URL вида
?s=; - в выдаче есть страницы с одинаковыми заголовками и разным запросом;
- в логах или аналитике заметны частые заходы на пустые поисковые запросы;
- в sitemap таких URL нет, но они все равно индексируются по ссылкам или из старых обходов.
Что не стоит делать
Не закрывайте поиск только через robots.txt и не считайте это полноценным решением. Если URL уже известен поисковику, запрет в robots может оставить его в индексе без содержимого. Для таких страниц обычно нужен именно noindex, а robots.txt — только как дополнительная мера.
Диагностика: как понять, что индексируется именно поиск
Проверьте несколько типовых URL вручную. Откройте страницу поиска с запросом, например https://example.com/?s=test, и посмотрите исходный код страницы. Если в <head> нет noindex, поисковик может индексировать эту страницу при наличии ссылок или внешних сигналов.
Второй шаг — проверить, не переопределяет ли тему или SEO-плагин мета-теги. Иногда разработчик уже добавил noindex для поиска, но другой плагин или кастомный код его убирает.
<?php
// Быстрая проверка в шаблоне или через временный mu-plugin.
add_action( 'wp_head', function () {
if ( is_search() ) {
echo "<!-- search page detected -->\n";
}
}, 1 );
Этот фрагмент не решает задачу сам по себе, но помогает убедиться, что WordPress действительно распознает страницу как поисковую.
Пошаговое решение: закрываем поиск от индексации
Есть три рабочих подхода. Выбор зависит от того, используете ли вы SEO-плагин и нужен ли вам полный контроль через код.
| Способ | Когда подходит | Минус |
|---|---|---|
| SEO-плагин | Если уже стоит Yoast, Rank Math или аналог | Зависимость от настроек плагина |
| Код в теме / mu-plugin | Если нужен точечный контроль без лишних плагинов | Нужно аккуратно тестировать после обновлений |
| robots.txt | Как дополнительный слой | Не гарантирует удаление из индекса |
Вариант 1. Через SEO-плагин
Если у вас уже есть SEO-плагин, найдите настройку для страниц поиска и включите noindex. В большинстве случаев это самый безопасный путь: плагин сам добавит мета-тег и, если нужно, заголовок для robots.
После сохранения настроек откройте страницу поиска и проверьте исходный код. В нем должен появиться тег вида:
<meta name="robots" content="noindex,follow" />Вариант 2. Через код
Если не хотите зависеть от плагина, добавьте фильтр в functions.php дочерней темы или, лучше, в небольшой mu-plugin. Для WordPress это надежнее, чем править шаблон вручную.
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_search() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );
Этот способ использует стандартный фильтр wp_robots, который WordPress применяет для формирования robots-мета. Он не ломает вывод страницы и работает без внешних зависимостей.
Вариант 3. Дополнительно ограничить robots.txt
Если хотите снизить активность роботов на поисковых URL, можно добавить правило в robots.txt. Но повторюсь: это только дополнительный слой, а не замена noindex.
User-agent: *
Disallow: /?s=
Disallow: /*?s=
Такое правило не всегда идеально интерпретируется всеми роботами, поэтому не стоит полагаться только на него. Основной контроль должен быть на уровне мета-тега.
Как проверить, что решение сработало
Проверка должна быть не «на глаз», а по конкретным признакам.
- Откройте страницу поиска и посмотрите исходный код: должен быть
noindex. - Проверьте заголовок ответа, если используете серверные правила или SEO-плагин с HTTP-headers.
- В инструменте проверки URL у поисковой системы убедитесь, что страница помечена как неиндексируемая.
- Через несколько обходов проверьте, исчезают ли новые URL поиска из отчетов по индексации.
Если страница все еще попадает в индекс, значит, где-то остался конфликт: другой плагин переопределяет robots, тема выводит собственный meta robots, либо на поиск ведут внутренние ссылки с параметрами.
Частые ошибки и как их исправить
Ошибка 1. Закрыли только в robots.txt
Это самая частая проблема. Робот может увидеть URL, но не получить содержимое, и тогда страница останется в индексе как «URL без описания». Исправление простое: добавьте noindex на саму поисковую страницу.
Ошибка 2. Поставили noindex, но забыли про follow
Для внутренних поисковых страниц обычно логично оставить follow, чтобы робот мог проходить по ссылкам на полезные страницы. Если поставить noindex,nofollow без причины, можно ухудшить обход сайта.
Ошибка 3. Конфликт с SEO-плагином
Если плагин уже управляет robots, ваш код может не сработать или дать дублирующий тег. В этом случае оставьте только один источник правды: либо настройки плагина, либо код.
Ошибка 4. Закрыли не только поиск, но и полезные страницы с параметрами
Иногда разработчики пишут слишком широкие правила и случайно закрывают страницы фильтрации, сортировки или пагинации. Проверяйте, что условие срабатывает именно на is_search(), а не на все URL с параметрами.
Практические советы по безопасности и производительности
Если на сайте много мусорных поисковых запросов, это не только SEO-проблема. Такие URL могут создавать лишнюю нагрузку на базу и логи. Полезно ограничить совсем пустые запросы и не давать им генерировать тяжелую выдачу.
<?php
add_action( 'template_redirect', function () {
if ( is_search() ) {
$query = trim( (string) get_search_query() );
if ( $query === '' ) {
wp_safe_redirect( home_url( '/' ), 302 );
exit;
}
}
} );
Этот пример не обязателен для всех сайтов. Но если у вас часто появляются пустые поисковые запросы из ботов, редирект на главную может уменьшить шум в логах и убрать бесполезные страницы из обхода.
Если вы предпочитаете решать задачу без кода, можно посмотреть в сторону SEO-плагинов с управлением индексацией и технической чисткой сайта. Например, в Clearfy Pro есть инструменты для отключения лишних страниц и дублей, но использовать их стоит только после проверки, какие именно URL они затрагивают.
Что делать после внедрения
Не ждите мгновенного исчезновения URL из индекса. Сначала поисковик должен переобойти страницы и увидеть новый статус. В этот период полезно:
- проверить, что новые поисковые URL не появляются в sitemap;
- убедиться, что внутренние ссылки не ведут на мусорные запросы;
- посмотреть, не генерирует ли тема ссылки на поиск в блоках, виджетах или хлебных крошках;
- отслеживать отчеты по индексации хотя бы несколько обходов подряд.
Если нужно, можно дополнительно закрыть от индексации страницы поиска на уровне шаблона, но в большинстве случаев достаточно корректного noindex и аккуратной проверки конфигурации.