wphierarchy.ru wordpress Структура шаблонов WordPress

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

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

Ниже — рабочая схема для WordPress: как найти источник дублей, что закрывать от индексации, что оставлять, и как проверить, что после правок сайт не потерял важные страницы.

Как понять, что дубли уже есть

Сначала нужно отличить полезные посадочные страницы от технических URL. Для этого смотрят не только на sitemap, но и на фактические адреса, которые создаёт фильтрация. Часто проблема проявляется в URL с параметрами вроде ?filter=, ?orderby=, ?min_price=, а также в страницах пагинации и вариациях сортировки.

Признаки, которые видно без кода

  • в Google Search Console растёт количество проиндексированных страниц без роста кликов;
  • в выдаче встречаются URL с параметрами, которые не нужны пользователю;
  • одна и та же категория открывается по нескольким адресам;
  • в логике сайта есть фильтры, но у них нет отдельной SEO-стратегии.

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

  • есть ли у фильтров собственные ЧПУ или они работают через query string;
  • попадают ли параметрические URL в sitemap;
  • не создаёт ли тема или плагин отдельные архивы для каждого сочетания фильтров;
  • не дублируются ли title и description на страницах с разными параметрами.

Какие URL нужно закрывать, а какие оставить

Не стоит без разбора ставить noindex на всё подряд. Если у фильтра есть реально полезные посадочные страницы, например «красные кроссовки 42 размера» как отдельная SEO-страница, её лучше оставить индексируемой и сделать каноническую структуру. А вот технические комбинации сортировки, диапазоны цен и случайные наборы параметров обычно должны быть закрыты.

ПодходКогда использоватьМинус
Кодом через noindex и canonicalКогда нужен точный контроль над параметрамиНужно аккуратно поддерживать логику
SEO-плагин с настройками индексацииЕсли сайт типовой и без сложной логики фильтровНе всегда хватает гибкости
Закрытие в robots.txtДля части служебных параметровНе решает проблему дублей в индексе, если URL уже известны поисковику

Пошаговое решение: закрываем технические параметры

Самый надёжный вариант — оставить фильтры для пользователей, но для поисковиков пометить технические комбинации как неканонические. Если у вас есть контроль над темой или плагином фильтрации, можно добавить логику в functions.php дочерней темы или в мини-плагин.

1. Добавляем noindex,follow для URL с параметрами

Пример ниже ставит noindex для страниц, где есть типовые фильтрующие параметры. Это не универсальная магия, а базовый шаблон, который нужно адаптировать под свои имена параметров.

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

    $blocked_params = array('filter', 'orderby', 'min_price', 'max_price', 'color', 'size');

    foreach ($blocked_params as $param) {
        if (isset($_GET[$param]) && $_GET[$param] !== '') {
            echo '<meta name="robots" content="noindex,follow" />' . "\n";
            break;
        }
    }
}, 1);

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

2. Указываем канонический URL без параметров

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

add_filter('wpseo_canonical', function ($canonical) {
    if (is_admin()) {
        return $canonical;
    }

    $params = array('filter', 'orderby', 'min_price', 'max_price', 'color', 'size');

    foreach ($params as $param) {
        if (isset($_GET[$param]) && $_GET[$param] !== '') {
            return remove_query_arg($params, home_url(add_query_arg(array(), $_SERVER['REQUEST_URI'])));
        }
    }

    return $canonical;
});

Здесь используется фильтр Yoast SEO wpseo_canonical. Если у вас другой SEO-плагин, фильтр будет отличаться, а иногда каноникал проще задать через сам плагин или шаблон темы.

3. Убираем мусорные параметры из sitemap и внутренних ссылок

Если параметрические URL попадают во внутренние ссылки, поисковик будет находить их снова и снова. Проверьте шаблоны фильтров, хлебные крошки, блоки «похожие товары/записи» и любые ссылки, которые собираются JS-ом. Ссылки должны вести на чистые архивы, а не на текущую комбинацию фильтров.

Если фильтры построены на плагине

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

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

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

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

  1. Откройте URL с параметром, например ?orderby=price или ?filter=color.
  2. Проверьте исходный код страницы: должен быть noindex,follow для технических комбинаций.
  3. Посмотрите canonical: он должен вести на чистую версию страницы без параметров.
  4. Проверьте, что важные посадочные страницы не получили случайный noindex.
  5. В Google Search Console отправьте на переобход несколько тестовых URL и сравните статус индексации через некоторое время.

Если используете командную строку на сервере, можно быстро проверить заголовки ответа:

curl -I "https://example.com/category/shoes/?orderby=price"

И отдельно посмотреть HTML-мета-тег через браузер или view-source:. Для страниц, которые должны индексироваться, никаких лишних параметров в canonical быть не должно.

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

Закрыли всё через robots.txt

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

Поставили noindex на все архивы

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

Каноникал ведёт на несуществующую или редиректящую страницу

Это ломает сигнал для поисковика. Canonical должен указывать на живой, конечный URL без цепочек редиректов. Перед запуском проверьте, что базовая страница отдаёт 200 OK.

Фильтр создаёт URL, но не меняет контент

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

Что делать для безопасности и производительности

Чем больше параметров вы разрешаете, тем выше нагрузка на сайт. Особенно это заметно на больших каталогах и архивных страницах. Если фильтр строит запросы к базе данных, ограничьте количество допустимых сочетаний и не давайте индексировать всё подряд.

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

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

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

×
до 3225₽

Продавай темы и плагины WordPress!

Лови с каждой продажи

Начать ⋙