Фасетные фильтры, сортировки и параметры в URL часто создают в WordPress десятки почти одинаковых страниц. Для пользователя это удобный интерфейс, а для поисковика — источник дублей, мусорных URL и лишней нагрузки на краулинг. Проблема обычно всплывает не сразу: сначала растёт число страниц в индексе, потом в Search Console появляются странные URL с параметрами, а затем важные страницы начинают конкурировать с фильтрами.
Ниже — рабочий сценарий: как понять, какие URL нужно закрыть, чем именно их закрывать и как проверить, что вы не задели полезные посадочные страницы.
Когда фильтры становятся проблемой для индексации
Не каждый URL с параметром нужно прятать от поисковиков. Если параметр меняет только сортировку, вид выдачи или техническое состояние страницы, индексировать его обычно не нужно. Если же фильтр создаёт отдельную релевантную посадочную страницу с уникальным спросом, подход уже другой.
Типичные признаки, что фильтры пора ограничивать
- в индексе появились URL с
?sort=,?filter=,?price=,?color=и похожими параметрами; - в отчётах краулинга много страниц с одинаковым title и description, отличающихся только параметром;
- поисковик тратит обход на мусорные комбинации фильтров, а важные страницы обходятся реже;
- в выдаче ранжируются параметры вместо основной категории или посадочной страницы;
- фильтры генерируют бесконечные комбинации, которые не несут самостоятельной ценности.
Диагностика: какие URL закрывать, а какие оставить
Перед правками нужно разделить URL на три группы. Это важнее, чем сразу ставить noindex на всё подряд.
| Тип URL | Пример | Что делать |
|---|---|---|
| Технические параметры | ?sort=price, ?view=list | Закрывать от индексации, обычно ещё и от обхода |
| Фильтры-комбинации | ?color=red&size=m | Чаще всего закрывать, если нет отдельной SEO-ценности |
| Полезные посадочные | ЧПУ-страница категории или вручную созданная страница под спрос | Оставлять открытой, при необходимости усиливать контентом |
Проверять нужно не только HTML-страницы, но и то, как они попадают в sitemap, какие canonical у них стоят и не создают ли они внутренние ссылки из меню, фильтра или хлебных крошек.
Пошаговое решение: как закрыть фасетные URL в WordPress
Надёжнее всего сочетать несколько уровней: noindex для поисковиков, корректный canonical и, где уместно, запрет обхода в robots.txt. Но порядок важен: если закрыть всё в robots.txt без noindex, поисковик может не увидеть сигнал и оставить URL в индексе как «известный, но не просканированный».
1. Уберите мусорные URL из sitemap
Если фильтры или параметры попадают в XML-карту сайта, их нужно исключить на уровне генератора sitemap или плагина. Поисковику не стоит подсказывать URL, которые вы сами считаете техническими.
Если sitemap создаёт SEO-плагин, проверьте, не включены ли в него архивы, параметры и служебные страницы. Для самописных решений логика должна быть такой: в карту попадают только канонические URL, которые вы готовы индексировать.
2. Добавьте noindex,follow для страниц с параметрами
Если фильтр отрабатывает через GET-параметры, можно добавить мета-тег на уровне темы или плагина. Пример ниже ставит noindex,follow для страниц с типичными параметрами фильтрации.
<?php
add_action('wp_head', function () {
if (is_admin() || wp_doing_ajax()) {
return;
}
$params = ['sort', 'view', 'filter', 'color', 'size', 'price'];
foreach ($params as $param) {
if (isset($_GET[$param])) {
echo '<meta name="robots" content="noindex,follow">' . "\n";
break;
}
}
});Этот вариант подходит только если вы понимаете, какие параметры реально технические. Не вешайте его на все $_GET без разбора: можно случайно закрыть полезные страницы с UTM, промокодами или другими рабочими сценариями.
3. Задайте canonical на основную страницу
Если фильтр не должен жить отдельно, canonical должен указывать на чистую категорию или посадочную страницу без параметров. Это помогает склеить сигналы и не распылять релевантность.
<?php
add_filter('wpseo_canonical', function ($canonical) {
if (isset($_GET['sort']) || isset($_GET['view']) || isset($_GET['filter'])) {
return remove_query_arg(['sort', 'view', 'filter', 'color', 'size', 'price']);
}
return $canonical;
});Если у вас не Yoast SEO, аналогичный принцип можно реализовать через фильтр canonical в вашей теме или SEO-плагине. Смысл один: фильтрованный URL не должен конкурировать с основной страницей.
4. Ограничьте обход в robots.txt только для явного мусора
Запрет в robots.txt полезен для бесконечных комбинаций и технических параметров, но не заменяет noindex. Его стоит использовать точечно, когда вы уже убедились, что URL не должен обходиться.
User-agent: *
Disallow: /*?sort=
Disallow: /*?view=
Disallow: /*?filter=
Disallow: /*?color=
Disallow: /*?size=
Disallow: /*?price=Этот блок работает не во всех случаях одинаково, потому что поисковики по-разному трактуют шаблоны в robots.txt. Поэтому сначала проверьте, как именно формируются URL на вашем сайте, и не полагайтесь на один только файл.
Если фильтры сделаны плагином: что проверить в настройках
Многие каталоги и темы уже умеют управлять индексированием фильтров. В таких случаях лучше использовать штатные настройки, чем городить костыли в теме. Ищите опции вроде:
- noindex для страниц с параметрами;
- canonical на основную категорию;
- исключение параметров из sitemap;
- отключение индексации сортировок;
- ограничение генерации комбинаций фильтров.
Если плагин фильтрации создаёт отдельные ЧПУ-страницы под фильтры, проверьте, есть ли у них реальная поисковая ценность. Иногда лучше оставить только несколько вручную созданных посадочных страниц, а остальное закрыть.
Как проверить, что решение сработало
После внедрения не ограничивайтесь визуальной проверкой. Нужна проверка на уровне HTML, индекса и обхода.
- Откройте URL с параметром и убедитесь, что в исходном коде есть
<meta name="robots" content="noindex,follow">. - Проверьте canonical: он должен вести на чистую страницу без параметров.
- Посмотрите, исчез ли мусорный URL из sitemap.
- В Google Search Console проверьте отчёты по страницам и обходу: не растёт ли число URL с параметрами.
- Запустите краулер по сайту и сравните количество дублей до и после правок.
Для быстрой ручной проверки удобно использовать curl:
curl -I "https://example.com/catalog/?sort=price"
curl -s "https://example.com/catalog/?sort=price" | grep -i "robots\|canonical"Если страница отдаёт корректный canonical, а в HTML есть noindex, но URL всё равно остаётся в индексе, обычно проблема в том, что поисковик ещё не переобошёл страницу или где-то остались внутренние ссылки на параметризованный адрес.
Частые ошибки и как их исправить
Закрыли URL в robots.txt, но не поставили noindex
Это самая частая ошибка. Поисковик может знать URL по ссылкам, но не увидеть сигнал на странице. В итоге адрес остаётся в индексе дольше, чем нужно. Исправление: сначала вернуть доступ для обхода, дать увидеть noindex, и только потом при необходимости ограничивать crawl.
Поставили noindex на все страницы категории
Такое случается, когда фильтр определяется слишком грубо. Например, код смотрит только на наличие $_GET и не различает важные и технические параметры. Исправление: белый список параметров и отдельная логика для посадочных страниц.
Canonical указывает на саму фильтрованную страницу
Если canonical не убирает параметры, сигнал не склеивается. Проверьте, не переопределяет ли его SEO-плагин, тема или шаблон фильтра.
Фильтрованные URL остаются в sitemap
Даже при noindex это плохой сигнал. Поисковик видит, что вы сами включили URL в карту сайта. Исправление: исключить параметры на уровне генератора sitemap или отключить их вывод.
Безопасность и производительность: что не стоит делать
Не пытайтесь решать проблему массовыми редиректами всех параметризованных URL на главную. Это ломает аналитику, ухудшает пользовательский сценарий и может создать цепочки редиректов. Лучше работать с canonical и индексированием, а не с грубой подменой адресов.
Если фильтры генерируют тяжёлые запросы к базе, отдельно проверьте производительность. Иногда проблема не только в SEO, но и в том, что каждая комбинация фильтров создаёт дорогой SQL. В таком случае имеет смысл кешировать результаты, ограничивать число комбинаций и убрать лишние AJAX-запросы.
Если нужен более широкий аудит дублей, технической чистки и SEO-настроек, иногда проще опереться на готовый набор инструментов вроде Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже в этом случае логику фильтров всё равно нужно проверять вручную: плагин не знает, какие URL у вас реально полезны.
Практический чек-лист перед публикацией правок
- определены параметры, которые должны быть закрыты;
- полезные посадочные страницы не попали под общий запрет;
- для технических URL добавлен
noindex,follow; - canonical ведёт на чистый URL;
- мусорные URL исключены из sitemap;
- внутренние ссылки не ведут на параметризованные адреса без необходимости;
- проверка через исходный код и Search Console выполнена после внедрения.
Если после правок в индексе всё ещё много параметризованных страниц, не спешите расширять запреты. Сначала найдите источник ссылок: меню, фильтр, хлебные крошки, блоки похожих материалов или JS-рендер. Обычно именно там остаётся генератор дублей.