Внутренний поиск WordPress часто создаёт страницы, которые не должны попадать в индекс: пустые результаты, запросы из одного-двух символов, дубли с параметрами и URL, которые не несут ценности для поиска. Если это не ограничить, в отчётах Search Console быстро появляются странные адреса, а краулер тратит время на бесполезные страницы.
Ниже — рабочий сценарий: сначала проверяем, что именно индексируется, потом закрываем поиск от индексации, при необходимости убираем его из sitemap и настраиваем поведение для запросов без результатов.
Что именно нужно проверить перед правками
Не стоит сразу ставить noindex наугад. Сначала посмотрите, как у вас формируется URL поиска. В стандартном WordPress это обычно ?s=запрос, но тема или плагин могут добавлять свои параметры, ЧПУ-формат или AJAX-поиск.
Диагностика проблемы
- Откройте несколько поисковых URL вручную и посмотрите исходный код страницы.
- Проверьте, есть ли в
<head>мета-тегrobotsи какой у него content. - Посмотрите, не попадают ли поисковые страницы в XML sitemap.
- В Search Console найдите URL с параметром
s=или похожими поисковыми адресами. - Проверьте, не создаёт ли тема отдельный шаблон поиска с каноникалами на саму страницу поиска.
Если поиск отдаёт полноценную страницу с результатами, а не JSON/AJAX-ответ, её обычно имеет смысл закрыть от индексации. Если поиск используется как отдельная посадочная страница, решение нужно принимать аккуратно, иначе можно потерять полезный трафик.
Как закрыть поиск от индексации без плагинов
Самый надёжный способ — добавить noindex,follow только на страницы поиска. Это не блокирует обход ссылок, но говорит поисковикам не включать страницу в индекс.
<?php
add_action('wp_head', function () {
if (is_search()) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1);
Этот код можно добавить в functions.php дочерней темы или в небольшой mu-plugin, если не хотите зависеть от темы. Для продакшена mu-plugin обычно удобнее: он не отключится после смены шаблона.
Если нужен HTTP-заголовок, а не только meta robots
Некоторые проекты предпочитают отправлять X-Robots-Tag на уровне ответа. Это полезно, если тема генерирует нестабильный head или если вы хотите единое правило для HTML и некоторых файлов.
<?php
add_action('template_redirect', function () {
if (is_search() && !headers_sent()) {
header('X-Robots-Tag: noindex, follow', true);
}
});
Не используйте этот вариант вместе с агрессивным кешем без проверки: если заголовок кэшируется неправильно, он может начать применяться шире, чем нужно.
Когда лучше не просто noindex, а ещё и ограничить сам поиск
Если сайт получает много мусорных запросов, можно дополнительно ограничить слишком короткие поисковые фразы. Это снижает число бесполезных страниц и нагрузку на базу данных.
<?php
add_filter('pre_get_posts', function ($query) {
if (is_admin() || ! $query->is_main_query() || ! $query->is_search()) {
return;
}
$term = trim((string) $query->get('s'));
if (mb_strlen($term) < 3) {
$query->set('s', '');
$query->set('post__in', array(0));
}
});
Это не универсальное правило. На сайтах с короткими техническими запросами, аббревиатурами или каталогом товаров такой фильтр может навредить. Перед включением проверьте реальные поисковые фразы из аналитики.
Как убрать поисковые URL из XML sitemap
Если ваш sitemap генерируется плагином SEO, проверьте, не попадают ли туда страницы поиска через отдельные архивы или кастомные типы. Стандартный WordPress сам по себе не добавляет поисковые страницы в sitemap, но плагины и темы могут делать это через свои механизмы.
Если sitemap строится кодом темы, не добавляйте туда URL с параметром s. Для самописных карт сайта правило простое: в sitemap должны попадать только канонические URL, которые вы реально хотите индексировать.
| Подход | Что делает | Минус |
|---|---|---|
| Meta robots noindex | Убирает страницу поиска из индекса | Не всегда быстро удаляет уже проиндексированные URL |
| X-Robots-Tag | Даёт то же правило на уровне ответа | Нужно аккуратно работать с кешем |
| Ограничение коротких запросов | Снижает число мусорных страниц | Может мешать полезному поиску |
Проверка результата после внедрения
После правок не ограничивайтесь визуальной проверкой. Нужно убедиться, что поисковая страница действительно отдаёт нужные сигналы.
- Откройте URL вида
/?s=testи посмотрите исходный код страницы. - Проверьте наличие
<meta name="robots" content="noindex,follow" />или заголовкаX-Robots-Tag. - В DevTools или через
curl -Iпроверьте HTTP-ответ. - В Search Console используйте проверку URL и посмотрите, как робот видит страницу.
- Через несколько обходов проверьте, уменьшается ли число поисковых URL в отчётах.
curl -I "https://example.com/?s=wordpress"
Если заголовок не появился, значит код не сработал или его перебивает другой плагин. Если meta-тег есть, но страница всё равно индексируется, проверьте канонический URL и наличие внутренних ссылок на поисковые страницы.
Частые ошибки и как их исправить
Закрыли поиск через robots.txt
Это частая ошибка. Disallow не убирает уже известный URL из индекса так же надёжно, как noindex. Для поиска лучше использовать именно директиву индексации, а не только запрет обхода.
Поставили noindex на все страницы сайта
Такое случается, когда условие проверяет не is_search(), а слишком общий шаблон. Проверьте, что код срабатывает только на поисковых запросах и не затрагивает обычные записи, страницы и архивы.
Сломали кеш
Если на сайте есть page cache, он может отдать один и тот же head для разных URL. После изменения кода очистите кеш плагина, серверный кеш и CDN, если он используется.
Поиск остался в sitemap
Значит, источник sitemap не тот, где вы внесли правку. Ищите генератор карты сайта в SEO-плагине, теме или кастомном коде.
Что делать, если нужен более чистый сайт без дублей
Если проблема не только в поиске, а в целом в мусорных URL, имеет смысл пройтись по всем техническим дублям: архивам, параметрам сортировки, страницам автора, датам и внутренним фильтрам. На практике такие задачи удобно решать либо точечным кодом, либо через плагины для технической чистки сайта. Например, у Clearfy Pro есть набор функций для отключения лишних сущностей и дублей, но перед использованием всё равно стоит проверить, что именно вам нужно закрыть, а что оставить доступным для индексации.
Главный принцип здесь простой: не прятать всё подряд, а закрывать только те URL, которые не несут самостоятельной ценности. Тогда и индексация чище, и риск поломать SEO ниже.