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

Страницы с параметрами в WordPress часто появляются сами: сортировка, фильтры, пагинация, UTM-метки, служебные query string. Для пользователя это один и тот же контент, а для поисковика — набор разных URL. В результате индекс раздувается, в отчётах появляются дубли, а важные страницы получают меньше внимания краулера.

Задача здесь не в том, чтобы «запретить всё подряд», а в том, чтобы оставить в индексе только те URL, которые реально нужны. Для этого сначала нужно понять, какие именно параметры создают мусорные страницы, а потом выбрать способ: noindex, canonical, robots.txt или правка генерации ссылок.

Какие URL обычно создают дубли

В WordPress это не только стандартные архивы. Чаще всего проблемы дают:

  • страницы с параметрами сортировки и фильтрации, например ?orderby=price или ?color=blue;
  • пагинация с параметрами, если тема или плагин генерируют нестандартные ссылки;
  • поисковые и служебные параметры, которые прилетают из аналитики или рекламных кампаний;
  • страницы с одинаковым контентом, но разными UTM-метками;
  • варианты URL с лишними слешами, якорями и параметрами, которые попадают в sitemap или внутренние ссылки.

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

Диагностика: что именно индексируется

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

Что искать в первую очередь

  • URL, отличающиеся только параметром ?page=, ?orderby=, ?filter=;
  • страницы, у которых в HTML есть одинаковый title и description, но разные адреса;
  • URL, которые не должны быть в sitemap, но всё равно доступны по внутренним ссылкам;
  • страницы, где canonical указывает на саму себя, хотя это параметрическая версия основного URL.

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

Что делать: рабочая схема без лишнего риска

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

Шаг 1. Не генерировать мусорные ссылки там, где это возможно

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

Пример: убираем маркетинговые параметры из внутренних ссылок при генерации URL в теме или плагине:

add_filter('clean_url', function ($good_protocol_url, $original_url) {
    if (strpos($original_url, 'utm_') === false) {
        return $good_protocol_url;
    }

    $parts = wp_parse_url($good_protocol_url);
    if (empty($parts['query'])) {
        return $good_protocol_url;
    }

    parse_str($parts['query'], $query);
    foreach ($query as $key => $value) {
        if (strpos($key, 'utm_') === 0) {
            unset($query[$key]);
        }
    }

    $base = $parts['scheme'] . '://' . $parts['host'] . ($parts['path'] ?? '');
    $new_url = $base;

    if (!empty($query)) {
        $new_url .= '?' . http_build_query($query);
    }

    return $new_url;
}, 10, 2);

Этот пример не универсален и не должен слепо ставиться в продакшен без теста. Но он показывает логику: если параметр не нужен для контента, не надо тащить его в индексируемые ссылки.

Шаг 2. Добавить noindex на параметрические страницы

Если URL должен открываться пользователю, но не должен индексироваться, используйте мета-тег robots. Для WordPress это можно сделать через wp_head, если у вас нет SEO-плагина, который уже управляет robots meta.

add_action('wp_head', function () {
    if (!is_admin() && !empty($_GET)) {
        $blocked_keys = array('orderby', 'filter', 'sort', 'utm_source', 'utm_medium', 'utm_campaign');
        $has_blocked_param = false;

        foreach ($blocked_keys as $key) {
            if (isset($_GET[$key])) {
                $has_blocked_param = true;
                break;
            }
        }

        if ($has_blocked_param) {
            echo '<meta name="robots" content="noindex,follow">' . "\n";
        }
    }
}, 1);

Логика простая: страница остаётся доступной, ссылки по ней продолжают обходиться, но поисковик получает сигнал не добавлять её в индекс. Это особенно полезно для фильтров, сортировок и UTM-версий.

Шаг 3. Настроить canonical на основную версию

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

В теме это можно сделать через фильтр wpseo_canonical, если используется Yoast SEO, или через вывод собственного canonical в wp_head для простого случая. Ниже — вариант без привязки к конкретному SEO-плагину:

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

    $request_uri = $_SERVER['REQUEST_URI'] ?? '';
    if ($request_uri === '') {
        return;
    }

    $url = home_url(add_query_arg(array(), $request_uri));
    $parts = wp_parse_url($url);

    if (empty($parts['query'])) {
        return;
    }

    parse_str($parts['query'], $query);
    $allowed = array();

    foreach ($query as $key => $value) {
        if (strpos($key, 'utm_') !== 0 && $key !== 'orderby' && $key !== 'filter' && $key !== 'sort') {
            $allowed[$key] = $value;
        }
    }

    $canonical = home_url($parts['path']);
    if (!empty($allowed)) {
        $canonical = add_query_arg($allowed, $canonical);
    }

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

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

Когда robots.txt уместен, а когда нет

Robots.txt полезен, если нужно ограничить обход технических URL или снизить нагрузку на бот. Но для уже проиндексированных страниц это не панацея. Если закрыть URL в robots.txt, поисковик может перестать его обходить, но сам адрес ещё долго будет висеть в индексе без содержимого.

ПодходЧто делаетКогда использоватьОграничение
noindex, followНе добавляет страницу в индексДля фильтров, сортировок, UTM-версийНужно, чтобы бот мог увидеть тег
canonicalУказывает основную версию URLДля дублей с одинаковым контентомНе всегда игнорирует плохую внутреннюю перелинковку
robots.txtОграничивает обходДля технических и тяжёлых URLНе гарантирует удаление из индекса

Практически это означает одно: robots.txt — вспомогательный инструмент, а не основное средство борьбы с дублями.

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

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

  • в HTML есть noindex,follow там, где он нужен;
  • canonical ведёт на чистую или правильную основную версию;
  • лишние параметры не попадают в внутренние ссылки;
  • страницы с параметрами не добавлены в sitemap;
  • в Search Console уменьшается число проиндексированных URL с параметрами.

Для быстрой проверки можно использовать curl и посмотреть заголовки и HTML:

curl -L https://example.com/catalog/?orderby=price | grep -iE 'robots|canonical'

Если у вас включён кеш, проверьте не только страницу в браузере, но и ответ сервера после очистки кеша. Бывает, что в админке код уже изменён, а бот ещё получает старую версию из кеша.

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

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

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

Поставили noindex на все страницы подряд

Так часто ломают полезные посадочные страницы. Если фильтр создаёт действительно отдельную коммерческую или контентную страницу, её нельзя закрывать автоматически только потому, что в URL есть параметр. Сначала проверьте, есть ли у этой страницы уникальный спрос и отдельная ценность.

Добавили canonical, но оставили десятки внутренних ссылок на параметрические URL

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

Дублируете robots meta через плагин и код темы

Когда один плагин ставит index,follow, а тема — noindex,follow, итог зависит от порядка вывода и может отличаться между шаблонами. Лучше оставить один источник управления robots meta.

Если нужен быстрый путь без разработки

На проектах, где нет времени писать код, часть задачи можно закрыть SEO-плагином и настройками темы. Но всё равно проверьте, как именно он обрабатывает параметры: не каждый плагин умеет корректно работать с фильтрами и нестандартными query string.

Если нужен более системный подход к чистке дублей и техническому SEO в WordPress, можно посмотреть в сторону решений уровня Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином полезно понимать логику: что закрываем, чем закрываем и как потом проверяем результат.

Мини-чек-лист перед публикацией правок

  • Определены все типы параметров, которые создают дубли.
  • Проверено, какие из них должны остаться доступными пользователю.
  • Для мусорных URL добавлен noindex,follow.
  • Canonical указывает на основную версию страницы.
  • Лишние параметры не генерируются во внутренних ссылках.
  • Robots.txt не используется как единственный способ закрытия уже проиндексированных страниц.
  • После очистки кеша проверены HTML и ответ сервера.

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

Как закрыть от индексации страницы внутреннего поиска WordPress
19.08.2026
Как закрыть от индексации страницы фильтров и параметров в WordPress
22.08.2026
Как закрыть дубли страниц авторов и архивов в robots.txt и noindex в WordPress
16.08.2026