Если в индексе начали появляться URL вида ?sort=price, ?filter_color=blue, ?orderby=menu_order или похожие вариации, проблема обычно не в самом WordPress, а в том, как тема, плагин фильтрации или поиск формируют ссылки. Поисковик видит десятки почти одинаковых страниц, а вы получаете размытый краулинговый бюджет и дубли в отчётах.
Ниже — рабочий сценарий: как диагностировать источник параметров, что закрывать через robots.txt, где нужен noindex, а где лучше вообще убрать генерацию лишних URL на уровне кода.
Как понять, что дубли идут именно из параметров
Сначала проверьте, какие URL реально попали в индекс или в обход поискового робота. Для этого достаточно посмотреть:
- отчёт «Страницы» в Google Search Console;
- логи сервера или статистику обхода, если они доступны;
- поиск по сайту через
site:example.comс типичными параметрами; - HTML исходник страниц фильтрации: есть ли там каноникал, мета robots и ссылки с параметрами в навигации.
Типичный признак проблемы: одна и та же категория доступна как /catalog/, /catalog/?sort=price, /catalog/?filter_size=m, /catalog/?utm_source=.... Если такие адреса отдаются с кодом 200 и не нормализуются, поисковик может индексировать их как отдельные страницы.
Что считать нормальным, а что — лишним
Не все параметры одинаково вредны. UTM-метки для аналитики обычно не должны попадать в индекс, но и не обязаны ломать страницу. А вот параметры сортировки, пагинации фильтра, внутреннего поиска и служебные флаги часто создают именно дубли, которые лучше закрывать или нормализовать.
| Подход | Когда подходит | Минус |
|---|---|---|
| robots.txt | Для массового отсечения шаблонных параметров и мусорных URL | Не убирает уже проиндексированные страницы |
| noindex, follow | Если страницу нужно оставить доступной, но не показывать в поиске | Роботу всё равно нужно зайти на страницу |
| canonical | Если есть основная версия страницы и вариации должны указывать на неё | Не всегда спасает, если URL сильно отличаются по содержимому |
| Убрать генерацию параметров | Если фильтр не нужен для SEO и создаёт мусор | Нужно править тему или плагин |
Диагностика: где именно рождаются лишние URL
Перед настройкой индексации важно понять источник. В WordPress это обычно один из четырёх вариантов: тема, плагин фильтрации, плагин поиска или собственный код, который добавляет параметры в ссылки.
- Проверьте шаблоны архива и категорий: не добавляет ли тема сортировку через GET-параметры.
- Посмотрите настройки плагина фильтров: многие дают опцию «SEO-friendly URLs», но при этом всё равно оставляют старые параметры.
- Проверьте, не генерирует ли форма поиска URL с параметрами в адресной строке.
- Если есть кастомный код, найдите вызовы
add_query_arg()иremove_query_arg().
Если параметр появляется только в ссылках интерфейса, а не в контенте страниц, лучше сначала убрать его из генерации. Это надёжнее, чем потом пытаться лечить дубли через robots.
Пошаговое решение
1. Закройте мусорные параметры в robots.txt
Этот способ полезен для массовых шаблонных параметров, которые не несут ценности для поиска. Например, UTM, сортировка, служебные флаги. Важно: robots.txt не удаляет уже проиндексированные URL, он только ограничивает обход.
User-agent: *
Disallow: /*?sort=
Disallow: /*?orderby=
Disallow: /*?filter_
Disallow: /*?utm_
Такой вариант работает не во всех случаях одинаково, потому что поисковые роботы по-разному интерпретируют шаблоны. Если у вас много разных параметров, не пытайтесь закрыть всё одной строкой без проверки.
2. Добавьте noindex для страниц, которые должны открываться пользователю
Если фильтр нужен посетителю, но не нужен в поиске, лучше оставить страницу доступной и поставить noindex, follow. Это особенно актуально для сортировки и некоторых комбинаций фильтров.
В WordPress это можно сделать через wp_robots:
add_filter('wp_robots', function ($robots) {
if (!empty($_GET['sort']) || !empty($_GET['orderby']) || !empty($_GET['filter_color'])) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});
Смысл простой: если в URL есть выбранные параметры фильтра, страница не должна попадать в индекс, но ссылки на ней можно продолжать обходить.
3. Укажите канонический URL на основную версию
Если параметр не меняет смысл страницы, а только её представление, canonical помогает склеить вариации. Для архивов и категорий это часто основной слой защиты от дублей.
add_filter('get_canonical_url', function ($canonical, $post) {
if (is_archive() || is_tax() || is_category()) {
$canonical = remove_query_arg(array('sort', 'orderby', 'filter_color', 'filter_size'));
}
return $canonical;
}, 10, 2);
Здесь важно не переусердствовать. Не надо бездумно удалять все параметры подряд: если параметр реально меняет содержимое страницы и нужен как отдельная посадочная, canonical на базовую версию может быть неверным решением.
4. Уберите параметры из ссылок, если они не нужны
Самый чистый вариант — не порождать мусорные URL вообще. Если сортировка или фильтр не должны индексироваться и не обязаны сохраняться в адресной строке, лучше строить ссылки без GET-параметров.
$base_url = get_term_link($term);
$url = add_query_arg(array(
'sort' => 'price',
'filter_color' => 'blue',
), $base_url);
// Если параметр нужен только для JS, не выводите его в href.
// Передавайте значение через data-атрибут:
echo '<a href="' . esc_url($base_url) . '" data-sort="price">Сортировать по цене</a>';
Если фильтр работает на JavaScript, это часто лучший путь: пользователь получает интерактивность, а поисковик — чистый URL.
Какой способ выбрать в реальном проекте
На практике обычно нужен не один инструмент, а связка. Для служебных параметров — robots.txt. Для страниц, которые должны открываться, но не индексироваться, — noindex. Для дублей одной и той же сущности — canonical. Для лишних ссылок — правка генерации.
Если у вас уже есть плагин фильтрации, сначала проверьте его настройки. Многие решения умеют:
- отключать индексирование параметров;
- ставить canonical на базовую категорию;
- генерировать ЧПУ вместо GET-параметров;
- скрывать служебные страницы от поисковиков.
Если нужен более широкий контроль над дублями, чисткой сайта и техническими SEO-настройками, иногда проще использовать специализированный набор инструментов, чем собирать всё вручную. Но даже в этом случае сначала проверьте, не ломает ли плагин логику фильтрации и не создаёт ли новые URL.
Проверка результата после внедрения
После изменений не ограничивайтесь просмотром исходника. Нужно проверить и поведение сервера, и реакцию поисковика.
- Откройте URL с параметром в браузере и убедитесь, что страница доступна.
- Посмотрите исходный код: есть ли
noindexи правильный canonical. - Проверьте заголовки ответа, если используете серверные правила.
- Сравните базовый URL и URL с параметром: не меняется ли основной контент.
- В Google Search Console отправьте проверку URL и посмотрите, как робот видит страницу.
Для быстрой проверки canonical и robots можно использовать такой подход:
curl -I 'https://example.com/catalog/?sort=price'
И отдельно посмотреть HTML:
curl -s 'https://example.com/catalog/?sort=price' | grep -iE 'canonical|robots'
Если canonical указывает на чистый URL, а мета robots содержит noindex там, где это нужно, вы двигаетесь в правильную сторону. Но окончательный сигнал всё равно даёт переобход страниц поисковиком.
Частые ошибки и как их исправить
Закрыли всё в robots.txt и ждёте удаления из индекса
Это самая частая ошибка. Disallow не удаляет уже известные поисковику URL. Если страница уже в индексе, добавьте noindex или настройте canonical, а затем дождитесь переобхода.
Ставите noindex на все фильтры без разбора
Если фильтр создаёт полезные посадочные страницы, массовый noindex может обрезать трафик. Сначала разделите параметры на служебные и потенциально полезные.
Canonical указывает на саму себя с параметрами
Иногда тема или плагин формируют canonical из текущего URL, включая GET-параметры. Это почти бесполезно. Канонический адрес должен вести на чистую основную версию.
Параметры убрали, а ссылки в шаблоне остались
Если в меню, фильтрах или кнопках всё ещё есть старые URL, поисковик продолжит их находить. После правки проверьте не только мета-теги, но и все внутренние ссылки на странице.
Смешали SEO и аналитику
UTM-метки нужны маркетингу, но не поиску. Не пытайтесь решать их судьбу теми же правилами, что и фильтры каталога. Для UTM обычно достаточно canonical на чистую страницу и отсутствия внутренних ссылок с такими параметрами.
Практические советы по безопасности и производительности
Чем меньше лишних URL генерирует сайт, тем меньше нагрузка на обход и тем проще поддерживать логику индексации. Это особенно заметно на крупных каталогах, где фильтры комбинируются десятками способов.
- Не храните SEO-логику только в плагине, если она критична: проверьте, что будет после его отключения.
- Не закрывайте в robots важные страницы, которые должны участвовать в перелинковке.
- Не используйте одинаковые правила для всех параметров без анализа: сортировка, фильтр и UTM решаются по-разному.
- Если фильтр работает через AJAX, убедитесь, что он не создаёт отдельные индексируемые URL без необходимости.
Если задача шире, чем один параметр, и на сайте уже накопились дубли, удобнее сначала привести в порядок техническую базу: убрать мусорные ссылки, настроить canonical, проверить robots и только потом смотреть на расширенные SEO-инструменты.