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

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

Ниже разберём, как найти источник дублей, что именно править в WordPress и как проверить, что canonical действительно работает, а не просто стоит в коде “для галочки”.

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

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

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

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

Если у вас есть доступ к краулеру, проверьте, какие URL он считает дублями по title, meta description и canonical. Если краулера нет, достаточно вручную открыть несколько вариантов одного и того же адреса и посмотреть исходный код.

Какой подход выбрать: canonical, редирект или noindex

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

СценарийЧто делатьКомпромисс
Один и тот же контент доступен по разным URL301-редирект на основной адресПользователь и бот всегда идут в одну точку
Похожий контент, но нужен доступ по нескольким адресамrel=canonicalПоисковик сам выбирает основную версию, но сигнал не абсолютный
Архивы тегов, автора, дат не нужны в поискеnoindex,followСтраницы остаются доступны, но не должны попадать в индекс

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

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

1. Приведите сайт к одному базовому URL

Сначала проверьте Настройки → Общие: адрес WordPress и адрес сайта должны быть в одном формате. Если сайт работает на HTTPS, не оставляйте в настройках HTTP. Если основной вариант без www, не смешивайте его с версией с www.

На сервере или через конфиг хостинга настройте 301-редирект на один канонический вариант. Это лучше, чем пытаться лечить такие дубли только в SEO-плагине.

RewriteEngine On
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.ru$ [NC]
RewriteRule ^ https://example.ru%{REQUEST_URI} [L,R=301]

Этот пример нужно адаптировать под ваш домен и схему. Смысл простой: все варианты должны сходиться в один основной адрес.

2. Отключите индексацию лишних архивов, если они не нужны

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

Например, для архива автора можно добавить noindex через фильтр, если тема или плагин не дают удобной настройки:

add_filter('wp_robots', function ($robots) {
    if (is_author() || is_date() || is_tag()) {
        $robots['noindex'] = true;
        $robots['follow'] = true;
    }
    return $robots;
});

Это не удаляет страницу, а только просит поисковик не включать её в индекс. Для страниц, которые должны оставаться в выдаче, такой подход использовать не стоит.

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

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

Проверить и при необходимости подменить canonical можно через фильтр wpseo_canonical в Yoast SEO или аналогичный механизм в другом плагине. Ниже пример для случая, когда нужно принудительно убрать query string:

add_filter('wpseo_canonical', function ($canonical) {
    if (is_singular()) {
        return get_permalink();
    }

    if (!empty($_SERVER['REQUEST_URI'])) {
        $url = home_url(add_query_arg([], $GLOBALS['wp']->request));
        return strtok($url, '?');
    }

    return $canonical;
});

Если у вас не Yoast, не пытайтесь вставить этот код “наугад”. Сначала проверьте, какой SEO-плагин стоит и как он формирует canonical. Иначе можно получить конфликт разметки или двойной тег canonical.

4. Уберите дубли вложений и медиа-страниц

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

Практичное решение — редиректить attachment pages на сам файл или на родительскую запись. Если у вас SEO-плагин умеет это делать, используйте его настройку. Если нет, можно повесить редирект на шаблонный хук:

add_action('template_redirect', function () {
    if (is_attachment()) {
        $parent = wp_get_post_parent_id(get_the_ID());
        if ($parent) {
            wp_redirect(get_permalink($parent), 301);
        } else {
            wp_redirect(home_url('/'), 301);
        }
        exit;
    }
});

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

Проверка результата после внедрения

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

  • откройте старые URL с параметрами и убедитесь, что они редиректят на основной адрес;
  • посмотрите исходный код страницы и найдите ровно один тег rel="canonical";
  • проверьте, что canonical указывает на чистый URL без лишних параметров;
  • убедитесь, что страницы, закрытые через noindex, действительно отдают нужный robots meta или HTTP-заголовок;
  • в Search Console отправьте на повторную проверку важные URL и посмотрите, исчезли ли дубли из отчётов.

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

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

В ответе должен быть 301 на канонический адрес, а не 200 с той же страницей. Если сервер отдаёт 200, значит проблема не решена на уровне маршрутизации.

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

Canonical стоит, но дубли всё равно индексируются

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

Редирект сделали, но он ведёт в цепочку

Часто это происходит, когда одновременно включены правила в .htaccess, настройки хостинга и SEO-плагина. В итоге URL проходит через два-три редиректа. Нужно оставить один источник истины и убрать дублирующиеся правила.

Закрыли от индексации всё подряд

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

Поставили canonical на главную для всех страниц

Так делать нельзя. Canonical должен указывать на эквивалентную страницу, а не на произвольный “главный” URL. Иначе поисковик может проигнорировать подсказку или начать путаться в релевантности.

Безопасность и производительность: что учесть до и после правок

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

Если вы правите canonical и robots кодом, держите изменения в дочерней теме или в небольшом must-use плагине. Так они не потеряются при обновлении темы. Для производительности это тоже лучше: не нужно перегружать сайт тяжёлым универсальным плагином ради одной настройки.

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

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

Как обновить WordPress без ошибок и потери данных
27.11.2025
Как закрыть от индексации страницы автора в WordPress без потери полезного трафика
22.08.2026
WooCommerce: как удалить отзывы только с определённых товаров
02.07.2026
Как проверить и исправить ошибки в базе данных WordPress
09.04.2026
WooCommerce: Автоматическое удаление неоплаченных заказов — подробное руководство
12.06.2026