Страницы внутреннего поиска в WordPress часто попадают в индекс сами по себе: у них есть уникальный URL, параметры запроса и иногда нормальный HTML-шаблон. Для поисковика это выглядит как отдельная страница, хотя по смыслу это не контент, а служебная выдача. Если не ограничить индексацию, в отчётах начинают всплывать десятки и сотни URL вида ?s=, а краулинговый бюджет уходит на мусорные страницы.
Задача здесь не в том, чтобы отключить поиск для посетителей. Нужно оставить поиск рабочим, но дать роботам понятный сигнал: такие страницы не должны индексироваться и не должны попадать в карту сайта.
Как понять, что проблема именно в поисковых страницах
Сначала проверьте, действительно ли в индекс или в обход попадают URL поиска. В WordPress это обычно адреса с параметром s, например / ?s=запрос или /search/запрос/ — зависит от настроек постоянных ссылок и темы. Самый простой способ диагностики — посмотреть отчёт в Google Search Console и выгрузить список страниц с параметрами поиска.
Что смотреть в первую очередь
- страницы с параметром
sв отчёте «Страницы» или «Индексирование»; - запросы вида
site:example.com inurl:?s=в поиске; - логи сервера, если бот часто ходит по поиску с разными запросами;
- исходный код страницы поиска: есть ли там
<meta name="robots"и какой статус отдаёт URL.
Если страница поиска отдаёт 200 OK и содержит обычный контентный шаблон, поисковик вполне может решить, что это полноценная страница. Если там ещё и есть хлебные крошки, заголовок, описание и блоки похожих материалов, риск индексации только выше.
Что лучше: noindex, robots.txt или редирект
Для страниц внутреннего поиска обычно не нужен редирект. Пользователь должен видеть результаты поиска, а не улетать на главную. Закрывать такие URL через robots.txt тоже не лучший вариант: робот может не увидеть запрет на уровне страницы и всё равно оставить URL в индексе как найденный по ссылкам.
На практике рабочая схема такая: оставить страницу доступной для пользователей, но добавить noindex, follow и убрать её из sitemap. Если поиск у вас построен на стандартном параметре ?s=, этого обычно достаточно.
| Подход | Когда уместен | Минус |
|---|---|---|
| noindex на странице поиска | Почти всегда | Нужно проверить, что тег реально выводится |
| robots.txt | Как дополнительная мера | Не гарантирует удаление уже известных URL |
| Редирект на главную | Редко, если поиск вообще не нужен | Ломает пользовательский сценарий |
Пошаговое решение через код темы или мини-плагин
Если у вас есть доступ к теме или собственному плагину, проще всего добавить метатег robots для поисковой выдачи. Это не требует тяжёлых плагинов и работает предсказуемо.
1. Добавьте noindex для страниц поиска
Вставьте код в functions.php дочерней темы или в небольшой mu-plugin. Он добавит noindex, follow только на поисковые страницы.
<?php
add_action( 'wp_head', function () {
if ( is_search() ) {
echo '<meta name="robots" content="noindex, follow" />' . "\n";
}
}, 1 );Если у вас уже подключён SEO-плагин, проверьте, не выводит ли он свой robots-тег. Два одинаковых тега с разными директивами — частая причина путаницы. В таком случае лучше настроить правило в самом SEO-плагине, а не дублировать его кодом.
2. Уберите поисковые URL из sitemap
Страницы поиска не должны попадать в XML-карту сайта. В стандартном WordPress они обычно туда и не попадают, но некоторые SEO-плагины или кастомные решения могут добавлять лишние URL по ошибке. Проверьте sitemap вручную: в нём не должно быть ?s=, /search/ и похожих служебных адресов.
Если sitemap генерируется плагином, ищите настройку исключения таксономий, архивов и служебных страниц. Если карта сайта собирается кодом, фильтруйте массив URL до вывода.
3. При необходимости отдавайте 404 или 410 для пустых служебных запросов
Это уже более жёсткий вариант и подходит не всем. Если у вас есть технические URL поиска, которые не должны существовать вообще, можно отдавать 404 для пустого запроса или для мусорных параметров. Но для обычного поиска по сайту так делать не стоит: пользователь должен получать результаты, а не ошибку.
<?php
add_action( 'template_redirect', function () {
if ( is_search() && '' === trim( get_search_query() ) ) {
global $wp_query;
$wp_query->set_404();
status_header( 404 );
nocache_headers();
include get_query_template( '404' );
exit;
}
} );Этот пример полезен только как защита от пустых или бессмысленных запросов. Не используйте его для нормального поиска по контенту.
Если используете SEO-плагин или Clearfy Pro
Если на сайте уже стоит SEO-плагин, сначала проверьте его настройки. Во многих случаях проще закрыть поиск от индексации через интерфейс, чем поддерживать собственный код. Например, в Clearfy Pro есть инструменты для технической чистки сайта и управления служебными страницами; это удобно, если нужно централизованно убрать дубли и мусорные URL. Подробности можно посмотреть на странице плагина: https://wpshop.ru/plugins/clearfy.
Но даже если используете плагин, не отключайте проверку вручную. Плагины иногда меняют поведение после обновлений темы или SEO-модуля, и служебные страницы снова начинают светиться в индексе.
Как проверить, что решение сработало
После внедрения не ограничивайтесь визуальной проверкой страницы в браузере. Нужно убедиться, что поисковик видит именно те сигналы, которые вы ожидаете.
- откройте страницу поиска и проверьте исходный код на наличие
<meta name="robots" content="noindex, follow"; - посмотрите HTTP-ответ через DevTools или
curl -I— страница должна отдавать обычный200, если вы не делали отдельную логику для пустых запросов; - проверьте sitemap: поисковых URL там быть не должно;
- в Search Console отправьте страницу на проверку URL, если она уже была в индексе;
- через несколько обходов проверьте, исчез ли рост новых URL с параметром
s.
Пример быстрой проверки через консоль:
curl -s https://example.com/?s=test | grep -i robotsЕсли команда возвращает строку с noindex, значит тег действительно попал в HTML. Если нет — ищите конфликт с темой, SEO-плагином или кешем.
Частые ошибки и как их исправить
Думать, что robots.txt решает всё
Запрет в robots.txt не удаляет уже известные URL из индекса и не мешает поисковику хранить их как найденные. Для служебных страниц поиска этого недостаточно. Используйте noindex на самой странице.
Ставить редирект на главную
Так делают, когда хотят «спрятать» поиск, но в итоге ломают пользовательский сценарий и получают странное поведение в аналитике. Если поиск нужен, он должен работать. Если не нужен совсем — лучше отключить его функционально, а не маскировать редиректом.
Не учитывать кеш
Если на сайте есть page cache или CDN, старый HTML может продолжать отдавать страницу без noindex. После правки очистите все уровни кеша: плагин кеширования, серверный кеш, CDN, браузерный кеш.
Дублировать robots-теги
Иногда тема, SEO-плагин и кастомный код одновременно выводят разные директивы. В результате робот получает противоречивые сигналы. Оставьте один источник правды: либо настройка в плагине, либо код в теме.
Что ещё стоит проверить рядом с поиском
Если вы уже занялись служебными URL, посмотрите и на соседние проблемы: пагинацию результатов поиска, пустые запросы, страницы с сортировкой и фильтрами, если они есть в теме. Эти URL тоже могут плодить дубли и шум в индексации. Для технически аккуратного сайта полезно держать под контролем не только сам поиск, но и все его производные.
Отдельно проверьте, не попадают ли в индекс страницы с параметрами, которые не меняют контент, например ?replytocom, ?amp в неподходящей конфигурации или служебные фильтры темы. Принцип тот же: если URL не несёт самостоятельной ценности, он не должен конкурировать с нормальными страницами сайта.