Дубли метатегов в WordPress обычно появляются не из-за одной ошибки, а из-за нескольких источников разметки сразу: тема выводит один <title>, SEO-плагин — другой, а шаблон страницы добавляет свой canonical или meta description. В результате поисковик видит неоднозначные сигналы, а в отчётах по индексации начинают всплывать одинаковые сниппеты, странные каноникалы и страницы с пустыми или повторяющимися описаниями.
Ниже — рабочий сценарий: как быстро диагностировать источник дублей, что править в коде и как проверить, что после изменений WordPress отдаёт только один набор метатегов.
Как понять, что проблема именно в дублях метатегов
Сначала не трогайте код. Проверьте, действительно ли на странице выводится несколько версий одного и того же тега. Откройте исходный код страницы и найдите:
<title>— должен быть один;<meta name="description">— один или отсутствовать, если вы сознательно не используете description;<link rel="canonical">— один;<meta property="og:title">иog:description— не должны дублировать конфликтующие значения без причины.
Если в исходнике есть два canonical или два description, это уже не косметика. Обычно причина одна из трёх:
- тема и SEO-плагин одновременно подключают метатеги;
- в шаблоне вручную вставлен
wp_head()не там, где нужно, или повторно; - кастомный код добавляет теги через
wp_head, но не проверяет, что их уже вывел плагин.
Что посмотреть в первую очередь
Откройте исходник проблемной страницы и сравните значения. Если у одной и той же записи:
titleотличается от заголовка в админке;descriptionберётся из темы, а не из SEO-плагина;canonicalуказывает на архив, а не на саму запись;
значит, конфликт идёт на уровне шаблона или плагина, а не контента.
Где обычно возникает конфликт в WordPress
На практике дубли чаще всего появляются после установки SEO-плагина поверх темы, которая уже умеет генерировать метатеги. Это типичная ситуация для старых или сильно кастомизированных тем.
| Подход | Плюсы | Минусы |
|---|---|---|
| Исправить в SEO-плагине | Быстро, без правки темы | Не помогает, если тема уже выводит теги вручную |
| Исправить в теме | Убирает источник конфликта | Нужен доступ к шаблонам и аккуратность при обновлениях |
| Оставить как есть и надеяться на canonical | Ничего не ломает сразу | Проблема остаётся, поисковик получает лишние сигналы |
Если у вас есть доступ к теме, лучше убрать дубли на уровне источника. Если тема сторонняя и обновляется отдельно, безопаснее отключить лишний вывод через фильтры или настройки SEO-плагина.
Пошаговое решение: как убрать дубли title, description и canonical
Шаг 1. Найдите, кто именно выводит метатеги
Проверьте файлы темы на наличие прямого вывода метатегов. Ищите в header.php, functions.php и в шаблонах:
<title>...</title>
<meta name="description"
<link rel="canonical"
add_action( 'wp_head', ... )Если тема выводит <title> вручную, а в WordPress включена поддержка title-tag, это уже потенциальный дубль. Для современных тем заголовок должен генерироваться через ядро WordPress, а не через статический HTML в шаблоне.
Шаг 2. Уберите ручной title из темы
Если в header.php есть жёстко прописанный <title>, удалите его и оставьте корректный вызов wp_head(). Поддержка заголовка должна быть включена в functions.php:
add_action( 'after_setup_theme', function () {
add_theme_support( 'title-tag' );
} );После этого WordPress сам сформирует title через ядро или SEO-плагин, если он подключён и совместим.
Шаг 3. Оставьте один источник description
Если description выводит и тема, и SEO-плагин, нужно выбрать один источник. В большинстве случаев правильнее оставить SEO-плагин, а ручной вывод из темы отключить. Пример безопасного отключения собственного description в теме:
add_action( 'wp_head', function () {
// Удалите или закомментируйте кастомный вывод description в теме.
// Не оставляйте второй meta description параллельно с SEO-плагином.
}, 1 );Если вы не хотите править шаблон напрямую, можно найти функцию, которая печатает description, и убрать её через remove_action(), если она была добавлена через хук.
Шаг 4. Проверьте canonical
Canonical должен быть один и вести на основную версию страницы. Если SEO-плагин уже выводит canonical, не добавляйте его вручную в шаблон. Для кастомных страниц, где canonical нужен отдельно, можно задать его через фильтр wpseo_canonical в Yoast SEO или аналогичный фильтр в другом плагине, но не дублировать тег в wp_head.
Пример для Yoast SEO, если нужно переопределить canonical только на конкретной странице:
add_filter( 'wpseo_canonical', function ( $canonical ) {
if ( is_page( 'contacts' ) ) {
return home_url( '/contacts/' );
}
return $canonical;
} );Такой подход лучше, чем печатать второй <link rel="canonical"> вручную.
Если дубли создаёт не тема, а плагин
Иногда проблема не в шаблоне, а в том, что одновременно активны два SEO-решения или один плагин дублирует часть функций другого. Это часто видно по исходнику: один плагин выводит Open Graph и canonical, другой — title и description.
В таком случае не пытайтесь «подчистить» HTML точечно. Сначала отключите лишний источник метатегов в настройках плагина. Если плагин не даёт гибко выключить нужный блок, лучше оставить один основной SEO-плагин, а второй убрать.
Что отключать в настройках
- автоматический title, если его уже генерирует другой плагин;
- meta description, если он дублируется;
- canonical, если он выводится дважды;
- Open Graph, если он конфликтует по структуре с основной SEO-разметкой.
Если вы используете Clearfy Pro, там есть инструменты для чистки лишних элементов и дублей в разметке. Это полезно именно в тех случаях, когда тема перегружена служебным HTML и часть метатегов можно убрать без ручной правки шаблонов: Clearfy Pro.
Проверка результата после внедрения
После правок не ограничивайтесь визуальной проверкой страницы. Нужно убедиться, что в исходнике остался один набор тегов и что они не меняются между шаблонами.
- Откройте страницу в режиме просмотра исходного кода.
- Проверьте, что
<title>встречается один раз. - Проверьте, что
meta descriptionодин. - Проверьте, что
canonicalодин и ведёт на нужный URL. - Проверьте несколько типов страниц: запись, страница, рубрика, архив.
- Если есть SEO-плагин, сравните его настройки с фактическим HTML.
Дополнительно можно быстро проверить страницу через команду:
curl -s https://example.com/page/ | grep -E 'title|description|canonical'Это не заменяет полноценный аудит, но помогает быстро увидеть, сколько раз тег реально выводится в HTML.
Частые ошибки и как их исправить
Оставили ручной title в header.php
Если в теме остался статический <title>, а WordPress уже поддерживает title-tag, поисковик может видеть конфликтующие заголовки. Решение простое: убрать ручной тег и оставить генерацию через ядро или SEO-плагин.
Добавили canonical через wp_head и забыли про плагин
Это самая частая ошибка после копирования кода из старого туториала. Если canonical уже есть в SEO-плагине, второй тег не нужен. Оставляйте только фильтр или настройку плагина, но не оба варианта сразу.
Использовали несколько SEO-плагинов одновременно
Два плагина для SEO почти всегда создают пересечения: title, description, Open Graph, schema, canonical. Если нужен только один набор функций, оставьте один основной плагин и отключите лишний.
Проверили только главную страницу
На главной всё может выглядеть нормально, а на записях, рубриках и страницах пагинации уже будут дубли. Проверяйте минимум несколько типов страниц, иначе проблема вернётся после индексации.
Практические советы по безопасности и производительности
Чем меньше ручного HTML в wp_head, тем проще сопровождать сайт. Это не только про SEO, но и про поддержку темы после обновлений. Если вы правите шаблон, делайте это в дочерней теме или через небольшой mu-plugin, а не в исходниках сторонней темы.
Ещё один полезный момент: не добавляйте тяжёлые проверки и запросы к базе данных внутри wp_head ради генерации метатегов. Заголовок и description должны формироваться быстро, без лишних запросов. Если нужна логика по типу записи, используйте уже доступные данные объекта post и фильтры SEO-плагина.
Если у сайта много технического мусора в разметке, имеет смысл сначала почистить базовые дубли, а уже потом настраивать метатеги вручную. В противном случае вы будете исправлять один конфликт за другим, не убирая источник проблемы.
В рабочем варианте после правок у страницы остаётся один title, один description и один canonical. Это легко проверить в исходнике, и именно на это стоит ориентироваться, а не на то, как страница выглядит в браузере.