Как убрать дубли meta title, description и canonical в WordPress

Если в индексе появляются одинаковые страницы с разными URL, а в исходнике одновременно живут несколько <title>, meta description или rel="canonical", проблема обычно не в поисковике, а в теме, плагинах SEO и шаблонах вывода. В WordPress это встречается чаще, чем кажется: один плагин печатает каноникал, второй — свой, тема добавляет дублирующий title, а архивы и пагинация получают одинаковые мета-теги.

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

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

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

  • в HTML есть два и более тега <title>;
  • на странице несколько meta name="description";
  • канонический URL выводится и темой, и SEO-плагином, иногда еще и через wp_head из кастомного кода.

Проверять нужно не только главную. Дубли часто всплывают на:

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

Быстрая диагностика в браузере и через исходник

Откройте страницу и посмотрите исходный код. Ищите повторяющиеся строки:

<title>...</title>
<meta name="description" content="...">
<link rel="canonical" href="...">

Если не хочется делать это вручную, можно временно проверить через консоль браузера:

document.querySelectorAll('title').length
document.querySelectorAll('meta[name="description"]').length
document.querySelectorAll('link[rel="canonical"]').length

Значение больше 1 — уже повод искать источник в теме, плагинах или кастомных хуках.

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

Логика простая: сначала определяем, кто печатает лишнее, потом отключаем вывод в одном месте. Не пытайтесь лечить это только настройками SEO-плагина, если тема уже вставляет свои мета-теги в wp_head.

Шаг 1. Найдите источник в теме

Проверьте файл header.php, а также подключаемые части шаблона. Ищите прямой вывод:

<title><?php wp_title(); ?></title>
<meta name="description" content="<?php echo esc_attr( get_bloginfo( 'description' ) ); ?>">
<link rel="canonical" href="<?php echo esc_url( home_url( add_query_arg( array(), $wp->request ) ) ); ?>">

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

Шаг 2. Отключите лишний вывод через хуки, а не правкой ядра плагина

Если метатеги добавляет тема через wp_head, их можно снять в дочерней теме или в мини-плагине. Пример:

<?php
add_action( 'after_setup_theme', function () {
    remove_action( 'wp_head', 'theme_print_seo_tags', 10 );
    remove_action( 'wp_head', 'theme_print_canonical', 10 );
} );

Имена функций здесь должны быть реальными именами из вашей темы. Их можно найти поиском по проекту. Если функция объявлена в теме, а не в плагине, удалять ее нужно именно через remove_action(), а не через редактирование файлов плагина.

Шаг 3. Оставьте один источник canonical

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

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

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

    return $canonical;
} );

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

Шаг 4. Уберите дубли title и description из шаблонов

С title и description часто проблема в том, что тема печатает их в wp_head, а SEO-плагин — поверх этого. В классическом шаблоне title вообще не должен выводиться вручную, если используется поддержка title-tag.

<?php
add_action( 'after_setup_theme', function () {
    add_theme_support( 'title-tag' );
} );

После этого проверьте, что в header.php нет ручного <title>. Если есть — удалите его. Для description лучше не держать статический шаблон в теме, если у вас уже работает SEO-плагин с мета-описаниями для записей, рубрик и архивов.

Сравнение подходов: плагин, код или правка темы

Подход Когда подходит Минус
Настройки SEO-плагина Если дубли идут только из плагина и тема не печатает мета вручную Не решает конфликт с шаблоном темы
Хуки в дочерней теме или мини-плагине Если нужно отключить конкретный вывод без правки ядра темы Нужно точно знать имя функции или хука
Правка шаблона темы Если тема устарела и жестко печатает SEO-метатеги Сложнее поддерживать обновления

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

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

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

  • на странице есть только один <title>;
  • только один meta name="description";
  • только один link rel="canonical";
  • canonical ведет на основную URL-версию, а не на страницу с параметрами;
  • на пагинации canonical не указывает на первую страницу, если это ломает логику архива.

Проверка через PHP в отладочном шаблоне

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

<?php
$html = file_get_contents( home_url( add_query_arg( array(), $_SERVER['REQUEST_URI'] ) ) );

preg_match_all( '/<title>/i', $html, $titles );
preg_match_all( '/meta name=["\']description["\']/i', $html, $descriptions );
preg_match_all( '/rel=["\']canonical["\']/i', $html, $canonicals );

var_dump( count( $titles[0] ), count( $descriptions[0] ), count( $canonicals[0] ) );

Это не production-решение, а временная диагностика. На живом сайте такой код лучше не оставлять.

Частые ошибки и почему дубли возвращаются

На практике дубли метатегов часто появляются снова после обновления темы или установки нового плагина. Причины обычно приземленные:

  • Отключили не тот хук. Функция осталась подключенной в другом месте, например через другой файл темы или плагин-компаньон.
  • Правили только главную страницу. На архиве, странице записи или в CPT вывод все еще дублируется.
  • Смешали несколько SEO-плагинов. Два плагина одновременно пытаются управлять title и canonical.
  • Оставили ручной вывод в шаблоне. Даже после настройки SEO-плагина старый код в header.php продолжает печатать мета-теги.
  • Сломали canonical на пагинации. После грубой чистки все страницы архива начинают ссылаться на первую страницу.

Чек-лист перед публикацией изменений

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

Что делать, если дубли появляются только в кэше

Иногда код уже исправлен, но в браузере или в выдаче вы видите старый HTML. Тогда проблема не в WordPress, а в кэшировании. Проверьте:

  • страничный кэш плагина;
  • object cache, если он есть;
  • CDN или reverse proxy;
  • кэш браузера при локальной проверке.

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

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

Как удалить текст из запроса поисковика в WordPress
29.08.2026
Как автоматизировать удалённые задачи в WordPress без использования Cron
21.09.2026
Как избежать проблем с подключением стилей и скриптов в WordPress
18.04.2026
WooCommerce: автоматическое создание возвратов товаров по счетчику продаж
04.09.2026
WooCommerce: как автоматически отключить отправку писем по заказам без оплаты
24.09.2026