Страница внутреннего поиска в WordPress почти всегда создаёт мусор для индексации: один и тот же шаблон, разные запросы, тонкий контент и бесконечные комбинации URL. Если сайт активно растёт, такие страницы быстро расползаются в отчётах по сканированию и мешают поисковику тратить бюджет на полезные URL.
Задача здесь не в том, чтобы «спрятать всё подряд», а в том, чтобы корректно убрать из индекса именно результаты поиска, сохранив работу поиска для пользователей и не ломая внутренние ссылки.
Когда проблема действительно есть
Проверять нужно не по ощущениям, а по фактам. Откройте несколько URL вида /?s=запрос или /search/запрос/ — в зависимости от темы и настроек. Если такие страницы доступны без авторизации, отдают 200 OK и попадают в индекс, это уже повод для правки.
Типичные признаки:
- в отчётах Google Search Console появляются URL с параметром
s; - в индексе есть страницы поиска с пустым или почти пустым сниппетом;
- поисковик тратит время на десятки однотипных URL с разными запросами;
- в выдаче всплывают внутренние страницы поиска вместо нормальных посадочных.
Что именно индексируется
Чаще всего индексируются не сами результаты как данные, а шаблон страницы поиска с уникальным query string. Для поисковика это отдельный URL, и без явного запрета он может попасть в индекс, особенно если на него есть внутренние ссылки или он часто открывается пользователями.
Какой способ выбрать: robots, noindex или код
Универсального варианта нет. Если нужен быстрый и предсказуемый результат, лучше ставить noindex на саму страницу поиска. Если задача шире и вы хотите централизованно убрать дубли, можно использовать SEO-плагин или небольшой код в теме/плагине.
| Подход | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| SEO-плагин | Быстро, без правки темы | Зависит от настроек плагина | Если уже стоит Yoast, Rank Math или похожий плагин |
| Код в теме/плагине | Точный контроль | Нужна аккуратность при обновлениях | Если нужен минимальный и прозрачный фикс |
| robots.txt | Просто закрыть обход | Не гарантирует исключение из индекса | Только как дополнительная мера, не как основная |
Пошаговое решение через код
Самый надёжный вариант — добавить noindex, follow на страницы поиска. Это не запрещает пользователю пользоваться поиском, но говорит поисковику не включать такие страницы в индекс.
Добавьте код в functions.php дочерней темы или в небольшой mu-plugin. Для сайта с обычным поиском WordPress этого достаточно:
<?php
add_action('wp_head', function () {
if (is_search()) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
});Если вы хотите сделать это через HTTP-заголовок, а не через мета-тег, можно использовать wp_headers. Это особенно полезно, когда шаблон страницы поиска может меняться, а заголовок нужен независимо от темы:
<?php
add_filter('wp_headers', function ($headers) {
if (is_search()) {
$headers['X-Robots-Tag'] = 'noindex, follow';
}
return $headers;
});Для большинства проектов достаточно одного из этих вариантов. Дублировать оба способа не обязательно, но если у вас сложная сборка с кэшем и нестандартной темой, заголовок обычно надёжнее, чем только мета-тег.
Если поиск работает через параметр s
В WordPress стандартный поиск часто выглядит как /?s=.... Именно этот вариант чаще всего и нужно закрывать. Если у вас есть отдельная страница поиска с красивым URL, проверьте, не создаёт ли она дополнительные дубли через параметры сортировки, фильтры или пагинацию.
Если в шаблоне поиска есть пагинация, не пытайтесь закрыть весь раздел через Disallow в robots.txt. Поисковик может продолжить видеть URL по внешним ссылкам, но уже без возможности корректно обработать сигналы. Для индексации это обычно хуже, чем явный noindex.
Что делать через SEO-плагин
Если на сайте уже используется SEO-плагин, проверьте, не умеет ли он управлять индексированием архивов и страниц поиска. В большинстве случаев это быстрее и безопаснее, чем писать свой код, если у вас нет отдельного технического требования.
Смысл один: найти настройку, которая добавляет noindex на search results pages. После этого не забудьте проверить исходный код страницы и заголовки ответа сервера.
Проверка результата после внедрения
После правки не ограничивайтесь открытием страницы в браузере. Нужно проверить именно то, что увидит поисковый робот.
- Откройте страницу поиска с любым запросом.
- Посмотрите исходный код и убедитесь, что есть
<meta name="robots" content="noindex,follow" />или заголовокX-Robots-Tag: noindex, follow. - Проверьте ответ сервера через
curlили инструменты разработчика. - Убедитесь, что страница не закрыта от обхода в
robots.txt, если вы рассчитываете именно наnoindex.
Пример проверки через командную строку:
curl -I "https://example.com/?s=wordpress"В ответе ищите строку с X-Robots-Tag, если вы использовали заголовок. Если работает только мета-тег, откройте HTML и проверьте наличие нужного meta.
Частые ошибки и как их исправить
Закрыли поиск в robots.txt и на этом остановились
Это самая частая ошибка. Disallow мешает обходу, но не гарантирует исключение из индекса. Если URL уже известен поисковику, он может продолжать показываться без содержимого или с фрагментом сниппета. Исправление простое: добавьте noindex на саму страницу поиска.
Поставили noindex, но забыли про кэш
Если на сайте есть серверный кэш, CDN или плагин кэширования, старый HTML может ещё какое-то время отдаваться без нужного мета-тега. После изменения очистите кэш страницы поиска и, если нужно, весь кэш сайта.
Закрыли не тот URL
Иногда на сайте есть и стандартный поиск WordPress, и отдельный поиск темы или плагина. Проверьте, какой именно URL реально индексируется. Иначе можно закрыть красивую страницу, а мусор останется на параметре ?s=.
Поставили noindex на все страницы подряд
Не переносите логику страницы поиска на обычные архивы или записи. Если в шаблоне условие написано слишком широко, можно случайно закрыть от индексации полезный контент. Проверяйте условие is_search() отдельно и не смешивайте его с другими шаблонными проверками без необходимости.
Чек-лист перед публикацией правки
- Проверен реальный URL поиска на сайте.
- Выбран один основной способ: мета-тег или заголовок.
- Кэш очищен после изменений.
- В исходном коде есть
noindex,follow. - Страница по-прежнему открывается для пользователя.
- В
robots.txtнет конфликта с выбранной схемой. - Проверен ответ через
curl -Iили DevTools.
Практические советы по безопасности и производительности
Если внутренний поиск на сайте часто используется, не стоит его ломать ради индексации. Лучше убрать только поисковые страницы из индекса и при этом следить за нагрузкой. На больших сайтах поиск может быть тяжёлым, особенно если тема или плагины добавляют дополнительные JOIN и фильтры.
Если нужно одновременно чистить дубли, управлять архивами и закрывать технические страницы, удобнее делать это централизованно. В таких задачах иногда используют Clearfy Pro, но только если вам реально нужен набор функций по SEO-чистке и управлению дублями; сам по себе плагин не обязателен, если задача решается кодом и текущим SEO-стеком.
Главное правило простое: сначала определите, что именно создаёт дубль, потом закрывайте только этот тип страниц. Иначе можно потерять полезные переходы из поиска по сайту и усложнить диагностику уже существующих проблем.