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

Страницы фильтров — типичная причина разрастания дублей в WordPress. На сайте появляются десятки или сотни URL с одинаковым контентом, но разными параметрами в адресе: сортировка, цвет, размер, цена, теги, пагинация. Для поисковика это не «удобная навигация», а набор почти одинаковых страниц, которые конкурируют между собой и размывают индексацию.

Проблема особенно заметна на каталогах, блогах с фильтрами по рубрикам и тегам, а также на сайтах, где параметры в URL генерируются автоматически через GET-запросы. Ниже — как понять, что именно нужно закрывать, чем отличается noindex от каноникал, и как сделать это без поломки внутренней навигации.

Когда страницы фильтров становятся проблемой

Не каждый URL с параметром нужно закрывать. Если фильтр реально помогает пользователю найти нужный материал и при этом не создает отдельную ценность для поиска, его обычно не индексируют. Если же страница фильтра имеет уникальный спрос и отдельный контентный смысл, решение может быть другим. Поэтому сначала стоит посмотреть на структуру URL и поведение поисковых систем.

Что обычно попадает в зону риска

  • URL с параметрами сортировки: ?orderby=price, ?sort=popular.
  • Страницы с фильтрами по атрибутам: ?color=red, ?size=m.
  • Комбинации фильтров, которые создают почти бесконечное число адресов.
  • Пагинация фильтрованных выдач, если она не несет самостоятельной пользы.
  • Технические страницы поиска по сайту, если они индексируются и плодят мусор.

Диагностика: какие URL уже попали в индекс

Перед правками полезно понять масштаб. Самый быстрый способ — посмотреть отчеты в Google Search Console и выгрузить список URL, которые уже индексируются. Если в выдаче есть страницы с параметрами, а в поиске они не должны жить отдельно, значит нужно ограничивать индексацию и одновременно оставить навигацию для пользователей.

Проверка вручную тоже помогает. Используйте запросы вида site:example.ru inurl:? или site:example.ru inurl:orderby. Это не заменяет Search Console, но быстро показывает, насколько проблема заметна.

На что смотреть в исходном коде

Откройте несколько проблемных URL и проверьте:

  • есть ли в <head> тег <meta name="robots" content="noindex,follow">;
  • указан ли canonical на основную страницу без параметров;
  • не закрыт ли URL случайно через robots.txt вместо мета-тега;
  • не генерирует ли тема или плагин отдельный индексируемый архив под каждый фильтр.

Важно: если вы закроете URL только через robots.txt, поисковик может не увидеть noindex и все равно оставить в индексе старые адреса. Для уже известных дублей чаще нужен именно мета-тег или заголовок X-Robots-Tag.

Что выбрать: noindex, canonical или запрет в robots.txt

У этих способов разная задача. Нельзя закрывать все подряд одним инструментом и ждать аккуратного результата.

ПодходКогда подходитОграничение
noindex,followСтраница нужна пользователю, но не должна жить в поискеНужно, чтобы поисковик мог обойти страницу и увидеть тег
canonicalЕсть почти дубли, которые должны указывать на основную страницуНе всегда убирает URL из индекса быстро, если страница уже известна
robots.txtНужно сократить обход технических URLНе гарантирует удаление уже проиндексированных страниц

На практике для фильтров чаще работает связка: noindex,follow для самих фильтрованных страниц и canonical на основную категорию или архив. Если фильтрованные URL вообще не должны существовать для поиска, дополнительно ограничивают генерацию ссылок и индексацию параметров на уровне темы или плагина.

Пошаговое решение в WordPress

Если у вас есть доступ к теме или небольшому mu-plugin, можно решить задачу без тяжелых SEO-плагинов. Ниже пример для страниц с параметрами в URL. Логика простая: если в запросе есть набор известных фильтров, добавляем noindex,follow и canonical на базовый URL без параметров.

<?php
add_action('wp_head', function () {
    if (is_admin()) {
        return;
    }

    $filter_keys = array('orderby', 'sort', 'color', 'size', 'price', 'brand');
    $has_filter = false;

    foreach ($filter_keys as $key) {
        if (isset($_GET[$key]) && $_GET[$key] !== '') {
            $has_filter = true;
            break;
        }
    }

    if (! $has_filter) {
        return;
    }

    echo '<meta name="robots" content="noindex,follow" />' . "\n";

    $canonical = remove_query_arg($filter_keys, home_url(add_query_arg(array(), $GLOBALS['wp']->request)));
    $canonical = strtok($canonical, '?');

    echo '<link rel="canonical" href="' . esc_url($canonical) . '" />' . "\n";
}, 1);

Этот вариант рабочий, но его нужно адаптировать под ваш сайт. Важно не сломать canonical для обычных страниц и не закрыть лишнее. Если фильтры формируются не через стандартные query-параметры, а через красивые URL, логика будет другой.

Если фильтры создаются плагином

У многих фильтровых плагинов есть собственные настройки SEO: можно отключить индексацию параметров, убрать лишние архивы или задать canonical. Это предпочтительнее, чем править все вручную, если плагин уже умеет корректно работать с метаданными. Но перед включением опции проверьте, не меняет ли она URL навигации для пользователей.

Если нужен более широкий набор SEO-правил и чистка дублей на сайте, иногда удобнее использовать Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wpturbo.ru&utm_medium=article&utm_campaign=zakryt-ot-indeksacii-stranicy-filtrov-v-wordpress. Но даже с плагином полезно понимать, что именно он меняет в коде.

Как закрыть фильтры через functions.php без лишних зависимостей

Если нужно точечно закрыть только часть URL, лучше вынести код в отдельный мини-плагин или mu-plugin, а не держать его в теме. Тогда при смене шаблона правила не потеряются.

<?php
/*
Plugin Name: Filter SEO Rules
*/

add_action('wp_head', function () {
    if (is_admin() || ! isset($_SERVER['REQUEST_URI'])) {
        return;
    }

    $uri = wp_unslash($_SERVER['REQUEST_URI']);

    if (strpos($uri, '?') === false) {
        return;
    }

    $blocked_params = array('orderby', 'sort', 'color', 'size', 'price');
    $query = array();
    wp_parse_str(parse_url($uri, PHP_URL_QUERY), $query);

    $matched = array_intersect(array_keys($query), $blocked_params);
    if (empty($matched)) {
        return;
    }

    echo '<meta name="robots" content="noindex,follow" />' . "\n";
}, 1);

Этот код не пытается быть универсальным SEO-решением. Он делает одну задачу: если в URL есть нежелательные параметры, страница получает noindex,follow. Дальше можно добавить canonical через фильтр wpseo_canonical, если у вас уже стоит Yoast SEO, или через собственную функцию, если SEO-плагина нет.

Проверка результата после внедрения

После правки не ограничивайтесь просмотром исходника. Проверка должна быть в двух местах: на самом сайте и в инструментах поисковика.

  • Откройте проблемный URL и убедитесь, что в <head> появился noindex,follow.
  • Проверьте canonical: он должен вести на основную страницу без параметров.
  • В Search Console отправьте URL на повторную проверку, если он уже был в индексе.
  • Сравните количество URL с параметрами в отчетах по индексированию до и после изменений.
  • Посмотрите серверные логи или статистику обхода, если нужно понять, не начал ли бот тратить меньше ресурсов на мусорные страницы.

Если страница все еще индексируется, не спешите менять все на robots.txt. Сначала убедитесь, что поисковик вообще может обойти URL и увидеть мета-тег. Иногда проблема в том, что фильтр генерируется только для авторизованных пользователей или закрыт JS-логикой, а поисковик видит другую версию страницы.

Частые ошибки и как их исправить

Закрыли URL в robots.txt и ждете удаления

Это частая ошибка. Если страница уже в индексе, запрет обхода не всегда помогает убрать ее быстро. Для удаления дублей нужен сигнал noindex или корректный canonical, а не только запрет в robots.txt.

Ставят canonical на главную страницу сайта

Для фильтрованной категории canonical должен указывать на релевантную базовую страницу, а не на главную, если тематика не совпадает. Иначе поисковик получает слабый сигнал и может проигнорировать его.

Закрывают все параметры подряд

Если в URL есть служебные параметры аналитики или сессии, не стоит автоматически помечать их как проблемные. Сначала разделите технические и контентные параметры. Иначе можно случайно закрыть полезные страницы или сломать сортировку для пользователей.

Оставляют фильтры без внутренней перелинковки

Если фильтр нужен для навигации, но закрыт от индексации, он все равно должен нормально работать для посетителя. Не убирайте ссылки и формы фильтрации только ради SEO. Лучше ограничить индексацию, чем ломать UX.

Практические советы по безопасности и производительности

Чем больше фильтров и параметров, тем выше риск раздувания количества URL. Это влияет не только на SEO, но и на нагрузку. Особенно если каждый запрос строит тяжелую выборку по мета-полям или таксономиям.

  • Не генерируйте отдельные архивы под каждый параметр без необходимости.
  • Кэшируйте фильтрованные выдачи, если они часто открываются и редко меняются.
  • Ограничьте число допустимых комбинаций фильтров в интерфейсе.
  • Проверьте, не создают ли плагины фильтрации лишние AJAX-эндпоинты, которые тоже индексируются.
  • Не храните SEO-логику только в теме, если сайт живет на нескольких шаблонах.

Если нужен более системный подход к чистке дублей и техническим настройкам, можно посмотреть на связку SEO-плагина и точечных правок в коде. Важно не пытаться решить все одной галочкой: фильтры, пагинация, canonical и robots работают по-разному, и это нужно учитывать отдельно.

Как закрыть от индексации страницы авторов в WordPress без лишних дублей
16.08.2026
Как закрыть от индексации отдельные страницы в WordPress через noindex, nofollow и robots.txt
19.08.2026
Как закрыть от индексации страницы фильтров в WordPress и убрать дубли из поиска
19.08.2026