Страницы внутреннего поиска в WordPress часто попадают в индекс и создают мусорные URL с параметром ?s=. Для SEO это обычно бесполезные страницы: у них нет стабильного контента, они быстро плодят дубли и могут отъедать краулинговый бюджет. При этом сам поиск на сайте должен продолжать работать для пользователей и для админки.
Ниже — рабочий сценарий: как закрыть такие страницы от индексации, не ломая поиск, и как проверить, что всё действительно сработало.
Когда проблема уже есть
Типичный признак — в поиске Google или Яндекса находятся URL вида / ?s=запрос, /search/запрос или страницы с параметрами сортировки и фильтрации, если тема или плагин поиска формируют отдельные адреса. В отчётах индексации это выглядит как множество коротких, почти пустых страниц с разными запросами.
Что именно нужно проверить
- Есть ли в индексе URL поиска с параметром
s. - Не открываются ли такие страницы с кодом
200 OKи полноценным HTML. - Нет ли у них канонического URL, указывающего на саму же страницу поиска.
- Не попадают ли результаты поиска в sitemap.
Если страница поиска отдаёт 200 и содержит индексируемый контент, поисковик может держать её в базе очень долго, даже если она не несёт пользы.
Какие варианты решения есть
Есть три практических подхода: закрыть страницы поиска через noindex, отдать им robots-мета-тег и каноникал на главную, либо вообще отдавать 404/410 для пустых запросов. Последний вариант подходит не всегда: если у вас нужен обычный поиск по сайту, удалять его нельзя.
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| noindex + follow | Поиск нужен пользователям, но не нужен в индексе | Просто внедрить, не ломает UX | Нужно проверить, что мета-тег реально выводится |
| canonical на главную | Если поиск почти не даёт ценности | Снижает риск дублей | Не всегда поисковик учитывает canonical для таких URL |
| 404/410 для пустых запросов | Если поиск технически не нужен | Жёстко убирает мусор | Ломает пользовательский сценарий поиска |
Пошаговое решение через functions.php или мини-плагин
Самый предсказуемый способ — добавить noindex, follow для страниц поиска и, при необходимости, вывести canonical на основную страницу сайта. Лучше делать это в мини-плагине или в дочерней теме, а не править родительскую тему напрямую.
1. Добавляем noindex для страниц поиска
<?php
add_action('wp_head', function () {
if (is_search()) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1);Этот вариант работает для стандартного фронтенд-поиска WordPress. Он не отключает поиск, а только просит поисковики не индексировать саму страницу результатов.
2. При необходимости задаём canonical
Если тема не выводит корректный canonical для поиска, можно переопределить его через фильтр wpseo_canonical в Yoast SEO или аналогичный механизм в другом SEO-плагине. Но если плагин SEO уже сам ставит noindex на поиск, не дублируйте логику без необходимости.
<?php
add_filter('wpseo_canonical', function ($canonical) {
if (is_search()) {
return home_url('/');
}
return $canonical;
});Если у вас не Yoast SEO, а другой SEO-плагин, сначала проверьте, не умеет ли он закрывать поиск штатно. Вмешиваться кодом имеет смысл только когда в интерфейсе нет нужной настройки или она работает нестабильно.
3. Закрываем поиск от индексации на уровне robots.txt только как дополнительную меру
Запись в robots.txt сама по себе не решает задачу, если URL уже в индексе. Но как дополнительный сигнал она полезна.
User-agent: *
Disallow: /?s=
Disallow: /search/Важно: robots.txt не заменяет noindex. Если поисковик уже знает URL, он может оставить его в выдаче без содержимого, но сам URL не исчезнет быстро. Поэтому основной механизм — именно noindex.
Если поиск создаёт отдельные красивые URL
Некоторые темы и плагины делают не стандартный ?s=, а отдельный маршрут вроде /search/term/. В этом случае проверяйте, где именно формируется шаблон страницы результатов. Если это обычная страница WordPress, можно закрыть её через условие is_search(). Если это кастомный endpoint или архив, потребуется отдельная логика для конкретного шаблона.
Практически это выглядит так: сначала открываете проблемный URL, смотрите исходный код и заголовки ответа, затем определяете, является ли это стандартным поиском WordPress или кастомной страницей темы/плагина.
Проверка результата после внедрения
После изменений не ограничивайтесь визуальной проверкой. Нужно убедиться, что поисковик увидит именно то, что вы задумали.
- Откройте страницу поиска в браузере и проверьте исходный код на наличие
<meta name="robots" content="noindex,follow" />. - Проверьте, что поиск по сайту по-прежнему выдаёт результаты.
- Посмотрите заголовки ответа через DevTools или
curl -I, если используете серверные правила. - В Search Console отправьте проблемный URL на повторную проверку и убедитесь, что статус меняется.
- Если используете SEO-плагин, проверьте, не конфликтует ли его настройка с вашим кодом.
Пример быстрой проверки через консоль:
curl -s https://example.com/?s=test | grep -i robotsЕсли в ответе нет noindex, значит правило не сработало или его перезаписывает тема/плагин.
Частые ошибки и как их исправить
1. Закрыли URL в robots.txt и решили, что этого достаточно
Это частая ошибка. Если URL уже в индексе, запрет в robots.txt не удалит его сам по себе. Нужен noindex или явное удаление через инструменты поисковой системы.
2. Поставили noindex только на одну страницу шаблона
Иногда поиск выводится на нескольких шаблонах: стандартный поиск, AJAX-поиск, отдельная страница результатов плагина. Закрыть нужно все варианты, которые реально доступны по URL.
3. Сломали поиск для пользователей
Это случается, если вместо noindex возвращают 404 или редиректят все поисковые запросы на главную. Пользовательский поиск должен оставаться рабочим, если он нужен редакции или посетителям.
4. Дублируют правила в теме и SEO-плагине
Если и тема, и плагин SEO пытаются управлять robots-мета-тегами, итог может быть непредсказуемым. Оставьте один источник истины: либо настройка в плагине, либо код в дочерней теме/мини-плагине.
Практические советы по безопасности и производительности
Не вставляйте такой код в родительскую тему: после обновления он пропадёт. Для точечных SEO-правил лучше использовать мини-плагин или дочернюю тему. Если у вас уже есть плагин для технической оптимизации, например Clearfy Pro, сначала проверьте, не закрывает ли он страницы поиска штатно — это часто проще, чем поддерживать собственный код.
Ещё один момент: не пытайтесь массово закрывать от индексации всё подряд. Если у вас есть полезные страницы поиска по каталогу, базе знаний или документации, они могут приносить трафик. В таком случае закрывать нужно только пустые, служебные или бесполезные варианты, а не весь поиск целиком.
Если на сайте много параметров в URL, полезно отдельно проверить, не создают ли они дополнительные дубли рядом со страницами поиска. Иногда проблема не в самом поиске, а в комбинации ?s= с фильтрами, сортировкой и пагинацией.
В итоге рабочая схема простая: определить тип поискового URL, добавить noindex,follow, проверить canonical и убедиться, что поиск для пользователя остался рабочим. Это тот случай, где аккуратная техническая настройка даёт больше пользы, чем попытка “почистить индекс” грубыми запретами.