Страницы внутреннего поиска в WordPress часто попадают в индекс не потому, что это полезно, а потому что они доступны по обычному URL с параметром ?s=. Для поисковика это почти всегда слабая страница: мало уникального контента, много дублей, иногда бесконечные комбинации запросов. В итоге в индексе копятся мусорные URL, а краулинговый бюджет уходит не туда.
Задача здесь не в том, чтобы «спрятать поиск любой ценой», а в том, чтобы оставить его рабочим для людей и одновременно убрать из индекса технические страницы результатов поиска. Ниже — рабочие варианты для WordPress: от простого noindex до более жесткого ограничения индексации через robots.txt и HTTP-заголовки.
Когда это действительно проблема
Сначала стоит проверить, что именно индексируется. В WordPress внутренний поиск обычно выглядит так: / ?s=запрос или с дополнительными параметрами сортировки и фильтрации. Если в поиске Google или Яндекса вы видите такие URL, это уже сигнал. Особенно если рядом всплывают десятки почти одинаковых страниц с разными запросами.
Как понять, что поисковая выдача сайта расползается
- в отчёте по страницам в индексе есть URL с
?s=; - в логах или аналитике заметны частые заходы ботов на внутренний поиск;
- поисковик показывает сниппеты с пустыми или нерелевантными результатами;
- в Search Console растёт число «Обнаружено, но не проиндексировано» для поисковых URL;
- на сайте есть автоподстановка, фильтры или поиск по таксономиям, которые создают много комбинаций.
Если поиск используется как полноценная посадочная страница и на ней есть уникальный контент, закрывать его полностью не нужно. Но для обычного внутреннего поиска почти всегда лучше запретить индексацию, а не надеяться, что поисковик сам «поймёт» намерение.
Что лучше: noindex, robots.txt или редирект
Для внутреннего поиска есть несколько подходов, и они не равнозначны. Самая частая ошибка — закрыть URL в robots.txt и считать задачу решённой. Если бот не может зайти на страницу, он не увидит мета-тег noindex и может дольше держать URL в индексе как известный, но недоступный.
| Способ | Когда подходит | Плюс | Минус |
|---|---|---|---|
noindex | Для обычных страниц поиска | Явный сигнал поисковику | Нужно, чтобы бот мог зайти на страницу |
robots.txt | Для снижения обхода, но не как единственная мера | Сокращает crawl | Не гарантирует удаление из индекса |
| Редирект на главную | Если поиск вообще не нужен | Просто и жёстко | Ломает пользовательский сценарий поиска |
Для большинства сайтов разумный вариант — noindex, follow на страницах поиска. Это сохраняет переходы по ссылкам внутри результатов, но не просит поисковик добавлять саму страницу поиска в индекс.
Пошаговое решение через код темы или мини-плагин
Если нужен контролируемый вариант без зависимости от плагинов, добавьте мета-тег robots на страницу поиска. Лучше делать это в дочерней теме или в небольшом mu-plugin, а не править ядро темы напрямую.
1. Добавьте noindex для результатов поиска
<?php
add_action('wp_head', function () {
if (is_search()) {
echo '<meta name="robots" content="noindex,follow">' . "\n";
}
});Этот код выводит мета-тег только на страницах поиска. Для большинства случаев этого достаточно, чтобы поисковик перестал считать такие URL ценными для индекса.
2. Если нужен более жёсткий вариант, добавьте X-Robots-Tag
Иногда мета-тега в HTML мало, например если поиск отдаётся не как обычная страница, а через нестандартный шаблон или кэш. Тогда можно отправить HTTP-заголовок.
<?php
add_action('template_redirect', function () {
if (is_search() && !headers_sent()) {
header('X-Robots-Tag: noindex, follow', true);
}
});Заголовок полезен тем, что его видят не только поисковые системы, но и инструменты проверки заголовков. Однако не нужно ставить его на весь сайт — только на поиск.
3. Не блокируйте поиск в robots.txt без необходимости
Если вы всё же хотите уменьшить обход, можно добавить правило в robots.txt, но как дополнительную меру, а не вместо noindex.
User-agent: *
Disallow: /*?s=
Disallow: /search/Такой вариант работает не везде одинаково, потому что поисковые системы по-разному трактуют параметры URL. Поэтому проверять нужно не «на глаз», а по фактической реакции бота и состоянию индекса.
Если поиск создаёт дубли и мусорные URL
У WordPress поиск часто обрастает параметрами: сортировка, фильтры, пагинация, метки, UTM. Тогда проблема уже не только в индексации, но и в дублях. В этом случае полезно ограничить генерацию лишних URL на уровне шаблона или логики поиска.
Что можно сделать в шаблоне
- убрать индексацию страниц поиска через
noindex; - не выводить канонический URL на саму страницу поиска, если он ведёт на нестабильный набор результатов;
- отключить лишние параметры в ссылках на поиск;
- не создавать отдельные архивы для пустых поисковых запросов;
- не отдавать 200 OK для пустого поиска, если это не нужно по UX.
Если вы используете SEO-плагин, проверьте, не конфликтует ли его настройка с вашим кодом. Иногда плагин уже ставит noindex на поиск, а тема дополнительно выводит свой тег. Два одинаковых сигнала обычно не ломают сайт, но создают путаницу при диагностике.
Как проверить, что решение сработало
После внедрения важно убедиться, что страница поиска действительно отдает нужные сигналы. Проверка занимает несколько минут и экономит часы на разборе «почему всё ещё в индексе».
- Откройте страницу поиска с любым запросом, например
/?s=тест. - Посмотрите исходный код страницы и найдите
<meta name="robots" content="noindex,follow">. - Проверьте HTTP-заголовки через DevTools,
curl -Iили онлайн-проверку заголовков. - Убедитесь, что страница не закрыта в
robots.txtраньше, чем поисковик увидитnoindex. - В Search Console отправьте страницу на повторную проверку, если она уже была проиндексирована.
Пример проверки через консоль:
curl -I "https://example.com/?s=test"В ответе ищите X-Robots-Tag: noindex, follow, если вы использовали заголовок. Для мета-тега проверяйте HTML-ответ, а не только заголовки.
Частые ошибки и как их исправить
Закрыли поиск в robots.txt, но не добавили noindex
Это самая типичная ошибка. Бот может перестать обходить страницу, но уже известный URL не всегда быстро исчезает из индекса. Исправление простое: снимите жёсткий запрет на обход и добавьте noindex.
Поставили noindex на весь сайт через шаблон
Иногда условие в коде написано слишком широко, и тег появляется не только на поиске, но и на обычных страницах. Проверяйте условие is_search() и тестируйте на нескольких типах страниц.
Сломали поиск редиректом
Если вместо результатов поиска вы отправляете пользователя на главную, это может выглядеть как «чистка индекса», но фактически ломает сценарий поиска. Такой редирект допустим только если поиск на сайте вообще не нужен и вы осознанно от него отказываетесь.
Не учли кэш
Если на сайте стоит кэш страницы или CDN, старый HTML может продолжать отдавать поисковые URL без noindex. После правки очистите кэш сайта, серверный кэш и, если есть, кэш CDN.
Практика для безопасности и производительности
Закрытие поиска от индексации не ускоряет сайт напрямую, но снижает количество бесполезных обходов. Это особенно заметно на проектах с большим количеством запросов и параметров. Если поисковые страницы генерируют много мусора, полезно ещё и ограничить их создание на уровне логики поиска.
Если вы используете плагины для SEO и чистки дублей, проверьте, не умеют ли они управлять мета-тегами для поиска без ручного кода. Например, в Clearfy Pro есть инструменты для технической чистки сайта и управления дублями. Но даже в таком случае полезно понимать, какой именно сигнал уходит в HTML и заголовки.
Если сайт большой, после изменений стоит посмотреть логи обхода и отчёты Search Console: уменьшилось ли число обходов поисковых URL, не появились ли ошибки шаблона и не остались ли старые страницы в индексе.
Что делать, если страницы поиска уже в индексе
Если URL уже попали в индекс, одного добавления noindex иногда недостаточно для мгновенного удаления. Обычно нужно время на переобход. Чтобы ускорить процесс, проверьте, что страница доступна без блокировки в robots.txt, отдаёт 200 OK и содержит явный сигнал noindex. Затем отправьте проблемные URL на переобход через инструменты для вебмастеров.
Если поиск был закрыт неправильно и в индексе накопилось много мусора, сначала исправьте шаблон, потом уже занимайтесь удалением. Иначе поисковик будет снова и снова находить те же URL.