На WordPress страницы фильтров часто появляются сами: сортировка, диапазоны цен, метки, параметры в URL, AJAX-подгрузка с отдельными адресами. Для пользователя это удобно, а для поиска — источник дублей, мусорных страниц и размывания краулингового бюджета. Проблема обычно не в самих фильтрах, а в том, что они начинают индексироваться как полноценные посадочные страницы.
Ниже — рабочая схема, как закрыть такие URL от индексации, не сломав фильтрацию на сайте и не убив полезные страницы, которые действительно должны ранжироваться.
Когда фильтры становятся SEO-проблемой
Сначала стоит понять, что именно индексируется. В реальных проектах это обычно не один тип URL, а набор:
- страницы с параметрами вроде
?filter_color=redили?sort=price; - комбинации фильтров, которые создают десятки почти одинаковых страниц;
- страницы пагинации внутри отфильтрованных выдач;
- служебные URL, которые открываются из фасетной навигации;
- результаты поиска по каталогу, если фильтр и поиск используют общую логику.
Если такие адреса попадают в индекс, поисковик начинает видеть много слабых страниц с одинаковыми заголовками, одинаковым шаблоном и минимальной уникальностью. Это не всегда критично, но почти всегда лишнее.
Что считать полезной страницей, а что — дублем
Полезная страница фильтра — это та, у которой есть стабильный спрос, понятный интент и отдельная ценность. Например, «красные кроссовки Nike» может быть нормальной посадочной, если она оформлена как отдельная категория. А вот комбинация «красные кроссовки Nike, размер 42, сортировка по цене» — почти всегда технический дубль.
Если сомневаетесь, ориентируйтесь на три признака:
- страница создаётся автоматически из параметров;
- контент на ней почти не отличается от базового списка;
- у неё нет самостоятельной поисковой ценности.
Диагностика: какие URL уже попали в индекс
Перед правками проверьте, что именно индексируется. Самый быстрый способ — поиск по сайту в Google и просмотр отчётов в Search Console. Ищите URL с параметрами, которые не должны ранжироваться.
Полезно также посмотреть логи обхода или отчёт «Страницы» в Search Console: если бот регулярно тратит время на фильтры, это сигнал, что закрытие нужно делать не только для индексации, но и для обхода.
Минимальный чек-лист диагностики:
- есть ли в индексе URL с параметрами;
- отличается ли title у фильтрованных страниц от базовой категории;
- есть ли каноникал на основную категорию;
- не создают ли фильтры цепочки пагинации;
- не закрыты ли случайно полезные посадочные страницы.
Как закрыть фильтры от индексации: три рабочих подхода
Есть три нормальных варианта: noindex, канонический URL и серверная логика, которая не даёт создавать индексируемые дубли. На практике часто используют комбинацию.
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
noindex, follow | Для параметров и временных фильтров | Просто внедрить, не ломает навигацию | Страница может ещё какое-то время обходиться ботом |
| canonical на основную категорию | Для явных дублей | Подсказывает поисковику основную версию | Не всегда достаточно, если URL активно генерируются |
| Запрет генерации URL на уровне кода | Для мусорных параметров | Убирает причину дублей | Нужна правка темы или плагина |
Вариант 1. Добавить noindex для страниц с параметрами
Если фильтр живёт на обычных URL с query string, можно добавить мета-тег robots только для таких страниц. Это не требует ломать сам фильтр и подходит, когда нужно быстро убрать мусор из индекса.
<?php
add_action('wp_head', function () {
if (is_admin()) {
return;
}
$params = ['filter_color', 'filter_size', 'sort', 'price_min', 'price_max'];
foreach ($params as $param) {
if (isset($_GET[$param]) && $_GET[$param] !== '') {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
break;
}
}
}, 1);Этот код лучше размещать в дочерней теме или в небольшом mu-plugin. Он не мешает фильтрации, но говорит поисковику не индексировать такие страницы.
Вариант 2. Поставить canonical на базовую категорию
Если фильтр не должен иметь самостоятельную SEO-ценность, canonical помогает свести сигналы к основной странице. Для WordPress это удобно делать через фильтр wpseo_canonical, если на сайте используется Yoast SEO, или через собственный вывод в wp_head, если SEO-плагина нет.
Пример без привязки к конкретному SEO-плагину:
<?php
add_action('wp_head', function () {
if (is_admin()) {
return;
}
$params = ['filter_color', 'filter_size', 'sort', 'price_min', 'price_max'];
$has_filter = false;
foreach ($params as $param) {
if (!empty($_GET[$param])) {
$has_filter = true;
break;
}
}
if (!$has_filter) {
return;
}
$canonical = get_permalink(get_queried_object_id());
if ($canonical) {
echo '<link rel="canonical" href="' . esc_url($canonical) . '" />' . "\n";
}
}, 2);Здесь важно не подставлять каноникал на случайный URL. Для архивов таксономий лучше брать именно текущую базовую страницу архива, а не главную.
Вариант 3. Не создавать индексируемые URL для мусорных параметров
Если фильтр реализован в теме или кастомном плагине, лучше сразу ограничить список разрешённых параметров. Всё, что не нужно для SEO и аналитики, не должно попадать в отдельные URL.
<?php
add_filter('query_vars', function ($vars) {
$vars[] = 'filter_color';
$vars[] = 'filter_size';
$vars[] = 'sort';
return $vars;
});
add_action('template_redirect', function () {
if (is_admin()) {
return;
}
$allowed = ['filter_color', 'filter_size', 'sort'];
$unknown = array_diff(array_keys($_GET), $allowed, ['paged', 's']);
if (!empty($unknown) && is_post_type_archive()) {
// Можно оставить страницу рабочей, но убрать лишние параметры из URL.
wp_safe_redirect(remove_query_arg($unknown), 301);
exit;
}
});Этот вариант стоит применять осторожно. Если фильтр реально нужен пользователям, не надо редиректить всё подряд. Сначала проверьте, какие параметры используются интерфейсом, а какие прилетают из внешних ссылок и мусорных переходов.
Пошаговое решение для типового каталога
Если нужен практический порядок действий, я бы делал так:
- Собрать список параметров, которые создают дубли.
- Проверить, есть ли у них отдельная ценность для поиска.
- Для мусорных комбинаций поставить
noindex,follow. - Для базовых дублей добавить canonical на основную категорию.
- Для совсем лишних параметров убрать генерацию URL или редиректить их.
- Проверить sitemap: туда не должны попадать фильтрованные адреса.
Если используется SEO-плагин, не дублируйте логику сразу в двух местах. Например, если canonical уже задаёт Yoast SEO, не выводите второй canonical вручную. Два каноникала — частая причина путаницы.
Проверка результата после внедрения
После изменений не ограничивайтесь просмотром исходника страницы. Нужно проверить поведение в нескольких точках:
- открыть URL с параметром и убедиться, что в
<head>появилсяnoindex,followили canonical; - проверить, что фильтр по-прежнему работает для пользователя;
- посмотреть, не попали ли такие URL в XML-карту сайта;
- в Search Console отправить на проверку несколько типовых адресов;
- через пару дней посмотреть, уменьшается ли число обнаруженных дублей.
Если хотите быстро проверить заголовок и robots-мета, достаточно открыть страницу в браузере и посмотреть исходный код. Для canonical и robots это надёжнее, чем визуальная проверка.
Частые ошибки и как их исправить
Закрыли фильтр в robots.txt, но URL всё равно индексируются
Это нормальная ситуация: robots.txt запрещает обход, но не гарантирует удаление уже известных URL из индекса. Если страница уже попала в поиск, нужен noindex или canonical, а не только запрет в robots.txt.
Поставили noindex на все архивы подряд
Так часто ломают полезные категории. Сначала отделите технические параметры от реальных посадочных страниц. Закрывать нужно не весь архив, а именно URL с мусорными комбинациями.
Сделали canonical на главную
Это грубая ошибка. Для фильтрованных страниц canonical должен указывать на ближайшую логическую базовую страницу: категорию, архив таксономии или основную версию листинга.
Оставили фильтры в sitemap
Если URL уже закрыт от индексации, но продолжает попадать в sitemap, вы сами подаёте поисковику сигнал, что страница важна. Проверьте генератор карты сайта и исключите параметры.
Что делать с безопасностью и производительностью
Фильтры — это не только SEO, но и нагрузка. Чем больше комбинаций, тем больше запросов к базе и тем выше шанс получить медленные страницы. Если фильтрация строится на мета-полях, следите за количеством параметров и не давайте пользователю создавать бесконечные комбинации.
С точки зрения безопасности не стоит принимать любые параметры из $_GET без проверки. Даже если это не SQL-инъекция в чистом виде, мусорные значения могут ломать логику шаблона, кеш и каноникал. Для каждого параметра нужен whitelist, а не «разрешить всё, что пришло».
Если нужен более системный подход к технической чистке сайта, иногда удобнее использовать Clearfy Pro как набор точечных настроек для удаления дублей и лишних технических страниц: https://wpshop.ru/plugins/clearfy. Но даже с плагином полезно понимать, какие URL вы закрываете и почему.
Главная проверка здесь простая: если фильтр нужен пользователю, он должен работать; если URL не нужен поиску, он не должен попадать в индекс. Всё остальное — уже детали реализации.