На небольшом сайте страницы поиска и фильтров часто не замечают. На живом проекте они быстро превращаются в источник дублей, мусорного трафика и лишней нагрузки на индексацию. Проблема обычно не в одном URL, а в наборе сценариев: внутренний поиск с параметром ?s=, фильтры с query string, сортировки, пагинация служебных страниц, а иногда и отдельные архивы, которые не дают ценности пользователю.
Если закрывать это «на глаз», легко переборщить: убрать из индекса нужные страницы или, наоборот, оставить открытыми десятки тысяч комбинаций. Ниже — рабочий порядок действий для WordPress: сначала диагностика, потом выбор способа закрытия, затем проверка результата.
Какие страницы обычно нужно закрывать
Не все технические URL одинаковы. Для начала разделите их на три группы:
- внутренний поиск — страницы вида
/?s=запрос; - фильтры и сортировки — URL с параметрами вроде
?color=red,?orderby=price,?filter_...; - служебные архивы — страницы, которые не несут самостоятельной ценности и дублируют основной контент.
Для поиска и фильтров чаще всего подходит не полное удаление, а запрет индексации с сохранением работы для пользователя. Это важная разница: URL должен открываться, но не попадать в поиск.
Диагностика: где именно появляются дубли
Прежде чем менять код или настройки, посмотрите, какие URL уже индексируются. Самый простой путь — проверить отчёты поисковой системы и логи сервера. Если доступа к логам нет, хотя бы соберите список URL из поиска по сайту и из фильтров, которые реально генерируются на фронтенде.
Что искать в первую очередь
- страницы с
?s=в индексе; - URL с параметрами сортировки и фильтрации;
- одинаковые страницы, доступные по разным комбинациям параметров;
- пустые результаты поиска, которые всё равно получают отдельный URL;
- страницы пагинации поиска, если они не нужны для индексации.
Если у вас установлен SEO-плагин, проверьте, не создаёт ли он отдельные правила для архивов и параметров. Иногда проблема не в WordPress, а в шаблоне темы или плагине фильтрации, который добавляет лишние ссылки в HTML.
Пошаговое решение без лишней магии
Надёжнее всего комбинировать два уровня: мета-robots noindex для страниц, которые должны открываться пользователю, и канонический URL там, где есть явный дубль. Для внутренних поисковых страниц обычно достаточно noindex, follow. Для фильтров — зависит от того, создают ли они уникальную ценность.
Вариант 1. Закрыть поиск через wp_robots
Если нужно закрыть именно страницы поиска, можно добавить правило в тему или мини-плагин. Хук wp_robots есть в WordPress, он позволяет изменить robots-мета без правки шаблонов.
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_search() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );
Такой вариант подходит, если вы хотите оставить поиск доступным для пользователей, но не отдавать его в индекс. После внедрения проверьте исходный код страницы поиска: там должен появиться noindex.
Вариант 2. Закрыть URL с параметрами через wp_robots
Если фильтры живут на обычных страницах и используют query string, можно отлавливать параметры вручную. Это полезно, когда фильтр создаёт много комбинаций, но вы не хотите закрывать весь раздел целиком.
<?php
add_filter( 'wp_robots', function( array $robots ) {
$params = array( 'orderby', 'price_min', 'price_max', 'color', 'size' );
foreach ( $params as $param ) {
if ( isset( $_GET[ $param ] ) && $_GET[ $param ] !== '' ) {
$robots['noindex'] = true;
$robots['follow'] = true;
break;
}
}
return $robots;
} );
Список параметров нужно подстроить под ваш сайт. Не копируйте его вслепую: у разных тем и плагинов фильтры называются по-разному. Сначала посмотрите реальные URL, потом добавляйте правила.
Вариант 3. Добавить canonical на фильтрованные страницы
Если фильтрованные страницы не должны иметь самостоятельного SEO-значения, каноникал должен указывать на основную страницу раздела. Это особенно полезно для сортировок и вторичных параметров.
<?php
add_filter( 'get_canonical_url', function( $canonical, $post ) {
if ( is_search() ) {
return home_url( '/' );
}
return $canonical;
}, 10, 2 );
Этот пример слишком общий для сложных каталогов, но показывает принцип: canonical должен вести на основную версию страницы, а не на каждую комбинацию параметров. Если у вас уже работает SEO-плагин, сначала проверьте его настройки canonical, чтобы не получить конфликт.
Когда лучше использовать плагин, а когда код
Если задача типовая и сайт ведёт редактор без доступа к коду, проще настроить это в SEO-плагине. Если же параметры фильтрации завязаны на кастомную логику темы или отдельный плагин, код даёт больше контроля.
| Подход | Когда подходит | Минус |
|---|---|---|
| SEO-плагин | Поиск, базовые архивы, простые noindex-настройки | Не всегда видит кастомные параметры фильтров |
| Код в теме или мини-плагине | Нестандартные query string, сложные фильтры, точечные правила | Нужно тестировать после обновлений темы и плагинов |
| Комбинация | Когда часть URL закрывается плагином, а часть — кастомным кодом | Риск дублирующих правил, если не следить за логикой |
Если нужен более широкий набор инструментов для технической чистки сайта, иногда удобнее держать это в одном месте. Например, в Clearfy Pro есть функции для работы с дублями и техническими настройками сайта: https://wpshop.ru/plugins/clearfy.
Проверка результата после внедрения
После изменения правил не ограничивайтесь просмотром страницы в браузере. Нужно проверить именно то, что увидит поисковый робот.
Чек-лист проверки
- откройте страницу поиска и убедитесь, что в HTML есть
noindex; - проверьте, что страница не отдаёт ошибку и доступна пользователю;
- посмотрите, не сломались ли ссылки на фильтры и сортировки;
- сравните canonical на основной странице и на фильтрованной версии;
- проверьте, не закрыли ли вы случайно нужные страницы с уникальным контентом;
- после переобхода убедитесь, что URL больше не растут в индексе.
Для быстрой технической проверки можно посмотреть заголовки и HTML через curl:
curl -I "https://example.com/?s=test"
Заголовки сами по себе не покажут noindex, но помогут убедиться, что страница открывается корректно. Сам robots-мета лучше смотреть в исходном коде или через инструменты проверки URL в поисковой системе.
Частые ошибки и как их исправить
Закрывают страницу через robots.txt, а не через noindex
Это частая ошибка. Если URL уже попал в индекс, запрет в robots.txt не гарантирует его удаление. Для страниц, которые должны открываться, но не индексироваться, нужен именно noindex.
Ставят noindex на весь раздел
Так бывает, когда фильтр реализован на уровне архива, а правило написано слишком грубо. В результате из индекса исчезают и полезные страницы. Исправление простое: проверяйте условие точнее, по конкретным параметрам или типу страницы.
Не учитывают SEO-плагин
Если плагин уже добавляет canonical или robots-мета, ваш код может конфликтовать с ним. В таком случае сначала отключите дублирующее правило в плагине, потом добавляйте своё. Иначе в HTML может оказаться два разных указания для робота.
Закрывают фильтры, которые дают трафик
Иногда фильтрованные страницы полезны: например, когда у них есть стабильный спрос и уникальный набор товаров или материалов. В таких случаях лучше не закрывать их автоматически, а оценить вручную. Универсального правила здесь нет.
Практические советы по безопасности и производительности
Если фильтров много, не строите логику на тяжёлых запросах к базе при каждом открытии страницы. Проверка $_GET и условий WordPress обычно дешевле, чем сложная обработка на каждом хите. Для больших проектов полезно вынести правила в отдельный мини-плагин, а не держать их в functions.php: так проще отключать и тестировать изменения.
Ещё один момент — не забывайте про кеш. После добавления noindex или изменения canonical очистите страницу и, если нужно, объектный кеш. Иначе вы будете проверять старую версию HTML и решите, что правило не работает.
Если на сайте есть сложная система фильтров, иногда проще сначала навести порядок в дублях и технических URL, а уже потом заниматься расширенной SEO-оптимизацией. В этом сценарии полезно иметь отдельный чек-лист для поиска, фильтров и архивов, а не править всё подряд одним правилом.