Параметры в URL — частая причина дублей на WordPress-сайте. Один и тот же контент может открываться как /page/, /?sort=price, /?utm_source=... или /?filter=red. Для пользователя это просто разные ссылки, а для поисковика — отдельные страницы, которые конкурируют между собой и расходуют краулинговый бюджет.
Проблема особенно заметна после установки фильтров, сортировок, UTM-меток, виджетов поиска или когда тема/плагин начинают добавлять параметры в ссылки без контроля. Ниже — как быстро диагностировать источник дублей, что закрывать от индексации, а что лучше нормализовать на уровне кода.
Как понять, что дубли уже появились
Сначала не трогайте robots.txt и не ставьте массовый noindex наугад. Важно понять, какие именно параметры создают лишние URL и как они влияют на сайт.
Признаки в Search Console и логах
Обычно картина выглядит так:
- в отчёте об индексировании растёт число страниц с параметрами;
- одна и та же категория открывается по нескольким адресам;
- в логах бота много запросов к URL с
?sort=,?filter=,?utm_; - в выдаче появляются неканонические версии страниц;
- внутренние ссылки начинают вести на URL с хвостом параметров.
Если у вас есть доступ к серверным логам, проверьте частоту запросов к таким адресам. Это помогает отличить реальную индексацию от единичных заходов пользователей.
Быстрая проверка через поиск по сайту
Откройте несколько типовых страниц и сравните:
- URL без параметров;
- URL с сортировкой;
- URL с фильтром;
- URL с UTM-метками;
- URL с параметрами пагинации, если они генерируются отдельно.
Если контент на этих адресах одинаковый или почти одинаковый, это кандидат на канонизацию или закрытие от индексации.
Что делать в первую очередь: сравнить варианты решения
Не все параметры нужно обрабатывать одинаково. UTM-метки и служебные параметры обычно не должны создавать отдельные страницы. Фильтры и сортировки — зависят от задачи: иногда их надо индексировать выборочно, иногда закрывать полностью.
| Подход | Когда подходит | Минус |
|---|---|---|
| Кодом: canonical, редирект, noindex | Когда параметр технический и не должен жить как отдельная страница | Нужно аккуратно тестировать, чтобы не сломать фильтры |
| Плагином для SEO/чистки дублей | Когда нужен быстрый контроль без правки темы | Не всегда покрывает нестандартные параметры |
| Оставить как есть | Когда параметр реально меняет смысл страницы и нужен в индексе | Риск дублей и лишнего обхода |
Если у вас уже стоит Clearfy Pro, часть задач по удалению дублей и технической чистке можно закрыть через его настройки, но для нестандартных параметров всё равно часто нужен код или серверные правила.
Пошаговое решение: закрываем служебные параметры и нормализуем URL
Шаг 1. Определите список параметров
Разделите параметры на три группы:
- служебные — UTM,
fbclid,gclid,ref; - технические —
preview,replytocom, внутренние токены; - содержательные —
sort,filter,brand,color.
Служебные почти всегда можно убрать из индексации. Содержательные — только после проверки, не нужен ли им отдельный SEO-статус.
Шаг 2. Добавьте canonical для страниц с параметрами
Если параметр не должен менять основную страницу, canonical должен указывать на чистый URL без параметров. Это не заменяет всё остальное, но снижает риск дублей.
<?php
add_filter('wpseo_canonical', function ($canonical) {
if (is_admin()) {
return $canonical;
}
if (!empty($_GET)) {
$clean_url = home_url(add_query_arg(array(), $GLOBALS['wp']->request));
return trailingslashit($clean_url);
}
return $canonical;
});Этот пример подходит не для всех сайтов. Если у вас уже используется SEO-плагин, проверьте, не конфликтует ли он с генерацией canonical. Иногда проще настроить правила в самом плагине, чем вмешиваться в фильтр.
Шаг 3. Уберите UTM и похожие параметры через редирект
Для маркетинговых меток лучше не плодить отдельные URL. Если страница открыта с UTM, можно сделать 301 на чистый адрес, сохранив аналитику на стороне трекинга.
<?php
add_action('template_redirect', function () {
if (is_admin() || wp_doing_ajax()) {
return;
}
$remove_params = array('utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'gclid', 'fbclid');
$has_tracking = false;
foreach ($remove_params as $param) {
if (isset($_GET[$param])) {
$has_tracking = true;
break;
}
}
if (!$has_tracking) {
return;
}
$url = home_url(add_query_arg(array(), $GLOBALS['wp']->request));
wp_safe_redirect(trailingslashit($url), 301);
exit;
});Если на сайте есть внешняя аналитика и рекламные кампании, сначала проверьте, не ломает ли редирект атрибуцию. Иногда достаточно canonical и noindex, а редирект лучше оставить только для явного мусора вроде fbclid.
Шаг 4. Закройте технические параметры от индексации
Для страниц с параметрами, которые не должны попадать в индекс, можно добавить noindex,follow. Это полезно, если вы не хотите терять переходы по внутренним ссылкам, но не хотите видеть отдельный URL в выдаче.
<?php
add_filter('wp_robots', function ($robots) {
$blocked_params = array('replytocom', 'preview', 'sort', 'filter');
foreach ($blocked_params as $param) {
if (isset($_GET[$param])) {
$robots['noindex'] = true;
$robots['follow'] = true;
break;
}
}
return $robots;
});Не используйте этот подход без разбора для всех параметров подряд. Если параметр меняет смысл страницы и нужен для SEO, noindex может убрать из индекса полезную посадочную страницу.
Шаг 5. Нормализуйте внутренние ссылки
Очень часто дубли создаёт не бот, а сам сайт: меню, фильтры, хлебные крошки и блоки похожих материалов начинают генерировать URL с параметрами. Проверьте шаблоны темы и виджеты.
- ссылки на категории должны вести на чистые URL;
- UTM не должны попадать во внутренние ссылки;
- сортировка должна добавляться только там, где она действительно нужна;
- в шаблонах не храните уже размеченные URL как строку, если можно собрать их функцией.
Если нужен быстрый вариант без кода
Когда нет времени править тему, можно использовать SEO-плагин или инструмент для технической чистки. Но важно понимать пределы: такие решения обычно закрывают типовые случаи, а нестандартные параметры всё равно придётся обрабатывать вручную.
Если вы используете Clearfy Pro, проверьте настройки, связанные с дублями, техническими страницами и чисткой URL. Это не отменяет аудита параметров, но помогает быстро убрать часть мусора без правки шаблонов.
Как проверить, что решение сработало
После внедрения не ограничивайтесь открытием страницы в браузере. Проверка должна быть технической.
- Откройте URL с параметром и убедитесь, что canonical указывает на чистую страницу.
- Проверьте HTTP-статус: для редиректа должен быть
301, для обычной страницы — корректный код без ошибок. - Посмотрите исходный код и убедитесь, что
meta robotsили заголовокX-Robots-Tagвыставлены как задумано. - Сравните страницу с параметром и без него: контент должен быть либо одинаковым, либо осознанно отличаться.
- Через Search Console проверьте, не растёт ли число URL с параметрами в отчёте об индексировании.
Для быстрой проверки из консоли можно использовать curl:
curl -I "https://example.com/category/?utm_source=test"
curl -I "https://example.com/category/?filter=red"По ответу сервера видно, есть ли редирект, и не отдаёт ли страница неожиданный статус.
Частые ошибки и как их исправить
Ставят noindex на всё подряд
Это самая частая ошибка. В результате в индекс не попадают и полезные страницы с параметрами, например посадочные под фильтры. Исправление простое: сначала разделите параметры по типам, потом решайте, что закрывать.
Делают редирект с любых query-параметров
Так можно сломать поиск, сортировку, пагинацию и даже часть авторизации. Редирект должен быть точечным, только для известных служебных параметров.
Canonical указывает на несуществующий или динамически собранный URL
Если canonical собран неправильно, поисковик может игнорировать его. Проверьте, что в ссылке нет лишних параметров, двойных слэшей и ошибок в пути.
Оставляют параметры во внутренних ссылках
Даже если canonical настроен, сайт продолжит сам плодить дубли. Нужно чистить шаблоны, меню и блоки, которые генерируют ссылки.
Закрывают параметры в robots.txt
Это не всегда помогает. Если бот не может зайти на URL, он может не увидеть canonical и не понять, что страница дублирует основную. Для дублей чаще полезнее noindex или редирект, а не грубый запрет обхода.
Практические советы по безопасности и производительности
Чем больше параметров обрабатывается на лету, тем выше риск ошибок и лишней нагрузки. Несколько правил помогают не превратить решение в новую проблему:
- не используйте универсальный редирект для всех query-параметров;
- проверяйте список допустимых параметров через белый список, а не через отрицание;
- не полагайтесь только на плагины, если параметры создаёт тема или кастомный код;
- после изменений очистите кэш страниц и объектный кэш, если он есть;
- следите, чтобы фильтры не генерировали бесконечные комбинации URL.
Если на сайте уже есть тяжёлые фильтры, иногда выгоднее ограничить их индексирование на уровне шаблона, чем потом разгребать десятки тысяч дублей в поиске.
В рабочем проекте я бы начал с аудита параметров, затем убрал бы мусорные UTM через редирект, для остальных страниц поставил бы canonical и точечный noindex, а уже после этого проверил бы, не создаёт ли дубли сама тема или плагин фильтрации.