Страницы внутреннего поиска WordPress часто создают мусор в индексе: одинаковые шаблоны, пустые выдачи, бесконечные комбинации параметров ?s=. Если сайт небольшой, это выглядит как мелочь. На практике такие URL забирают краулинговый бюджет, плодят дубли и мешают поисковику сосредоточиться на нормальных страницах.
Ниже — рабочая схема: как найти проблему, чем закрывать поиск от индексации, как не сломать навигацию и как проверить, что всё действительно сработало.
Когда внутренний поиск становится проблемой
Не каждый сайт обязан прятать поиск от роботов. Но если в выдаче поиска появляются отдельные URL с параметром ?s=, а в Яндекс Вебмастере или Google Search Console растёт число странных страниц, это уже повод вмешаться.
Типичные признаки:
- в индексе есть URL вида
/ ?s=запросили/search/запрос/; - поисковик показывает пустые или почти пустые страницы поиска;
- в логах заметны частые запросы к поиску от ботов;
- в отчётах по страницам много дублей с разными параметрами.
Что именно нужно закрывать
Обычно речь идёт не о самом поиске как функции, а о страницах результатов поиска. Пользовательский поиск должен работать. От индексации нужно убрать именно URL, которые формируются под запросы посетителей.
Диагностика: как понять, что поиск уже индексируется
Перед правками проверьте, какие именно адреса попали в индекс. Самый простой способ — поиск по сайту в поисковике:
site:example.com inurl:?s=Если сайт использует ЧПУ-поиск, проверьте и такие варианты:
site:example.com inurl:/search/В Search Console и Яндекс Вебмастере полезно смотреть:
- страницы, обнаруженные роботом, но не проиндексированные;
- дубли без выбранной канонической страницы;
- URL с параметрами;
- ошибки сканирования, если поиск отдаёт нестабильные ответы.
Если поиск уже в индексе, просто поставить noindex на шаблон мало. Нужно ещё убрать лишние сигналы: каноникал, sitemap, внутренние ссылки на мусорные URL и, при необходимости, запрет в robots.txt для обхода роботами.
Пошаговое решение
1. Добавьте noindex на страницы поиска
Самый надёжный вариант — вывести мета-тег noindex,follow только на страницы результатов поиска. Это не мешает пользователю пользоваться поиском, но даёт поисковику понятный сигнал не индексировать такие страницы.
add_action( 'wp_head', function () {
if ( is_search() ) {
echo "<meta name=\"robots\" content=\"noindex,follow\" />\n";
}
}, 1 );Этот код можно добавить в functions.php дочерней темы или в небольшой mu-plugin. Для продакшена mu-plugin обычно надёжнее: он не зависит от темы.
2. Уберите поиск из XML-карты сайта
Страницы поиска не должны попадать в sitemap. Если вы используете SEO-плагин, проверьте, не включены ли туда нестандартные типы страниц или архивы с параметрами. Если sitemap генерируется кастомно, убедитесь, что туда попадают только реальные канонические URL.
Если у вас свой генератор карты сайта, логика должна быть простой: результаты поиска, страницы с параметрами и внутренние фильтры не добавляем.
function wpexamples_is_indexable_url( $url ) {
$parts = wp_parse_url( $url );
if ( empty( $parts['query'] ) ) {
return true;
}
parse_str( $parts['query'], $query );
if ( isset( $query['s'] ) ) {
return false;
}
return true;
}Это не готовый sitemap-генератор, а пример фильтрации. Смысл в том, чтобы не допускать URL с s в карту сайта.
3. Проверьте канонический URL
Если поиск всё же доступен по прямой ссылке, на странице должен быть каноникал на саму страницу поиска или, в некоторых сценариях, на главную. Но чаще правильнее не пытаться канонизировать поисковую выдачу, а просто закрыть её от индексации.
Если у вас SEO-плагин уже ставит canonical, не дублируйте его вручную без необходимости. Два разных canonical на одной странице — частая причина путаницы.
4. При необходимости ограничьте обход в robots.txt
Это не замена noindex, а дополнительная мера. Если бот активно ходит по поисковым URL, можно ограничить их обход:
User-agent: *
Disallow: /?s=
Disallow: /search/Но тут есть нюанс: robots.txt не гарантирует удаление из индекса, если URL уже известен поисковику. Поэтому сначала ставим noindex, а robots используем как вспомогательный слой.
Сравнение подходов
| Подход | Что делает | Плюсы | Минусы |
|---|---|---|---|
| SEO-плагин | Добавляет noindex и управляет canonical | Быстро, без кода | Нужно проверить, как он работает именно с поиском |
| Код в теме / mu-plugin | Точный контроль над is_search() | Прозрачно и предсказуемо | Нужно аккуратно поддерживать |
| robots.txt | Ограничивает обход | Снижает нагрузку на бот-краулинг | Не убирает уже известные URL из индекса |
Если нужен быстрый и управляемый вариант без лишней ручной работы, удобно использовать SEO-плагин с поддержкой мета-роботов. Если задача точечная и вы не хотите зависеть от интерфейса плагина, лучше добавить код.
Проверка результата после внедрения
После правок не ориентируйтесь только на визуальную проверку страницы. Нужно убедиться, что поисковая выдача действительно закрыта для роботов.
- Откройте страницу поиска в браузере и проверьте исходный код: должен быть
noindex,follow. - Проверьте, что URL поиска не попадает в sitemap.
- В Search Console отправьте страницу на повторную проверку, если она уже была в индексе.
- Через несколько дней проверьте, уменьшилось ли число URL с
?s=в отчётах.
Если используете командную строку на сервере, можно быстро проверить наличие мета-тега:
curl -s https://example.com/?s=test | grep -i robotsЕсли в ответе есть noindex,follow, значит сервер отдаёт нужную разметку. Но это ещё не означает, что поисковик уже переобходил страницу и снял её из индекса.
Частые ошибки и как их исправить
Ставят noindex только на шаблон, но оставляют URL в sitemap
В этом случае поисковик продолжает получать противоречивые сигналы: страница закрыта от индексации, но при этом активно рекламируется через карту сайта. Уберите такие URL из sitemap полностью.
Закрывают поиск через robots.txt без noindex
Это распространённая ошибка. Если URL уже известен поисковику, запрет на обход не равен удалению из индекса. Сначала noindex, потом при необходимости Disallow.
Ставят canonical на главную для всех поисковых страниц
Такой приём иногда используют, но он не всегда уместен. Для результатов поиска это может выглядеть как искусственная подмена релевантности. Если цель — убрать мусор, лучше использовать noindex.
Не учитывают AJAX-поиск
Если поиск работает через AJAX и отдельные URL не создаются, проблема может быть не в индексации, а в том, что бот всё равно видит серверный шаблон поиска. Проверьте, какие URL реально доступны по прямой ссылке.
Безопасность и производительность
Закрытие поиска от индексации не должно ломать пользовательский сценарий. Не отключайте сам поиск и не режьте его на уровне сервера без причины. Если на сайте много запросов к поиску, полезно посмотреть логи и убедиться, что бот не генерирует лишнюю нагрузку.
Для сайтов с большим количеством дублей и технического мусора иногда проще использовать инструменты вроде Clearfy Pro: там есть функции для чистки лишних элементов и управления SEO-сигналами. Но даже с плагином важно понимать, что именно он меняет, а не включать всё подряд.
Что проверить после релиза
- страницы поиска отдают
noindex,follow; - в sitemap нет URL с
?s=; - внутренний поиск работает для пользователей;
- в Search Console и Вебмастере уменьшается число мусорных URL;
- нет конфликтов между кодом темы и SEO-плагином.
Если после внедрения поиск всё ещё индексируется, проверьте, не переопределяет ли ваш SEO-плагин robots meta на уровне шаблона. В таких случаях лучше оставить один источник правды: либо код, либо настройки плагина, но не оба сразу.