Как найти и убрать дубли страниц в WordPress из-за параметров URL

Дубли страниц из-за параметров URL — типичная проблема для WordPress-сайтов, где в адресах появляются ?utm_source=..., ?replytocom=..., сортировки, фильтры, служебные параметры или технические хвосты от плагинов. Для пользователя это одна и та же страница, а для поисковика — несколько разных URL. В итоге расползаются сигналы, в индексе появляются лишние адреса, а в отчётах Search Console растёт шум.

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

Когда проблема действительно в параметрах URL

Сначала не трогайте код и robots.txt. Проверьте, какие именно адреса уже живут в индексе и чем они отличаются от канонической версии страницы. Часто дубли видны только в деталях: один и тот же пост открывается с UTM-метками, с параметром комментария, с сортировкой или с фильтром, который не должен индексироваться.

Признаки, что дубли создаются параметрами

  • в Search Console есть страницы с одинаковым заголовком и контентом, но разными query string;
  • в логах или аналитике много заходов на URL с ? в конце;
  • одна и та же запись доступна по нескольким адресам, а canonical указывает не на все варианты;
  • поисковик индексирует служебные параметры, хотя они не меняют смысл страницы;
  • внутренние ссылки сайта сами добавляют параметры туда, где они не нужны.

Что можно считать нормой, а что нет

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

ПодходКогда подходитМинус
CanonicalКогда есть один основной URL и несколько технических вариантовНе убирает дубли из логов и обхода, только подсказывает поисковику
Редирект 301Когда параметр не нужен вообщеНельзя применять к URL, которые реально используются в фильтрах или аналитике
Robots/noindexКогда страницу можно оставить для пользователей, но не индексироватьНе всегда быстро вычищает уже известные URL из индекса

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

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

Шаг 1. Проверьте canonical на проблемных страницах

Откройте исходный код страницы с параметром и найдите тег rel="canonical". Он должен указывать на чистый URL без служебных параметров. Если canonical отсутствует или ведёт на адрес с параметром, это уже причина для правки темы или SEO-плагина.

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

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

Шаг 3. Добавьте редирект для заведомо лишних параметров

Если параметр не влияет на содержимое страницы, можно перенаправлять запрос на чистый URL. Для этого подойдёт небольшой код в functions.php дочерней темы или в собственном мини-плагине.

<?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', 'replytocom');
    $has_bad_param = false;

    foreach ($remove_params as $param) {
        if (isset($_GET[$param])) {
            $has_bad_param = true;
            break;
        }
    }

    if (!$has_bad_param) {
        return;
    }

    $current_url = home_url(add_query_arg(array(), $_SERVER['REQUEST_URI']));
    $clean_url   = remove_query_arg($remove_params, $current_url);

    if ($clean_url !== $current_url) {
        wp_safe_redirect($clean_url, 301);
        exit;
    }
});

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

Шаг 4. Закройте служебные URL от индексации, если редирект не подходит

Иногда редирект ломает сценарий: например, параметр нужен для временного просмотра, сортировки или внутреннего процесса. Тогда лучше оставить URL доступным пользователю, но не давать ему индексироваться. В таком случае используйте noindex точечно, а не на весь сайт.

<?php
add_filter('wp_robots', function ($robots) {
    if (isset($_GET['replytocom']) || isset($_GET['utm_source'])) {
        $robots['noindex'] = true;
        $robots['nofollow'] = true;
    }

    return $robots;
});

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

Шаг 5. Проверьте sitemap и внутренние ссылки

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

Как проверить, что решение сработало

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

  • откройте проблемный URL с параметром и убедитесь, что он редиректит на чистый адрес;
  • проверьте HTTP-статус: для лишних параметров должен быть 301, а не 200;
  • посмотрите исходный код страницы без параметра и убедитесь, что canonical указывает на неё же;
  • проверьте, что в sitemap нет URL с query string;
  • в Search Console отправьте на повторную проверку несколько примеров и отслеживайте, как меняется статус обхода.

Если используете серверный редирект, удобно проверить его через curl:

curl -I 'https://example.com/post-name/?utm_source=test'

В ответе должен быть заголовок Location с чистым URL. Если вместо этого приходит 200 OK, значит, редирект не сработал или был перехвачен другим правилом.

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

Закрывают всё через robots.txt

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

Ставят редирект на любой параметр подряд

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

Оставляют UTM в внутренних ссылках

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

Не проверяют canonical после правок темы

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

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

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

Если нужен более широкий набор инструментов для чистки дублей, служебных ссылок и SEO-правил, можно посмотреть в сторону Clearfy Pro. Но даже с плагином важно понимать, какие параметры вы закрываете и почему: автоматическая настройка без проверки легко ломает рабочие сценарии.

Для сайтов с активной аналитикой и большим количеством кампаний полезно вести короткий список параметров, которые разрешены, а не наоборот. Это упрощает поддержку: новый параметр сначала проверяется на необходимость, а уже потом попадает в правила редиректа или noindex.

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

  • проверен список параметров, которые реально создают дубли;
  • для лишних параметров настроен 301-редирект или точечный noindex;
  • canonical указывает на чистый URL;
  • внутренние ссылки не содержат UTM и служебные хвосты;
  • в sitemap нет адресов с query string;
  • после правок протестирован ответ сервера и статус редиректа.

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

Как установить и настроить WooCommerce на WordPress
02.10.2026
Добавление поля телефона в регистрацию WordPress с подтверждением
27.09.2026
Как создать собственный шорткод в WordPress
23.09.2026
Как закрыть дубли страниц от пагинации в WordPress без потери индексации
17.09.2026
Как настроить robots.txt в WordPress, чтобы не закрыть важные страницы
20.08.2026