Внутренний поиск WordPress часто создаёт страницы вида /?s=..., которые не несут ценности для поиска, но могут попадать в индекс. На небольших сайтах это обычно не критично, а вот на контентных проектах такие URL быстро разрастаются, засоряют отчёты и иногда начинают конкурировать с нормальными посадочными страницами. Если задача именно в том, чтобы убрать страницы результатов поиска из индекса, лучше решать её явно: через noindex, а не через случайные запреты в robots.txt.
Когда это действительно проблема
Сначала стоит убедиться, что речь именно о страницах поиска, а не о другом типе дублей. Типичный сценарий выглядит так: в Search Console появляются URL с параметром s, в выдаче видны страницы поиска по запросам пользователей, а в логах или аналитике заметно, что роботы регулярно заходят на такие адреса. Сам по себе факт обхода не страшен. Проблема начинается, когда поисковик начинает считать эти страницы отдельными документами и тратить на них краулинговый бюджет.
Что проверить перед изменениями
- Есть ли в индексе URL вида
/ ?s=или/search/...в зависимости от темы и настроек. - Отдаёт ли страница поиска код ответа
200 OK. - Есть ли на ней уникальный контент или это просто список результатов без полезной ценности для поиска.
- Не используется ли внутренний поиск как важная посадочная страница для пользователей из сайта, а не из поисковиков.
Если поиск нужен только посетителям сайта, а не поисковым системам, его лучше закрыть от индексации. Если же у вас есть отдельная поисковая витрина с полезной структурой и фильтрами, подход может быть другим. Но для стандартного WordPress-поиска обычно нужен именно noindex.
Диагностика: как понять, что WordPress уже отдаёт лишние страницы поиска
Откройте любой результат внутреннего поиска и посмотрите исходный код страницы. Важно проверить не только наличие текста на странице, но и мета-роботы. Если там нет noindex, поисковик может индексировать такой URL, особенно если на него есть внутренние ссылки или он попал в карту сайта через сторонний плагин.
Ещё один полезный тест — посмотреть заголовки ответа и канонический URL. Для этого удобно использовать curl:
curl -I "https://example.com/?s=тест"
В ответе вы увидите статус, а иногда и заголовки, которые добавляет тема или SEO-плагин. Но для индексации важнее всего именно наличие noindex в HTML или в заголовке X-Robots-Tag, если вы используете такой способ.
Пошаговое решение через код
Самый надёжный вариант для стандартного WordPress — добавить noindex, follow на страницы поиска. Так поисковик не будет индексировать саму страницу, но сможет переходить по ссылкам внутри неё, если они есть. Для этого не нужно трогать robots.txt: запрет в robots не гарантирует удаление URL из индекса, если он уже известен поисковику.
Вариант через functions.php или мини-плагин
Если у вас нет SEO-плагина, который уже управляет мета-роботами, можно добавить код в дочернюю тему или в небольшой mu-plugin:
<?php
add_filter('wp_robots', function (array $robots): array {
if (is_search()) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});
Этот способ работает на современных версиях WordPress, где используется фильтр wp_robots. Он не ломает шаблоны и не требует вмешательства в разметку темы. Если у вас уже подключён SEO-плагин, проверьте, не переопределяет ли он robots meta своим кодом.
Если нужен жёсткий запрет через заголовок
Иногда удобнее отдавать X-Robots-Tag на уровне PHP. Это полезно, если тема не выводит корректный <meta name="robots"> или если вы хотите управлять индексацией без правки шаблонов. Но такой вариант стоит использовать аккуратно: он должен срабатывать только на страницах поиска.
<?php
add_action('template_redirect', function () {
if (is_search() && !is_admin()) {
header('X-Robots-Tag: noindex, follow', true);
}
});
Этот код не заменяет нормальную SEO-настройку, а лишь дублирует её на уровне заголовка. Для большинства сайтов достаточно первого варианта с wp_robots.
Что выбрать: код, SEO-плагин или оба варианта
Если на сайте уже стоит SEO-плагин, сначала проверьте его настройки. Многие плагины умеют закрывать страницы поиска без дополнительного кода. Но если плагин не даёт точной настройки или вы не хотите зависеть от лишнего функционала, код даёт больше контроля.
| Подход | Плюсы | Минусы |
|---|---|---|
| SEO-плагин | Удобно, без правки кода, часто уже есть в проекте | Иногда настройки спрятаны, возможны конфликты с темой |
Код через wp_robots |
Прозрачно, мало зависимостей, легко проверить | Нужно аккуратно разместить код и не сломать тему |
Заголовок X-Robots-Tag |
Работает на уровне ответа сервера, не зависит от шаблона | Сложнее отлаживать, если на сайте несколько правил |
Если нужен ещё и аудит дублей, полезно посмотреть в сторону Clearfy Pro: у него есть инструменты для чистки технических дублей и SEO-настроек, но использовать его стоит как инструмент, а не как замену пониманию того, что именно вы закрываете.
Проверка результата после внедрения
После правки не ограничивайтесь просмотром исходника. Сначала откройте страницу поиска в браузере и убедитесь, что в HTML есть noindex. Затем проверьте ответ сервера через curl или инструменты разработчика. Если вы добавляли заголовок X-Robots-Tag, он должен присутствовать только на поисковых страницах, а не на всём сайте.
curl -I "https://example.com/?s=тест" | grep -i robots
Дальше откройте Search Console и посмотрите, как Google видит URL. Если страница уже была в индексе, удаление может занять время. Важно не ждать мгновенного эффекта: сначала робот должен переобойти страницу, увидеть noindex, а потом исключить её из индекса.
Чек-лист проверки
- На странице поиска есть
noindexв meta robots или в заголовке ответа. - Код ответа страницы —
200 OK, если вы не меняли логику шаблона. - Внутренние ссылки на поиск не создают лишних URL в карте сайта.
- В Search Console URL постепенно уходит из индекса или помечается как исключённый по
noindex. - На обычных страницах сайта robots meta не изменился случайно.
Частые ошибки и как их исправить
Закрыли поиск в robots.txt вместо noindex
Это самая частая ошибка. Disallow мешает обходу, но не гарантирует удаление URL из индекса. Если страница уже известна поисковику, он может продолжать показывать её без сниппета. Для удаления из индекса нужен именно noindex или корректная обработка URL на уровне ответа.
Поставили noindex на весь сайт
Такое случается, когда условие написано слишком широко или код вставили не в тот шаблон. Проверяйте, что фильтр срабатывает только на is_search(). После правки обязательно откройте обычную запись и главную страницу: на них robots meta должен остаться без noindex.
SEO-плагин перезаписывает ваш код
Если плагин уже управляет robots meta, ваш фильтр может не дать ожидаемого результата. В этом случае либо настраивайте плагин, либо отключайте дублирующую логику. Два источника правил на одной странице — частая причина путаницы при проверке.
Поиск закрыли, но URL всё равно в индексе
Это нормально для уже известных адресов: поисковику нужно время на переобход. Если URL массово сидят в индексе, проверьте, не попали ли они в sitemap, не создаются ли внутренними ссылками и не отдаются ли с ошибочным каноническим URL. Иногда проблема не в индексации, а в генерации лишних ссылок в теме или виджетах.
Практические советы по безопасности и производительности
Если внутренний поиск активно используется, не превращайте его в тяжёлую точку входа. На больших сайтах запросы поиска могут нагружать базу, особенно если тема или плагины добавляют сложные JOIN-ы. В таких случаях полезно ограничить индексацию, но параллельно проверить сам механизм поиска: кэш, релевантность и отсутствие лишних запросов к базе.
Ещё один практический момент: не выводите ссылки на внутренний поиск в местах, где они не нужны роботам и пользователям. Чем меньше мусорных URL создаётся внутри сайта, тем проще поддерживать чистую индексацию. Если у вас есть отдельные шаблоны или блоки, которые генерируют поисковые ссылки, проверьте их отдельно после обновлений темы.
Если хотите закрыть не только поиск, но и другие технические дубли, лучше делать это по списку и с проверкой каждого типа URL. В WordPress часто проблема не в одном параметре, а в цепочке: поиск, архивы, пагинация, сортировки, служебные страницы. Разбирать их лучше по отдельности, а не одной общей настройкой.