Страницы внутреннего поиска в WordPress часто становятся мусорным слоем в индексе: у них тонкий контент, много параметров в URL и почти нулевая ценность для поиска. При этом полностью ломать поиск не нужно — задача в том, чтобы оставить его рабочим для пользователей и одновременно не отдавать поисковикам страницы вида ?s=....
Ниже — практический сценарий: что проверить, какие варианты закрытия реально работают, как не задеть полезные страницы и как убедиться, что проблема решена.
Когда страницы поиска начинают индексироваться
Типичный URL внутреннего поиска в WordPress выглядит так: / ?s=запрос или /search/запрос/, если тема или плагин переписывает адреса. В индекс они попадают по нескольким причинам:
- поисковик нашёл ссылки на результаты поиска внутри сайта;
- тема не выводит
noindexдля search results; - на странице поиска есть каноникал на саму себя или его нет вообще;
- плагин SEO не настроен для архивов поиска;
- поиск генерирует много URL с разными параметрами, и они начинают плодить мусор.
Если в Search Console уже есть такие страницы, обычно видно одно и то же: заголовок страницы совпадает с запросом, а контента почти нет. Это не ошибка WordPress как такового — это вопрос настройки шаблона и индексации.
Диагностика: что именно у вас индексируется
Сначала проверьте, какой формат поиска использует сайт. Откройте несколько запросов и посмотрите исходный HTML страницы. Важны три вещи: мета robots, canonical и статус ответа.
Что смотреть в исходнике
<meta name="robots" content="noindex,follow">или его отсутствие;<link rel="canonical" ...>— на саму страницу поиска или на главную;- нет ли редиректа с пустого поиска на главную, который ломает UX;
- не отдаёт ли сервер 200 на пустой запрос
?s=.
Если есть доступ к консоли, можно быстро проверить заголовки:
curl -I "https://example.com/?s=test"Ищите X-Robots-Tag, Location и код ответа. Для страниц поиска обычно нужен либо noindex, либо редирект пустых запросов, но не массовый запрет всего через robots.txt.
Как закрыть страницы поиска правильно
Есть три рабочих подхода. Выбор зависит от того, используете ли вы SEO-плагин, готовы ли править тему и нужно ли отдельно обрабатывать пустой поиск.
| Способ | Когда подходит | Плюс | Минус |
|---|---|---|---|
| SEO-плагин | Если уже стоит Yoast, Rank Math или аналог | Быстро, без кода | Не всегда закрывает пустые запросы и нестандартные шаблоны |
| Код в теме или mu-plugin | Если нужен точный контроль | Можно закрыть и noindex, и пустой поиск | Нужно аккуратно тестировать после обновлений |
robots.txt | Только как дополнительная мера | Просто добавить | Не убирает уже известные URL из индекса и не решает проблему полностью |
Вариант 1: через SEO-плагин
Если у вас уже используется SEO-плагин, проверьте настройки архивов и страниц поиска. В большинстве случаев достаточно включить noindex для search results. Это самый безопасный путь, если не хочется трогать код.
Но есть нюанс: плагин может не закрыть нестандартный шаблон поиска, если тема выводит собственную разметку. Поэтому после настройки обязательно откройте страницу поиска и проверьте исходный код.
Вариант 2: через код
Если нужен предсказуемый результат, добавьте фильтр в functions.php дочерней темы или, лучше, в небольшой mu-plugin. Так вы не зависите от интерфейса плагина и можете отдельно обработать пустой поиск.
<?php
add_action('wp_head', function () {
if (is_search()) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1);
add_filter('wp_robots', function (array $robots) {
if (is_search()) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Этот вариант хорош тем, что работает и с современным API wp_robots, и с темами, которые не выводят мета-теги вручную. Если SEO-плагин уже добавляет свои директивы, проверьте, не конфликтуют ли они между собой.
Вариант 3: закрыть пустой поиск отдельно
Пустой запрос — отдельная история. Он часто даёт бесполезную страницу с общим списком результатов или вообще пустой выдачей. Такой URL лучше не оставлять в индексе и при этом не ломать форму поиска.
<?php
add_action('template_redirect', function () {
if (is_search() && trim((string) get_search_query()) === '') {
wp_safe_redirect(home_url('/'), 302);
exit;
}
});Здесь важен именно 302, а не 301: пустой поиск — это не постоянная замена главной страницы, а временная обработка некорректного запроса. Если у вас есть сценарий, где пустой поиск должен показывать отдельную страницу-подсказку, редирект не нужен.
Что делать с robots.txt и canonical
Полностью полагаться на robots.txt для страниц поиска не стоит. Если поисковик уже знает URL, запрет в robots не гарантирует удаление из индекса. Более того, если вы закроете обход, но не поставите noindex, поисковик может продолжать хранить адрес как известный, но недоступный для переобхода.
Canonical тоже не должен вести на главную только потому, что это «удобно». Для страниц поиска это обычно плохая идея: поисковик видит несоответствие содержимого и канонического адреса. Лучше либо оставить self-canonical вместе с noindex, либо использовать шаблонное закрытие через SEO-плагин.
Проверка результата после внедрения
После правки не ограничивайтесь визуальной проверкой. Нужно убедиться, что страница отдаёт правильные сигналы поисковику.
- Откройте несколько URL поиска с разными запросами.
- Проверьте исходный код: есть ли
noindex. - Посмотрите заголовки через
curl -Iили DevTools. - Убедитесь, что пустой поиск не создаёт отдельную индексируемую страницу.
- В Search Console запросите переобход проблемных URL, если они уже в индексе.
Если используете Google Search Console, обратите внимание на статус страницы: она может ещё какое-то время отображаться как известная, но исключённая из индекса. Это нормально — важно, чтобы новые обходы уже видели noindex.
Частые ошибки и как их исправить
Закрыли поиск через robots.txt и остановились на этом
Это не решает задачу полностью. Если URL уже в индексе, он может там остаться. Добавьте noindex или заголовок X-Robots-Tag.
Поставили редирект на главную для всех поисковых запросов
Так ломается пользовательский сценарий: человек ищет на сайте и вместо результатов попадает на главную. Редирект допустим только для пустого поиска или совсем мусорных запросов, если это осознанное решение.
Сделали canonical на главную
Для страниц поиска это часто выглядит как попытка «склеить» несвязанные страницы. Лучше не подменять смысл canonical. Если нужна деиндексация — используйте noindex.
Не проверили тему после обновления
Некоторые темы и конструкторы перезаписывают шаблон поиска. После обновления проверьте, не исчез ли noindex из исходника.
Практические советы по безопасности и производительности
Если сайт получает много мусорных поисковых запросов, это не только SEO-проблема. Иногда такие запросы создают лишнюю нагрузку на базу данных, особенно если поиск идёт по большому каталогу записей.
- ограничьте индексацию страниц поиска, чтобы не плодить бесполезные обходы;
- проверьте, не генерирует ли тема отдельные URL для каждого фильтра и сортировки;
- если поиск тяжёлый, рассмотрите кеширование результатов на уровне плагина или сервера;
- не отключайте поиск полностью, если он нужен пользователям — лучше закрыть только выдачу от индексации.
Если нужен более широкий набор инструментов для чистки SEO-слоя и технических дублей, можно посмотреть в сторону Clearfy Pro, но и там всё равно стоит проверять итоговый HTML и заголовки вручную.
Мини-чек-лист перед публикацией
- страницы поиска отдают
noindex,follow; - пустой поиск не создаёт индексируемый URL;
- canonical не уводит на нерелевантную страницу;
robots.txtне используется как единственная мера;- в Search Console нет новых дублей от поиска;
- после обновления темы проверка повторена.
Если всё сделано аккуратно, внутренний поиск останется рабочим для людей, а поисковики перестанут тратить краулинговый бюджет на бесполезные страницы.