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

Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелочей: архивы с разными параметрами, страницы пагинации, версии с и без слеша, HTTP и HTTPS, UTM-метки, теги, авторские архивы, а иногда и сам шаблон темы. Если не разобраться с источником, можно удалить не то и получить просадку в индексации вместо чистки сайта.

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

Как понять, что у вас именно дубли, а не просто много страниц

Сначала стоит отличить нормальную структуру сайта от настоящего дубля. Для WordPress это важно: архивы категорий, пагинация и страницы автора сами по себе не проблема. Проблема начинается, когда одна и та же сущность доступна по нескольким URL и поисковик видит их как разные страницы.

Типичные источники дублей

  • страницы с параметрами ?utm_source=, ?fbclid=, ?replytocom=;
  • версии URL с www и без него;
  • HTTP и HTTPS одновременно;
  • страницы тегов, архивов автора и дат, если они не нужны для поиска;
  • пагинация, когда первая страница доступна и как архив, и как отдельный URL с параметрами;
  • дубли из-за фильтров темы или плагина, которые создают отдельные URL для одного и того же контента.

Диагностика проблемы

Начните с простого: откройте несколько подозрительных URL и сравните их HTML-код. Если в <head> у них одинаковый канонический адрес, это уже хороший знак. Если canonical отсутствует или указывает на разные адреса для одной и той же страницы, источник дубля нужно искать в шаблоне или SEO-настройках.

Проверьте также, не индексируются ли параметры. Вручную это можно сделать через поиск по сайту в Google с оператором site:, но надёжнее смотреть отчёты в Google Search Console: разделы с дублированными, выбранными не той канонической страницей, и страницы, просканированные, но не проиндексированные.

Что делать сначала: закрыть мусорные URL или склеить основные

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

СценарийЧто делатьКомпромисс
UTM и служебные параметрыCanonical на чистый URL, при необходимости редиректПараметры не будут отдельными страницами
HTTP / www / слеш301 на единую версиюНужно выбрать один стандарт для всего сайта
Архивы тегов и автораNoindex или отключение архивовЧасть внутренних страниц исчезнет из поиска
Пагинация архивовОставить доступной, но с корректным canonicalНельзя бездумно закрывать все страницы пагинации

Пошаговое решение: как убрать дубли в WordPress

1. Выберите единую каноническую версию сайта

Сначала определитесь, какой адрес считается основным: https://example.ru или https://www.example.ru. После этого настройте редирект на уровне сервера или WordPress. Если у вас уже есть SEO-плагин, проверьте, не конфликтует ли его логика с правилами сервера.

Для принудительного редиректа на HTTPS и без www можно использовать такой код в functions.php темы или в мини-плагине:

add_action('template_redirect', function () {
    if (is_admin() || wp_doing_ajax()) {
        return;
    }

    $host = $_SERVER['HTTP_HOST'] ?? '';
    $uri  = $_SERVER['REQUEST_URI'] ?? '/';

    $target_host = 'example.ru';
    $is_https = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');

    if ($host === 'www.example.ru' || !$is_https) {
        wp_safe_redirect('https://' . $target_host . $uri, 301);
        exit;
    }
});

Этот вариант годится только если вы понимаете, что делаете, и уже проверили, что сайт корректно работает по HTTPS. Если редирект настроен на сервере, в PHP его дублировать не нужно.

2. Уберите параметры, которые создают мусорные URL

Чаще всего это UTM-метки и служебные параметры от шаринга. Для них не нужен отдельный контент. Если параметр не влияет на содержимое страницы, его можно игнорировать в canonical и при необходимости редиректить на чистый URL.

add_action('template_redirect', function () {
    if (is_admin() || wp_doing_ajax()) {
        return;
    }

    $ignore_params = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'replytocom'];
    $query = $_GET;
    $has_ignored = false;

    foreach ($ignore_params as $param) {
        if (isset($query[$param])) {
            unset($query[$param]);
            $has_ignored = true;
        }
    }

    if (!$has_ignored) {
        return;
    }

    $path = strtok($_SERVER['REQUEST_URI'] ?? '/', '?');
    $clean_url = home_url($path);

    if (!empty($query)) {
        $clean_url = add_query_arg($query, $clean_url);
    }

    wp_safe_redirect($clean_url, 301);
    exit;
});

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

3. Настройте canonical для архивов и страниц с параметрами

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

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

    if (isset($_GET['utm_source']) || isset($_GET['fbclid']) || isset($_GET['gclid'])) {
        $canonical = home_url( strtok($_SERVER['REQUEST_URI'] ?? '/', '?') );
        echo '<link rel="canonical" href="' . esc_url($canonical) . '" />' . "\n";
    }
}, 1);

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

4. Закройте ненужные архивы от индексации

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

Практический подход такой: сначала посмотрите в Search Console, есть ли у этих архивов показы и клики. Если нет, можно закрывать. Если есть — сначала проверьте, можно ли улучшить их контент, а не убирать целиком.

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

После внедрения правок не ограничивайтесь открытием главной страницы. Проверьте несколько сценариев:

  • URL с www должен вести на основную версию сайта через 301;
  • HTTP должен редиректить на HTTPS;
  • страницы с UTM должны открываться без отдельной индексации или сразу уходить на чистый URL;
  • в исходном коде должен быть один canonical, а не несколько;
  • в Search Console новые URL должны постепенно исчезать из отчётов как дублированные.

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

curl -I https://www.example.ru/page/?utm_source=test

В ответе смотрите статус 301 и заголовок Location. Если вместо редиректа вы видите 200, значит правило не сработало или его перебивает другой слой — сервер, кеш или плагин.

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

Ставят noindex вместо редиректа там, где нужен один адрес

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

Удаляют все архивы, не проверив внутреннюю перелинковку

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

Добавляют редиректы и в .htaccess, и в PHP одновременно

Так легко получить цепочку редиректов или бесконечный цикл. Выберите один уровень управления: сервер или WordPress. Если на сервере уже есть правила, PHP-обработчик лучше не дублировать.

Закрывают параметры, которые реально меняют контент

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

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

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

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

Если вы решаете проблему кодом, не разбрасывайте логику по теме. Лучше вынести её в небольшой mu-plugin или отдельный плагин сайта. Тогда при смене темы редиректы и canonical не исчезнут.

Ещё один момент — кеш. После настройки редиректов и canonical очистите серверный кеш, кеш плагина и, если есть, CDN. Иначе вы будете проверять старую версию страницы и решите, что правка не работает.

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

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

Как использовать хуки в WordPress: подробное руководство с примерами
26.11.2025
Как установить разные верстки блоков Gutenberg в WordPress
01.01.2026
Автоматическое создание резервных копий WordPress с помощью WPClass Cron
19.01.2026
Как найти и убрать дубли страниц в WordPress без потери SEO
29.08.2026
Как удалить неиспользуемые таксономии в WordPress
21.03.2026