Страницы внутреннего поиска WordPress часто создают мусор в индексе: одинаковые шаблоны, пустые выдачи, десятки URL с разными запросами. При этом сам поиск на сайте должен продолжать работать для пользователей. Ниже — рабочий сценарий, как закрыть именно страницы результатов поиска от индексации, не ломая форму поиска и не трогая полезные страницы сайта.
Когда это действительно проблема
Если в поисковой выдаче Google или Яндекса появляются URL вида ?s=, это обычно не приносит трафик и только раздувает индекс. Чаще всего такие страницы имеют слабый или нулевой контент, а поисковик тратит на них краулинговый бюджет вместо нормальных материалов.
Проверить проблему можно быстро:
- введите в поиске сайта несколько разных запросов и посмотрите, меняется ли URL на
?s=запрос; - в Google Search Console откройте отчёт по страницам и найдите URL с параметром
s; - в поиске по сайту через оператор
site:example.ru inurl:?s=проверьте, попали ли такие страницы в индекс; - посмотрите, не индексируются ли пустые или почти пустые результаты поиска.
Что не стоит делать
Не закрывайте весь сайт в robots.txt и не ставьте глобальный noindex на все страницы, где есть форма поиска. Пользовательский поиск должен остаться доступным, а под запрет должны попасть только страницы результатов.
Какой способ выбрать: код, SEO-плагин или robots.txt
Для этой задачи есть три подхода. На практике лучше всего работает комбинация: noindex для самих страниц результатов и, при необходимости, ограничение обхода через robots.txt. Один только robots.txt не гарантирует удаление URL из индекса, если на них уже есть ссылки.
| Подход | Что делает | Плюс | Минус |
|---|---|---|---|
| Код в теме/плагине | Добавляет noindex,follow на search-страницы | Точно и без лишних зависимостей | Нужно аккуратно внедрить |
| SEO-плагин | Даёт настройку для архивов/страниц поиска | Быстро для редактора | Не всегда есть тонкая гранулярность |
robots.txt | Ограничивает обход | Просто добавить | Не удаляет уже известные URL из индекса |
Пошаговое решение через код
Если нужен предсказуемый результат, добавьте мета-тег noindex,follow только на страницы поиска. Это можно сделать в дочерней теме или в небольшом mu-plugin. Второй вариант безопаснее: он не сломается при смене темы.
<?php
/**
* Plugin Name: Search Pages Noindex
* Description: Adds noindex to WordPress search result pages.
*/
add_action( 'wp_head', function () {
if ( is_search() ) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1 );
Этот вариант не мешает пользователю пользоваться поиском. Поисковик видит страницу, но получает сигнал не включать её в индекс. Атрибут follow оставляет возможность переходить по ссылкам внутри результатов, если они есть.
Если нужен более жёсткий вариант для пустых выдач
Иногда полезно отдельно обработать пустой поиск: если запрос есть, но результатов нет, можно отдавать noindex и не показывать лишний шум. Это особенно актуально для сайтов с большим количеством однотипных запросов.
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_search() && ! have_posts() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );
Такой способ предпочтительнее, чем ручной вывод мета-тега, если вы уже используете современную логику wp_robots. Но важно помнить: фильтр сработает только в контексте, где WordPress уже сформировал запрос и знает, есть ли записи.
Что добавить в robots.txt
robots.txt не заменяет noindex, но помогает сократить обход мусорных URL. Для поисковых страниц обычно достаточно закрыть параметр ?s= от сканирования, если у вас нет других критичных сценариев с этим параметром.
User-agent: *
Disallow: /*?s=
Disallow: /search/
Если на сайте используется ЧПУ-поиск вида /search/term/, проверьте реальный шаблон URL. Не копируйте правило вслепую: лишний Disallow может задеть полезные страницы.
Как проверить, что всё сработало
После внедрения не ограничивайтесь просмотром кода страницы. Нужно проверить и HTML, и индексацию, и поведение поиска.
- Откройте страницу поиска с любым запросом и убедитесь, что в
<head>есть<meta name="robots" content="noindex,follow" />. - Проверьте исходный код страницы, а не только визуальный результат в браузере.
- В Search Console отправьте URL на повторную проверку, если он уже был в индексе.
- Через несколько дней посмотрите, уменьшается ли число проиндексированных search-URL.
- Убедитесь, что обычный поиск по сайту продолжает выдавать результаты пользователю.
Частые ошибки и как их исправить
Закрыли поиск в robots.txt, но URL остались в индексе
Это ожидаемо. Robots.txt запрещает обход, но не гарантирует удаление уже известных страниц. Для вывода URL из индекса нужен noindex или удаление страницы из доступного обхода с последующей переобходом.
Поставили noindex на весь сайт через SEO-плагин
Такое случается, если в настройках архивов или шаблонов перепутали тип страницы. Проверьте, что правило применяется только к is_search(), а не к записям, рубрикам или страницам.
Сломали поиск после правки шаблона
Обычно причина в том, что вместе с мета-тегом изменили сам шаблон search.php или фильтры запроса. Если задача только в индексации, не трогайте SQL-запрос и не подменяйте логику поиска без необходимости.
Ожидали мгновенного исчезновения из выдачи
Поисковые системы не обновляют индекс сразу. После внедрения нужно дождаться переобхода и повторной обработки страниц. Если URL критичен, используйте инструменты удаления в панели вебмастера, но это уже отдельная операция.
Практические советы по безопасности и производительности
Если у сайта большой поток поисковых запросов, страницы поиска могут создавать лишнюю нагрузку. В таком случае полезно:
- ограничить индексирование именно результатов, а не самой формы поиска;
- не хранить тяжёлые блоки в шаблоне search.php, если они не нужны на выдаче;
- проверить, не кэшируется ли поиск слишком агрессивно и не отдаёт ли устаревшие результаты;
- не открывать search-URL для массовой генерации внешними ссылками и внутренними фильтрами.
Если вы используете SEO-плагин, проверьте, не дублирует ли он мета-теги robots. Два разных источника noindex обычно не ломают страницу, но усложняют диагностику. Для точечной настройки удобнее держать правило в одном месте — либо в коде, либо в SEO-плагине.
Если нужен более широкий контроль над дублями и технической чисткой сайта, в экосистеме WPShop есть Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но для одной задачи с поисковыми страницами код выше обычно проще и прозрачнее.
В итоге рабочая схема выглядит так: noindex,follow для search-страниц, при необходимости — аккуратное правило в robots.txt, затем проверка в исходнике и в панели вебмастера. Это закрывает именно мусорные результаты поиска и не мешает пользователю искать по сайту.