Внутренний поиск WordPress часто создаёт мусорные URL вида /?s=запрос. Для пользователя это полезная функция, а для поисковиков — источник тонких страниц, дублей и лишнего обхода. Если такие адреса попадают в индекс, они начинают конкурировать с нормальными страницами сайта и засоряют отчёты в Search Console.
Задача здесь не в том, чтобы сломать поиск, а в том, чтобы оставить его рабочим для посетителей и убрать из индекса только результаты поиска. Это делается на уровне темы или небольшого mu-plugin без тяжёлых SEO-плагинов.
Когда это действительно проблема
Сначала стоит убедиться, что речь именно о страницах поиска, а не о других параметрах в URL. Типичный сценарий: в индексе появляются адреса с ?s=, в отчётах растёт число страниц с низкой ценностью, а в выдаче можно увидеть сниппеты с внутреннего поиска вместо нормальных посадочных страниц.
Что проверить в первую очередь
- Есть ли в индексе URL с
?s=или/search/. - Отдаёт ли страница поиска код ответа
200и полноценный HTML. - Не закрыт ли поиск только через robots.txt — этого обычно недостаточно.
- Не генерирует ли тема отдельный шаблон поиска с лишними блоками и ссылками.
Если поиск уже попал в индекс, одного noindex мало: нужно ещё убрать лишние ссылки на такие страницы и проверить каноникал. Но начинать лучше с корректной разметки на самой странице поиска.
Диагностика: как понять, что WordPress отдаёт поисковую страницу для индексации
Откройте любой URL вида https://site.ru/?s=test и посмотрите исходный код страницы. Если в <head> нет meta robots с noindex, поисковик будет воспринимать её как обычную страницу. Иногда тема уже добавляет noindex для поиска, но делает это непоследовательно: только для части шаблонов или только при наличии определённого SEO-плагина.
Ещё один полезный тест — проверить, не создаёт ли сайт отдельные архивы поиска по красивому URL. В этом случае логика закрытия должна работать и для ?s=, и для маршрутов поиска, если они есть в теме.
Пошаговое решение без плагина
Самый надёжный вариант — явно задать noindex,follow для страниц поиска и убрать их из sitemap, если он формируется вручную или через код. Для этого достаточно небольшого фрагмента в functions.php дочерней темы или в отдельном mu-plugin.
1. Добавить meta robots для поиска
<?php
add_filter('wp_robots', function (array $robots) {
if (is_search()) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Этот способ работает на современных версиях WordPress, где используется фильтр wp_robots. Он не ломает поиск и не мешает пользователю пользоваться сайтом, но подсказывает поисковым роботам не индексировать такие страницы.
2. Убрать поиск из XML-карты сайта, если он туда попал
По умолчанию WordPress не добавляет результаты поиска в sitemap, но кастомные решения и SEO-плагины иногда делают это через собственные правила. Если у вас есть код, который расширяет sitemap, проверьте, не попадают ли туда URL с ?s=. Для самописной логики можно фильтровать список ссылок до вывода.
<?php
add_filter('wp_sitemaps_posts_query_args', function (array $args, $post_type) {
// Этот фильтр не про поиск напрямую, но полезен, если sitemap собирается кастомно.
return $args;
}, 10, 2);Если sitemap создаёт SEO-плагин, править его лучше в настройках или через штатные фильтры конкретного плагина, а не через хаки в шаблоне.
3. Скрыть внутренний поиск от лишних ссылок
Если на сайте есть форма поиска в шапке, это нормально. Но не стоит массово ставить ссылки на страницы результатов поиска в меню, хлебных крошках, блоках «похожие запросы» и виджетах. Чем меньше внутренних ссылок на ?s=, тем быстрее поисковик перестанет воспринимать их как важные страницы.
Сравнение подходов
| Подход | Когда подходит | Минус |
|---|---|---|
Код через wp_robots | Нужен точечный контроль без плагинов | Надо поддерживать свой код |
| SEO-плагин | Уже используется на сайте и есть нужные настройки | Лишняя зависимость от интерфейса плагина |
| robots.txt | Как дополнительная мера | Не гарантирует удаление из индекса |
Если сайт небольшой и у вас уже есть SEO-плагин, проще использовать его настройки. Если нужен предсказуемый результат без лишней логики, лучше добавить короткий код и не трогать остальную структуру сайта.
Проверка результата после внедрения
После правки не ограничивайтесь визуальной проверкой. Откройте страницу поиска и убедитесь, что в исходном коде присутствует noindex. Затем проверьте ответ сервера и поведение робота.
- Откройте
/?s=testв браузере и посмотрите исходный HTML. - Проверьте, что страница отдаёт
200 OK, а не редирект на главную без причины. - В Search Console отправьте URL на повторную проверку, если он уже был в индексе.
- Посмотрите, не исчезли ли из индекса только поисковые страницы, а не обычные записи.
Если у вас есть доступ к логам или аналитике, проверьте, не выросло ли число 404 и не сломались ли внутренние ссылки на поиск. Само закрытие от индексации не должно влиять на пользовательский сценарий.
Частые ошибки и как их исправить
Закрыли поиск только в robots.txt
Это частая ошибка. Disallow не убирает уже проиндексированные URL и не мешает поисковику хранить их в индексе без содержимого. Для результата нужен именно noindex на странице.
Поставили noindex через JS
Если мета-тег добавляется скриптом после загрузки, это ненадёжно. Поисковый робот может не дождаться выполнения JS или обработать страницу иначе. Используйте серверный вывод через wp_robots или аналогичный PHP-хук.
Сломали шаблон поиска
Иногда разработчики случайно выводят noindex на все страницы сайта, если условие написано слишком широко. Проверяйте, что is_search() срабатывает только на страницах поиска, а не в архиве, категории или на главной.
Оставили дубли в хлебных крошках
Если тема строит хлебные крошки с ссылкой на поиск, это создаёт лишние URL и путаницу для роботов. Лучше убрать такие элементы из навигации или сделать их неиндексируемыми.
Практические советы по безопасности и производительности
Поиск сам по себе может быть тяжёлым, особенно на сайтах с большим количеством записей и сложными фильтрами. Если запросы к поиску часто идут от ботов, имеет смысл ограничить их через кеш на уровне сервера или CDN, но не кешировать персонализированные результаты без разбора.
Если вы используете дополнительный SEO-инструмент, например Clearfy Pro, проверьте, не дублирует ли он вашу ручную настройку. Два разных механизма для одного и того же правила иногда дают неожиданный результат в head-разметке. В таких случаях лучше оставить один источник правды.
Когда стоит выбрать плагин вместо кода
Если на сайте уже есть SEO-плагин и команда не хочет поддерживать кастомный код, настройка через интерфейс может быть разумнее. Но если задача точечная и вам нужен контроль только над поиском, короткий фрагмент в теме обычно надёжнее и прозрачнее.
Главное — не путать индексацию с доступностью. Поиск должен работать для людей, но не обязан конкурировать с основным контентом в выдаче.