Внутренний поиск WordPress часто оставляет в индексе десятки или сотни URL вида ?s=.... Для пользователя это не полезные страницы: у них слабый контент, много дублей и почти всегда низкая ценность для поиска. Если сайт активно генерирует поисковые запросы, такие страницы начинают засорять отчёты в Search Console и раздувать индекс.
Задача здесь не в том, чтобы отключить поиск, а в том, чтобы оставить его рабочим для посетителей и одновременно убрать его страницы из индекса. Делать это можно по-разному: через noindex, через заголовок X-Robots-Tag, через SEO-плагин или комбинацию методов. Ниже — рабочие варианты без лишней магии.
Когда проблема действительно есть
Сначала стоит проверить, что у вас именно индексируются страницы поиска, а не просто есть URL с параметром s. Откройте несколько адресов поиска вручную и посмотрите, как они отдаются:
https://site.ru/?s=тестhttps://site.ru/search/тест/, если у темы или плагина есть ЧПУ-поиск- страницы поиска из логов сервера или отчётов аналитики
Если такие URL попадают в индекс, обычно это видно по одному из признаков:
- в Google Search Console есть страницы с параметром
sв отчёте индексации; - в выдаче находятся результаты вида
site:site.ru inurl:?s=; - в коде страницы поиска нет явного
noindex; - SEO-плагин не настроен на обработку search-страниц.
Что важно не перепутать
Закрыть от индексации — не значит запретить обходить страницу. Для поиска это обычно и нужно: робот может зайти на URL, но не должен добавлять его в индекс. Поэтому robots.txt сам по себе не решает задачу, если страница уже известна поисковику. Для удаления из индекса нужен именно noindex или эквивалентный сигнал.
Какой способ выбрать
Если на сайте уже стоит SEO-плагин, проще использовать его настройки. Если плагина нет или нужен точечный контроль, лучше добавить код в тему или мини-плагин. Для большинства проектов достаточно одного из этих вариантов.
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| SEO-плагин | Если уже используется Yoast, Rank Math или аналог | Быстро, без кода | Меньше контроля, зависит от плагина |
Код через wp_head | Нужна точечная настройка без лишних зависимостей | Прозрачно, предсказуемо | Нужно аккуратно поддерживать |
X-Robots-Tag | Если хотите управлять индексированием на уровне заголовков | Работает даже без правки шаблона | Не все хостинги и кеши удобно это пропускают |
Пошаговое решение через код
Если вам нужен надёжный вариант без привязки к конкретному SEO-плагину, добавьте noindex, follow на страницы поиска. Это не ломает сам поиск, но просит поисковик не включать такие страницы в индекс.
<?php
add_action( 'wp_head', function () {
if ( is_search() ) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1 );Этот код можно положить в functions.php дочерней темы или, что лучше, в небольшой mu-plugin. Второй вариант надёжнее: он не слетит после обновления темы.
Если хотите закрыть от индексации не только HTML, но и отдать тот же сигнал на уровне заголовков, используйте X-Robots-Tag. Это полезно, когда тема или плагин вмешиваются в <head>, а вы хотите более низкоуровневое решение.
<?php
add_action( 'template_redirect', function () {
if ( is_search() && ! headers_sent() ) {
header( 'X-Robots-Tag: noindex, follow', true );
}
} );Если у вас ЧПУ-поиск
Некоторые темы и плагины делают поиск по адресу вроде /search/term/. Для WordPress это всё равно поисковая страница, и условие is_search() обычно срабатывает. Но если у вас кастомный роутинг, проверьте, что шаблон действительно попадает в поиск, а не в обычную страницу архива.
Как сделать это через SEO-плагин
Если на сайте уже стоит SEO-плагин, не дублируйте логику кодом без необходимости. В большинстве случаев достаточно включить noindex для search-страниц в настройках индексации или robots meta. Названия пунктов отличаются, но логика одна: поисковые страницы должны получать noindex.
Плюс этого подхода в том, что плагин обычно сам учитывает дополнительные типы архивов и не заставляет вас вручную поддерживать код. Минус — если плагин отключат, правило исчезнет вместе с ним. Поэтому для критичных проектов я бы всё равно предпочёл код в mu-plugin.
Проверка результата после внедрения
После правки не ограничивайтесь открытием страницы в браузере. Проверьте сигнал, который видит робот.
- Откройте страницу поиска и посмотрите исходный код: должен быть
<meta name="robots" content="noindex,follow" />. - Проверьте заголовки ответа через DevTools или
curl -I: должен появитьсяX-Robots-Tag, если вы его добавляли. - Убедитесь, что поиск на сайте по-прежнему работает для посетителей.
- В Search Console отправьте страницу на повторную проверку, если она уже была в индексе.
Пример проверки заголовков через консоль:
curl -I "https://site.ru/?s=тест"Если вы видите только обычный HTML-ответ без X-Robots-Tag, значит код не сработал или его перехватывает другой слой — например, кеш на сервере или CDN.
Частые ошибки и как их исправить
Путают noindex и disallow
Disallow в robots.txt не гарантирует удаление URL из индекса. Если страница уже известна поисковику, он может продолжать показывать её без содержимого. Для внутренних страниц поиска нужен именно noindex.
Ставят noindex только на главную страницу поиска
Иногда разработчик проверяет только ?s=, но на сайте есть ещё и альтернативные URL поиска от темы или плагина. В таком случае часть страниц остаётся открытой. Проверьте все варианты поиска, которые реально генерируются на сайте.
Добавляют код в родительскую тему
Это рабочее решение только до первого обновления темы. Для постоянной настройки используйте дочернюю тему или mu-plugin. Если проект поддерживается несколькими людьми, mu-plugin обычно проще контролировать.
Не учитывают кеш
Если на сайте стоит кеширование HTML, после изменения кода старая версия страницы может ещё какое-то время отдаваться из кеша. Очистите кеш плагина, сервера и CDN, иначе проверка покажет старый результат.
Практические советы по безопасности и производительности
Закрытие поиска от индексации — не только про SEO-гигиену. Это ещё и способ уменьшить шум в логах и нагрузку от бессмысленных обходов. Но не стоит превращать это в попытку спрятать весь сайт от роботов: поисковая страница должна оставаться доступной пользователю, а не ломаться через редиректы или 403.
- не редиректите все поисковые URL на главную — это выглядит как soft-404;
- не блокируйте поиск в
robots.txt, если уже нуженnoindexдля удаления из индекса; - если используете кеш, убедитесь, что он не вырезает мета-теги и заголовки;
- для сложных сайтов держите правило в mu-plugin, а не в теме;
- если на сайте много дублей архивов, имеет смысл дополнительно проверить настройки канонических URL.
Если вам нужно навести порядок не только в поиске, но и в дублях, архивных страницах и служебных URL, удобнее делать это централизованно. В таких случаях часто хватает SEO-плагина или набора точечных правил, а не тяжёлой кастомной логики.
Когда код лучше, чем плагин
Код выигрывает, если вам нужен один понятный сигнал и минимальная зависимость от стороннего решения. Плагин удобнее, когда SEO-настройки уже ведутся в одном интерфейсе и за сайт отвечает не только разработчик. На практике я бы выбирал так: если SEO-плагин уже есть и он стабильно обслуживается — используйте его. Если нет, добавьте короткий mu-plugin с noindex для поиска и не усложняйте стек.
Главное — проверить не только наличие мета-тега, но и то, как страница ведёт себя после переобхода. Тогда решение будет не формальным, а действительно рабочим.