Страницы внутреннего поиска WordPress часто создают мусор в индексе: одинаковые шаблоны, пустые выдачи, десятки URL с разными запросами и параметрами. При этом сам поиск на сайте обычно должен работать для пользователей. Задача здесь не в том, чтобы отключить поиск, а в том, чтобы убрать его результаты из индекса и не сломать навигацию.
Ниже разберём рабочие варианты: через robots.txt, noindex в HTML, фильтры WordPress и проверку результата. Для большинства сайтов достаточно аккуратной правки темы или небольшого MU-плагина.
Когда это действительно проблема
Сначала стоит убедиться, что речь именно о страницах внутреннего поиска, а не о полезных посадочных страницах. Типичный URL выглядит так: ?s=запрос. В индексе такие страницы появляются, если поисковик успел их обойти, а сайт не дал явного сигнала, что индексировать их не нужно.
Признаки, что закрывать поиск от индексации нужно
- в отчётах поиска много URL вида
/?s=...; - в выдаче есть пустые или почти пустые страницы поиска;
- один и тот же контент доступен через обычные страницы и через поиск;
- на сайте много параметров поиска, включая сортировку и фильтры, которые создают дубли.
Что не стоит делать
Не закрывайте поиск только через Disallow в robots.txt, если рассчитываете убрать уже проиндексированные страницы. Запрет в robots мешает обходу, но не всегда убирает URL из индекса. Для уже известных страниц нужен noindex или корректный каноникал, а иногда и оба сигнала сразу.
Диагностика: какие URL реально индексируются
Перед правками проверьте, как именно у вас устроен поиск. На разных темах и плагинах могут быть разные шаблоны выдачи. Иногда поиск отдаёт обычный архив, иногда отдельный шаблон, иногда подключён AJAX-поиск, который вообще не создаёт индексируемых страниц.
Что проверить вручную:
- откройте несколько адресов вида
/?s=тести посмотрите исходный код; - найдите в
<head>тегmeta name="robots"; - проверьте, есть ли
rel="canonical"и на какую страницу он указывает; - посмотрите, не создаёт ли тема отдельный шаблон поиска с индексируемым заголовком и текстом.
Если у вас установлен SEO-плагин, он может уже ставить noindex на поиск. Но это нужно не предполагать, а проверить в исходнике страницы.
Пошаговое решение без плагинов
Самый надёжный способ — явно добавить noindex,follow для страниц поиска и, при необходимости, запретить их обход в robots.txt. Для WordPress это можно сделать через фильтр wp_robots.
1. Добавьте noindex для внутреннего поиска
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_search() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );Этот вариант работает на современных версиях WordPress, где формируется массив robots-директив. Он не ломает поиск для пользователей, но даёт поисковым системам понятный сигнал не индексировать результаты.
2. При необходимости добавьте канонический URL
Если на сайте есть страницы поиска с параметрами, полезно убедиться, что каноникал не указывает на саму поисковую выдачу. Обычно для поиска каноникал либо не нужен, либо должен вести на основную страницу сайта, если это соответствует вашей логике.
<?php
add_filter( 'get_canonical_url', function( $canonical, $post ) {
if ( is_search() ) {
return home_url( '/' );
}
return $canonical;
}, 10, 2 );Этот приём стоит применять осторожно. Если у вас есть отдельная логика поиска по каталогу или базе знаний, каноникал на главную может быть слишком грубым решением. В таком случае достаточно noindex.
3. Ограничьте обход в robots.txt
Это дополнительная мера, а не замена noindex. Она помогает снизить нагрузку на обход, если бот часто ходит по поисковым URL.
<?php
add_filter( 'robots_txt', function( $output, $public ) {
$output .= "\nDisallow: /*?s=\n";
$output .= "Disallow: /search/\n";
return $output;
}, 10, 2 );Если у вас поиск работает не через ?s=, а через красивый URL вроде /search/term/, подставьте свой шаблон. Не копируйте правило вслепую: сначала посмотрите реальные адреса.
Сравнение подходов
| Способ | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
noindex через wp_robots | Прямой сигнал поисковикам, не ломает поиск | Нужно убедиться, что тег реально выводится | Почти всегда как базовое решение |
robots.txt | Снижает обход, простая настройка | Не убирает уже известные URL из индекса | Как дополнительная мера |
| SEO-плагин | Удобно, если уже используется | Лишняя зависимость от настроек плагина | Если у вас уже есть централизованное SEO-управление |
Если используете SEO-плагин
Во многих проектах проще не писать код, а включить noindex для страниц поиска в SEO-плагине. Это нормальный вариант, если плагин уже стоит и вы понимаете, где именно он меняет robots-директивы. Но не стоит держать сразу два источника правды: например, плагин ставит index, а тема — noindex. В таком случае поведение может стать непредсказуемым.
Если вы используете Clearfy Pro, проверьте разделы, связанные с SEO-очисткой и дублями. Для сайтов с большим количеством технических URL это часто удобнее, чем разносить правила по теме и отдельным сниппетам. Ссылка на продукт: Clearfy Pro.
Проверка результата после внедрения
После правок не ограничивайтесь просмотром страницы в браузере. Нужно проверить именно то, что увидит бот.
- откройте страницу поиска и посмотрите исходный код;
- убедитесь, что есть
meta name="robots" content="noindex,follow"или эквивалентный набор директив; - проверьте, что каноникал не ведёт на саму поисковую выдачу, если вы его меняли;
- посмотрите, не остались ли в sitemap URL поиска;
- в Search Console проверьте, как Google видит страницу после переобхода.
Если страница уже была в индексе, удаление может занять время. Это нормально. Важнее, чтобы новые обходы получали правильные сигналы.
Частые ошибки и как их исправить
Закрыли поиск в robots.txt, но URL остались в индексе
Это ожидаемое поведение. Disallow не удаляет уже известные страницы. Добавьте noindex и дождитесь переобхода.
Поставили noindex, но он не выводится
Часто фильтр подключили слишком поздно, в теме есть собственный SEO-шаблон, или другой плагин перезаписывает robots-мета. Проверьте исходный код и отключите конфликтующие настройки.
Сломали поиск для пользователей
Обычно это происходит, когда вместе с индексацией отключили сам шаблон поиска или перенаправили все поисковые URL на главную. Пользовательский поиск должен работать; закрывать нужно только индексацию, а не функциональность.
Добавили слишком широкое правило в robots.txt
Например, запретили не только ?s=, но и другие полезные параметры. После этого могут пострадать фильтры, сортировки и внутренние ссылки. Всегда проверяйте реальные URL, а не шаблон из чужой статьи.
Практические советы по безопасности и производительности
Если внутренний поиск создаёт много мусорных запросов, это не только SEO-проблема. На слабых хостингах поисковые страницы могут нагружать базу и кеш. В таких случаях полезно:
- ограничить индексацию параметров поиска;
- не выводить на странице поиска слишком тяжёлые блоки;
- проверить, не запускает ли тема дополнительные запросы в шаблоне поиска;
- если поиск часто используют, рассмотреть более быстрый поисковый механизм или отдельный плагин с кешированием результатов.
Для сайтов с большим количеством дублей и технических страниц иногда удобнее централизовать чистку через SEO-плагин, чем поддерживать десятки точечных правок в теме. Но базовый принцип остаётся тем же: сначала определить реальные URL, потом дать им правильный сигнал для поисковиков, и только после этого проверять эффект в индексе.