Если в исходном коде страницы у вас появляются два <title>, несколько meta description или конфликтующие canonical, поисковик обычно не угадывает, какой вариант считать основным. В WordPress это часто происходит не из-за одной ошибки, а из-за наложения нескольких источников: тема выводит базовые метатеги, SEO-плагин добавляет свои, а ещё подключённый шаблон или кастомный код дублирует часть разметки.
Ниже — рабочая схема, как найти источник дублей, убрать лишнее и проверить, что проблема действительно закрыта, а не замаскирована.
Как выглядит проблема на практике
Чаще всего жалобы выглядят так: в Google Search Console появляются предупреждения о дублирующихся метаописаниях, в сниппетах скачет заголовок, а в коде страницы видно сразу несколько блоков разметки одного типа. На фронтенде это может не бросаться в глаза, но для индексации разница существенная.
Типичные симптомы:
- в
<head>два раза выводится<title>; - есть и
meta name="description", и отдельный SEO-плагин с тем же полем; rel="canonical"указывает на одну страницу, а Open Graph — на другую;- на архивных страницах и пагинации метатеги повторяются без логики;
- после смены темы дубли не исчезают, потому что старый код остался в плагине или в
functions.php.
Диагностика: откуда именно берутся дубли
Сначала нужно не «чистить всё подряд», а понять источник. Иначе можно удалить нужный вывод и сломать SEO-разметку целиком.
Проверка исходного кода
Откройте проблемную страницу и посмотрите HTML через «Просмотр кода страницы» или DevTools. Ищите повторяющиеся элементы:
<title>...<meta name="description" content="..."><link rel="canonical" href="...">Если одинаковые теги идут подряд, это почти всегда конфликт между темой и плагином. Если теги отличаются по содержимому, значит выводят их разные части кода.
Проверка активных источников
Сверьте три места:
- настройки темы — иногда там есть отдельный блок SEO или Open Graph;
- SEO-плагин — Yoast SEO, Rank Math, All in One SEO и похожие обычно берут на себя
title,descriptionи canonical; - кастомный код в
functions.php, mu-plugins или подключённых сниппетах.
Если у вас есть доступ к серверу, полезно быстро найти явные вставки по проекту:
grep -RniE 'wp_head|canonical|description|og:|twitter:|<title>' wp-content/themes wp-content/plugins wp-content/mu-pluginsЭта команда не решает проблему сама по себе, но помогает увидеть, где вообще живёт генерация метатегов.
Пошаговое решение: как убрать дубли
Логика простая: оставляем один источник ответственности за SEO-метатеги и отключаем остальные. В идеале title, description, canonical и Open Graph должны формироваться в одном месте.
Шаг 1. Определите главный источник метатегов
Если у вас уже стоит SEO-плагин, обычно именно он должен управлять основными метатегами. Тогда в теме не должно быть собственного вывода <title> и дублирующих meta в wp_head.
Если SEO-плагина нет, можно оставить вывод в теме, но это менее удобно: при смене шаблона придётся повторять настройку.
| Подход | Когда подходит | Минус |
|---|---|---|
| SEO-плагин как единственный источник | Почти всегда на живом сайте | Нужно проверить, что тема не дублирует вывод |
| Код в теме | Минимальный сайт без SEO-плагина | Сложнее поддерживать при смене темы |
| Смешанный вариант | Лучше избегать | Почти гарантирует дубли |
Шаг 2. Уберите лишний вывод из темы
Если тема сама печатает <title> вручную, а WordPress уже использует поддержку title-tag, оставьте только один вариант. В современной теме заголовок должен управляться через add_theme_support( 'title-tag' );.
Пример корректной настройки в functions.php:
<?php
add_action( 'after_setup_theme', function () {
add_theme_support( 'title-tag' );
} );Если в header.php есть ручной <title>, его нужно убрать. Иначе WordPress и тема будут выводить его одновременно.
Шаг 3. Отключите дублирующий SEO-код точечно
Иногда проще не вырезать весь плагин, а отключить только конкретный кусок вывода. Для этого используйте фильтры и хуки самого плагина, если они документированы. Если документации нет — не гадайте, лучше убрать конфликтующий код в теме.
Для собственных метатегов в теме можно оставить только то, что реально не делает SEO-плагин, например дополнительные Open Graph-теги для специфического шаблона. Но и здесь важно не повторять уже существующие поля.
Шаг 4. Проверьте canonical и архивы
На страницах пагинации, рубрик и тегов дубли часто появляются из-за неправильной логики canonical. Если canonical указывает на первую страницу архива, а сама страница содержит уникальный контент, это уже не просто дубль, а ошибка индексации.
Для архивов проверьте:
- не выводится ли canonical дважды;
- не закрыты ли страницы пагинации случайно через
noindexбез причины; - не генерирует ли тема отдельный блок SEO для архивов поверх плагина.
Пример: как убрать ручной title из темы
Если в старой теме заголовок страницы вставлен вручную, его нужно заменить на стандартную поддержку WordPress. Ниже пример типичной правки.
<?php
// functions.php
add_action( 'after_setup_theme', function () {
add_theme_support( 'title-tag' );
} );
// header.php — удалить ручной <title>...
// Было:
// <title><?php wp_title(); ?></title>
// Стало: ничего, WordPress сам выведет title через wp_head().Если тема использует устаревший wp_title(), это отдельный сигнал, что код писался под старую схему. В таком случае лучше проверить ещё и другие устаревшие вставки в head.
Когда нужен код, а когда достаточно настроек
Не всегда нужно лезть в PHP. Если дубли создаёт плагин настроек темы, иногда достаточно выключить соответствующий переключатель в админке. Но если источник — шаблон или кастомный сниппет, без кода не обойтись.
Практическое правило такое: если вы можете отключить вывод без редактирования файлов, сначала делайте это через настройки. Если нет — фиксируйте источник в коде и убирайте его там, где он подключён.
Проверка результата после внедрения
После правок не ограничивайтесь визуальным просмотром страницы. Нужно проверить именно HTML и то, как его видит поисковый бот.
- Откройте страницу в браузере и убедитесь, что в
<head>остался один<title>. - Проверьте, что
meta descriptionвыводится один раз. - Сравните canonical на обычной странице, архиве и пагинации.
- Прогоните URL через Google Search Console, если страница уже в индексе.
- Очистите кеш плагина, сервера и CDN, если они используются.
Если у вас есть доступ к командной строке, можно быстро проверить наличие дублей в выгруженном HTML:
curl -s https://example.com/page/ | grep -iE '<title>|meta name="description"|rel="canonical"|og:'Здесь важно не только увидеть наличие тега, но и убедиться, что он не повторяется с разными значениями.
Частые ошибки и как их исправить
Оставили и SEO-плагин, и ручной вывод в теме
Это самая частая причина. Плагин уже генерирует метатеги, а тема по старой привычке печатает свои. Решение: оставить один источник и удалить второй.
Отключили title, но забыли про canonical
Иногда разработчик чинит только заголовок, а canonical остаётся дублироваться. В результате проблема в Search Console не уходит. Проверяйте весь набор SEO-разметки, а не один тег.
Скрыли проблему кешем
После правки страница в браузере выглядит нормально, но старый HTML продолжает отдаваться из кеша. Очистите кеш плагина, объектный кеш, серверный кеш и CDN, если он есть.
Сломали Open Graph при удалении лишнего кода
Иногда вместе с дублем удаляют и нужные соцметатеги. Если у вас есть отдельные карточки для Telegram, VK или Facebook, проверьте, что og:title, og:description и og:image остались на месте и не конфликтуют с SEO-плагином.
Практические советы по безопасности и производительности
Любые правки в functions.php лучше делать через дочернюю тему или mu-plugin, а не напрямую в коммерческой теме. Так вы не потеряете изменения после обновления.
Если проблема повторяется на нескольких страницах, не добавляйте новые SEO-хуки поверх старых. Это увеличивает количество запросов к фильтрам и делает head тяжелее для поддержки. Лучше убрать лишний код один раз, чем жить с несколькими слоями «временных» правок.
Если нужен более аккуратный контроль над дублями, чисткой служебных элементов и SEO-настройками, в экосистеме WPShop есть Clearfy Pro — но использовать его имеет смысл только как инструмент для конкретной задачи, а не как замену пониманию источника конфликта. Сначала найдите, кто именно выводит лишнее, и только потом решайте, чем удобнее это отключать.
Главный критерий, что всё сделано правильно: в исходнике страницы остался один источник метатегов, а в Search Console больше не появляются новые дубли по тем же URL. Если это не так, значит конфликт ещё живёт либо в теме, либо в кеше, либо в одном из подключённых плагинов.