Как найти и убрать дубли страниц в WordPress через canonical и noindex

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

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

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

Сначала стоит проверить симптомы. Не нужно сразу править шаблоны и лезть в robots.txt: иногда проблема видна уже в выдаче и в отчётах краулера.

Что искать в поиске и в логике URL

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

Быстрый способ диагностики — открыть несколько вариантов URL и сравнить исходный код страницы. Важно смотреть не только на визуальный контент, но и на тег link rel="canonical", мета-robots и HTTP-статус.

<link rel="canonical" href="https://example.com/post/" />

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

Какие дубли в WordPress встречаются чаще всего

Не все повторяющиеся URL одинаково опасны. Одни можно склеить canonical, другие лучше закрыть от индексации, а третьи — убрать на уровне генерации ссылок.

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

Пошаговое решение: canonical для дублей и noindex для лишних архивов

Если у вас есть доступ к теме или небольшому MU-плагину, решение лучше делать кодом. Так вы не зависите от интерфейса SEO-плагина и можете точно контролировать логику.

Шаг 1. Добавить canonical для страниц с параметрами

Для большинства параметров, которые не меняют смысл страницы, canonical должен указывать на чистую версию URL. Ниже пример для functions.php или отдельного плагина.

<?php
add_filter( 'get_canonical_url', function( $canonical, $post ) {
    if ( is_admin() || ! $post instanceof WP_Post ) {
        return $canonical;
    }

    // Для обычных записей оставляем стандартный canonical.
    if ( is_singular( 'post' ) ) {
        return get_permalink( $post );
    }

    return $canonical;
}, 10, 2 );

Этот фильтр не решает всё сам по себе, но помогает не ломать canonical там, где тема или плагин подставляют нестабильный адрес. Для параметров в URL canonical лучше задавать через шаблон <head> или SEO-плагин, если он уже используется.

Шаг 2. Закрыть от индексации архивы, которые не нужны в поиске

Если у вас пустые или почти пустые архивы тегов, страницы автора без уникального контента или служебные таксономии, их можно пометить noindex, follow. Это не запрет на обход, а сигнал не включать страницу в индекс.

<?php
add_filter( 'wp_robots', function( array $robots ) {
    if ( is_tag() || is_author() ) {
        $robots['noindex'] = true;
        $robots['follow']  = true;
    }

    return $robots;
} );

Такой подход лучше, чем массово закрывать всё в robots.txt. Если вы запретите обход, поисковик может не увидеть canonical и не поймёт, что делать с дублем.

Шаг 3. Убрать страницы вложений с отдельной индексацией

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

<?php
add_action( 'template_redirect', function() {
    if ( is_attachment() ) {
        $parent = wp_get_post_parent_id( get_queried_object_id() );

        if ( $parent ) {
            wp_redirect( get_permalink( $parent ), 301 );
            exit;
        }
    }
} );

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

Если нужен быстрый контроль без правки кода

Когда сайт уже работает на SEO-плагине, часть задач проще закрыть в интерфейсе. Но важно понимать, что именно делает плагин: ставит canonical, noindex или редирект.

  • для архивов тегов и авторов — проверьте, не включена ли индексация по умолчанию;
  • для страниц вложений — ищите настройку редиректа на родительский URL;
  • для параметров сортировки и фильтров — убедитесь, что canonical ведёт на основную версию;
  • для пагинации — не ставьте noindex автоматически на все страницы с номером в URL.

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

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

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

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

  1. Откройте основную страницу и её дубли с параметрами.
  2. Проверьте, что canonical у всех вариантов указывает на один чистый URL.
  3. Убедитесь, что страницы, которые должны быть закрыты, отдают noindex в meta robots или HTTP-заголовке.
  4. Проверьте статус-код: для редиректов должен быть 301, а не 302.
  5. Прогоните URL через Search Console или любой краулер и посмотрите, не осталось ли противоречий.

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

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

В первом случае вы должны увидеть обычный ответ страницы, во втором — либо тот же canonical в HTML, либо редирект на чистый адрес, если вы решили чистить параметры на уровне сервера.

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

Ставят noindex на страницу и одновременно закрывают её в robots.txt

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

Склеивают всё canonical на главную

Это грубая ошибка. Canonical должен указывать на максимально близкую по смыслу страницу, а не на домашнюю просто потому, что она «главная». Иначе вы теряете релевантность и создаёте путаницу в индексации.

Оставляют страницы вложений без редиректа

Если медиа-страницы не несут ценности, они начинают конкурировать с основным контентом. Редирект на родительскую запись обычно безопаснее, чем бесконечное накопление пустых attachment-страниц.

Не проверяют тему и SEO-плагин одновременно

Иногда тема уже выводит canonical, а SEO-плагин добавляет свой. В итоге в <head> оказывается два canonical, и это уже явная ошибка. После внедрения правок всегда смотрите исходник страницы.

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

Если вы массово меняете индексацию, не делайте это на живом сайте без бэкапа. Особенно если правите шаблоны темы или подключаете код в functions.php: одна синтаксическая ошибка может положить сайт.

  • вносите изменения сначала на staging-копии;
  • храните правки в дочерней теме или небольшом must-use плагине;
  • не дублируйте логику canonical в нескольких местах;
  • после правок очистите кеш страницы и объектный кеш, если он есть;
  • проверьте, не ломаются ли хлебные крошки и пагинация.

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

Как использовать WP-Cron для автоматического отправления электронных писем в WordPress
25.06.2026
Как автоматически отключить комментарии на отдельных страницах WordPress
14.05.2026
Как избежать проблем с переопределением функций в WordPress
05.06.2026
Как использовать WP-Cron для автоматического удаления старых отзывов в WooCommerce
13.07.2026
Настройка автопубликации постов в WordPress
30.12.2025