Как убрать из индексации страницы фильтров WordPress без потери полезного трафика

На 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;
    }
});

Этот вариант стоит применять осторожно. Если фильтр реально нужен пользователям, не надо редиректить всё подряд. Сначала проверьте, какие параметры используются интерфейсом, а какие прилетают из внешних ссылок и мусорных переходов.

Пошаговое решение для типового каталога

Если нужен практический порядок действий, я бы делал так:

  1. Собрать список параметров, которые создают дубли.
  2. Проверить, есть ли у них отдельная ценность для поиска.
  3. Для мусорных комбинаций поставить noindex,follow.
  4. Для базовых дублей добавить canonical на основную категорию.
  5. Для совсем лишних параметров убрать генерацию URL или редиректить их.
  6. Проверить 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 не нужен поиску, он не должен попадать в индекс. Всё остальное — уже детали реализации.

Как создать адаптивный фильтрованный запрос в WordPress для больших объемов данных
23.09.2026
Как использовать WPRemark для эффективного управления комментариями в WordPress
23.09.2026
Как отладивать и логировать все запросы в WordPress с помощью WPData
30.09.2026
Как убрать из индексации страницы поисковой выдачи WordPress
03.09.2026
Как создать эффективный автообновляемый отчет с QR-кодом в WordPress
23.09.2026