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

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

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

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

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

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

  • одинаковые заголовки и описания у разных URL;
  • страницы с параметрами ?replytocom=, ?utm_, ?amp, ?orderby= и похожими;
  • архивы рубрик, тегов и авторов, которые повторяют контент записей;
  • страницы пагинации, где канонический URL указывает не туда;
  • доступность сайта одновременно по http/https или с www/non-www.

Если у вас включён SEO-плагин, посмотрите, не генерирует ли он canonical автоматически. Частая ошибка — думать, что раз плагин установлен, проблема уже решена. На практике он может ставить канонический URL, но при этом тема или другой плагин добавляет второй тег, и в итоге в HTML появляется конфликт.

Диагностика: где именно рождается дубль

Удобнее всего идти от простого к сложному. Сначала проверяем сам URL, потом шаблон, потом плагины.

Проверка HTML-страницы

Откройте исходный код страницы и найдите тег rel="canonical". На странице должен быть один такой тег, и он должен указывать на основной адрес без лишних параметров.

<link rel="canonical" href="https://example.com/primer-stranicy/" />

Если canonical отсутствует, это уже повод смотреть тему и SEO-плагин. Если их два — нужно убрать лишний источник генерации.

Проверка через WP-CLI и базовые запросы

Если есть доступ к консоли, быстро проверьте, не плодятся ли записи с одинаковым slug или не создаются ли лишние страницы редиректов. Самый полезный минимум — посмотреть, как WordPress хранит ссылки и какие шаблоны отдают архивы.

wp post list --post_type=page --fields=ID পোস্ট_title,post_name,post_status

Команда выше не идеальна для всех окружений, но смысл простой: найти страницы с похожими slug и проверить, не создаёт ли кто-то дубли вручную. На боевом сайте удобнее использовать поиск по базе или экспорт URL из Search Console.

Как убрать дубли: рабочая схема без ломки сайта

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

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

Если тема не делает это корректно, можно добавить свой canonical через wp_head. Но делать это стоит только если вы понимаете, что именно выводит текущая тема и SEO-плагин. Иначе получите двойной тег.

add_action('wp_head', function () {
    if (is_singular()) {
        global $post;
        if (! $post instanceof WP_Post) {
            return;
        }

        $canonical = get_permalink($post);
        echo '<link rel="canonical" href="' . esc_url($canonical) . '" />' . "\n";
    }
}, 1);

Этот вариант годится как страховка, если у вас кастомная тема и вы точно знаете, что больше canonical нигде не выводится. В обычном проекте лучше сначала проверить SEO-плагин и тему, а не добавлять ещё один источник.

2. Уберите параметры, которые не должны индексироваться

Если страницы доступны с мусорными параметрами, поисковик может воспринимать их как отдельные URL. Для некоторых параметров лучше не canonical, а редирект на чистый адрес. Например, для replytocom или лишних UTM на внутренних ссылках.

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

    if (isset($_GET['replytocom']) && is_singular()) {
        wp_safe_redirect(get_permalink(), 301);
        exit;
    }
});

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

3. Приведите архивы к понятной логике

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

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

Сравнение подходов: canonical, редирект или noindex

ПодходКогда применятьПлюсМинус
canonicalЕсть несколько URL с одним контентомСохраняет доступность страницыНе убирает дубль мгновенно
301-редиректНенужный технический URLЖёстко склеивает адресаНужно аккуратно проверить цепочки
noindexАрхив полезен пользователю, но не нужен в индексеНе ломает навигациюНе решает проблему одинаковых URL

Если коротко: canonical — для выбора основного адреса, редирект — для удаления лишнего адреса, noindex — для страниц, которые должны открываться, но не участвовать в поиске.

Пошаговая настройка на живом сайте

  1. Составьте список URL с одинаковым контентом: Search Console, краулер, ручная проверка.
  2. Проверьте, кто выводит canonical: тема, SEO-плагин, кастомный код.
  3. Оставьте только один источник canonical.
  4. Технические параметры и старые адреса переведите на 301-редирект.
  5. Архивы, которые не нужны в поиске, закройте через noindex, а не через robots.txt.
  6. После правок проверьте исходный HTML и ответ сервера.

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

Проверка должна быть не «страница открывается», а «страница открывается правильно». Смотрите на три вещи: код ответа, canonical и отсутствие дублей в обходе.

  • основной URL отдаёт 200 OK;
  • старый или лишний URL отдаёт 301 на нужный адрес;
  • в HTML один canonical, и он совпадает с основным URL;
  • в Search Console уменьшается число страниц с пометкой о дублированном контенте;
  • в краулере нет цепочек редиректов и циклов.

Проверить ответ сервера можно обычным curl:

curl -I https://example.com/old-url/

Если редирект настроен правильно, вы увидите 301 и заголовок Location с новым адресом. Для canonical достаточно посмотреть исходник страницы или использовать браузерный просмотр HTML.

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

Два canonical на одной странице

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

Редирект на главную вместо нужной страницы

Так бывает, когда в коде используют слишком общий шаблон. Редирект должен вести на конкретный канонический URL, а не на домашнюю страницу «на всякий случай».

Noindex вместо редиректа для технического дубля

Если URL не нужен вообще, noindex — слабое решение. Поисковик ещё какое-то время будет видеть и обходить этот адрес. Для явного дубля лучше 301.

Закрыли дубли в robots.txt и думают, что вопрос решён

Robots.txt не убирает уже известные поисковику URL из индекса. Он только ограничивает обход. Если адрес уже попал в поиск, нужен canonical, noindex или редирект — в зависимости от сценария.

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

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

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

Если в проекте уже есть несколько SEO- и технических плагинов, сначала проверьте конфликты. Два плагина, которые одновременно управляют canonical, robots и редиректами, почти всегда создают побочные эффекты.

Для сайтов, где кроме дублей нужно ещё чистить служебные страницы, архивы и технические хвосты, удобнее использовать один инструмент, чем набор разрозненных сниппетов. Но даже в этом случае проверка после внедрения обязательна: WordPress легко «прощает» лишний код до первого конфликта с темой или обновлением плагина.

Производительность и оптимизация запросов с методами кеширования в WordPress
23.09.2026
Как использовать REST API для динамического получения данных в WordPress
23.09.2026
Как использовать WPRemark для эффективного управления комментариями в WordPress
23.09.2026
Как создать эффективный индекс по метаданным в WordPress для ускорения запросов
23.09.2026
Как создать динамическую таблицу с фильтрами в WordPress для удобного отображения данных
23.09.2026