Внутренний поиск в WordPress часто создаёт страницы, которые не должны попадать в индекс: результаты по пустым запросам, однословные запросы, мусорные параметры и бесконечные комбинации URL. На небольшом сайте это выглядит как мелочь, но на практике такие страницы быстро раздувают количество дублей и мешают поисковику тратить краулинговый бюджет на полезные материалы.
Задача здесь не в том, чтобы сломать поиск. Нужно оставить его рабочим для пользователей, но убрать из индекса всё, что не даёт самостоятельной ценности: страницы вида ?s=, пустые выдачи, а иногда и отдельные шаблоны поиска в теме.
Когда проблема уже есть: как понять, что поиск индексируется
Первый признак — в отчётах поисковых систем появляются URL с параметром s или с путями, похожими на страницу поиска. Второй признак — в выдаче находятся страницы с заголовками вроде «Результаты поиска для…», хотя вы их не продвигали. Третий — в логах или аналитике видно, что боты регулярно заходят на поиск по случайным запросам.
Проверка руками занимает пару минут:
- Откройте сайт и выполните поиск по любому слову.
- Посмотрите адрес в браузере: обычно это
/?s=запросили похожий URL. - Проверьте исходный код страницы поиска: есть ли
meta name="robots"и какой у него контент. - Сделайте запрос в поиске по сайту:
site:example.com inurl:?s=илиsite:example.com "Результаты поиска".
Если страницы поиска уже в индексе, одного noindex недостаточно. Обычно нужно ещё убрать их из sitemap, чтобы не подталкивать поисковик к повторной индексации.
Что лучше: плагин, код или настройка темы
Если сайт уже использует SEO-плагин, сначала проверьте его настройки. Во многих случаях это самый безопасный путь: меньше кода, меньше риска сломать шаблон. Если SEO-плагина нет или он не управляет поисковыми страницами, проще закрыть их через код в дочерней теме или мини-плагине.
| Подход | Плюсы | Минусы |
|---|---|---|
| SEO-плагин | Быстро, без правки темы, обычно есть управление robots и sitemap | Зависит от конкретного плагина и его настроек |
| Код в теме/мини-плагине | Точный контроль, не нужен лишний плагин | Нужно аккуратно поддерживать при обновлениях |
| Правка шаблона поиска | Можно изменить поведение и заголовки страницы | Легко сломать совместимость с темой |
Пошаговое решение через код
Ниже рабочий вариант, который закрывает страницы поиска от индексации и убирает их из sitemap, если тема или SEO-плагин не делают это сами. Код лучше добавить в мини-плагин или в functions.php дочерней темы.
1. Добавить noindex для страниц поиска
add_action( 'wp_head', function () {
if ( is_search() ) {
echo '<meta name="robots" content="noindex,follow">' . "\n";
}
}, 1 );Этот фрагмент не мешает пользователю пользоваться поиском, но даёт поисковикам сигнал не индексировать страницу результатов. Для большинства сайтов этого уже достаточно, если поисковые URL не попадают в sitemap и не размножаются через параметры.
2. Убрать поиск из XML sitemap
Если вы используете собственный sitemap или плагин, который позволяет фильтровать типы URL, исключите поисковые страницы на уровне генерации. В стандартном WordPress поисковые результаты обычно не попадают в sitemap сами по себе, но в проектах с кастомной логикой это бывает иначе.
Если у вас есть кастомный список URL для sitemap, фильтруйте его до вывода:
function wpcode_filter_sitemap_urls( array $urls ): array {
return array_values( array_filter( $urls, function ( $url ) {
return strpos( $url, '?s=' ) === false;
} ) );
}Сам по себе этот пример не подключён к конкретному фильтру, потому что у разных реализаций sitemap свои хуки. Смысл здесь в логике: не отдавайте в карту сайта URL поиска, если они туда попали из кастомного генератора.
3. Ограничить пустые и мусорные запросы
Если у вас есть проблема с ботами, которые дергают ?s= без запроса, можно перенаправлять пустой поиск на главную или на страницу поиска с понятным сообщением. Это не про SEO, а про чистку мусорных страниц и логов.
add_action( 'template_redirect', function () {
if ( is_search() ) {
$query = get_search_query( false );
if ( trim( $query ) === '' ) {
wp_safe_redirect( home_url( '/' ), 302 );
exit;
}
}
} );Такой редирект стоит использовать осторожно. Если у вас в теме есть отдельная страница с сообщением «Введите запрос», редирект может ухудшить UX. В этом случае лучше оставить noindex и просто показывать нормальную пустую выдачу.
Если используется SEO-плагин
Во многих проектах проще не писать код, а проверить настройки SEO-плагина. Ищите опции вроде noindex для страниц поиска, исключить из sitemap, robots meta. Важно не путать закрытие от индексации и блокировку в robots.txt: если запретить обход, поисковик может не увидеть noindex.
Если вы используете Clearfy Pro, проверьте разделы, связанные с SEO-дублями и служебными страницами: у таких задач обычно есть готовые переключатели для архивов, вложений и других технических URL. Но даже при наличии плагина полезно вручную проверить итоговый HTML страницы поиска — именно там видно, что реально отдал сервер.
Проверка результата после внедрения
После изменений не ограничивайтесь визуальной проверкой. Нужны три шага:
- Откройте страницу поиска и убедитесь, что в
<head>появилсяnoindex,follow. - Проверьте, что поиск по сайту всё ещё работает для пользователя.
- Посмотрите, не остались ли URL поиска в sitemap и внутренних ссылках.
Для быстрой проверки можно использовать исходный код страницы или команду в терминале:
curl -I "https://example.com/?s=test"Здесь вы не увидите meta-тег, потому что он в HTML, а не в заголовках ответа. Поэтому полезнее смотреть полный документ:
curl -s "https://example.com/?s=test" | grep -i "robots\|search"Если у вас есть доступ к Search Console или аналогичному инструменту, проверьте, уменьшилось ли количество страниц поиска в отчётах по индексированию. Полное исчезновение не всегда происходит быстро: поисковик может переобходить старые URL ещё какое-то время.
Частые ошибки и как их исправить
Ставят Disallow в robots.txt вместо noindex
Это частая ошибка. Если закрыть поиск только через robots.txt, поисковик может не увидеть сигнал noindex на самой странице. В итоге URL остаётся в индексе дольше, чем нужно. Для технических страниц обычно лучше сначала отдать noindex, а уже потом при необходимости ограничивать обход.
Закрывают не только поиск, но и полезные страницы
Иногда в шаблоне темы поиск и архивы выводятся через один и тот же код. После правки под is_search() случайно задевают категории, теги или кастомные архивы. Перед публикацией проверьте, что noindex не появился на обычных страницах и записях.
Оставляют поисковые URL в sitemap
Если карта сайта генерируется кастомно, она может продолжать отдавать URL с ?s=. Тогда поисковик получает противоречивые сигналы: страница закрыта от индексации, но одновременно предлагается в sitemap. Это не критическая ошибка, но лишний шум лучше убрать.
Редиректят любой поиск на главную
Такой подход часто ломает пользовательский сценарий. Пользователь ищет товар, статью или документ и вместо результатов попадает на главную. Если нужен редирект, используйте его только для пустых запросов или явно мусорных параметров.
Практические советы по безопасности и производительности
Страницы поиска — удобная точка для мусорной нагрузки. Боты могут генерировать тысячи запросов с разными параметрами, и это бьёт по базе данных и логам. Если сайт часто получает такой трафик, имеет смысл:
- ограничить пустые запросы;
- не плодить отдельные шаблоны поиска без необходимости;
- проверить, не кэшируется ли страница поиска слишком агрессивно;
- следить за медленными запросами в базе, если поиск строится на тяжёлых JOIN.
Если поиск на сайте критичен, не отключайте его полностью ради SEO. Лучше закрыть от индексации только результаты поиска, а сам механизм оставить рабочим. Это тот случай, когда техническая аккуратность важнее грубого запрета.
Короткий чек-лист перед публикацией
- На странице поиска есть
meta robots noindex,follow. - Поиск не попал в XML sitemap.
- Пустые запросы обработаны отдельно.
- Обычные записи, категории и страницы не получили лишний
noindex. - В поиске по сайту больше не растёт число служебных URL.
Если после правок поисковые страницы всё ещё индексируются, проверьте, не переопределяет ли тему SEO-плагин ваши мета-теги. В таких случаях обычно помогает отключение дублирующей логики в одном из слоёв: либо в теме, либо в плагине, но не в обоих сразу.
}