WordPress Notes WP-1

Как найти и убрать дубли метаданных в WordPress без потери SEO

Дубли метаданных в WordPress обычно всплывают не сразу: сайт открывается, страницы индексируются, но в Search Console появляются одинаковые title и description, а у части URL меняется canonical. На практике это часто происходит после установки SEO-плагина, смены темы, добавления кастомных шаблонов или когда один и тот же метатег выводится и темой, и плагином.

Проблема не в самом факте наличия метатегов, а в том, что поисковик получает несколько конфликтующих вариантов для одной страницы. В итоге снижается предсказуемость индексации, а диагностика превращается в поиск того, кто именно печатает лишний <meta> или <link rel="canonical">.

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

Сначала стоит проверить не код, а фактический HTML. Откройте проблемную страницу и посмотрите исходник: если в <head> есть два title, два meta name="description" или несколько canonical, это уже не теоретическая ошибка, а конкретный конфликт вывода.

Что искать в исходном коде

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

Если нужно быстро проверить страницу из консоли, можно посмотреть фрагмент HTML через curl и отфильтровать head-блок:

curl -L https://example.com/page/ | grep -Ei '<title>|meta name="description"|rel="canonical"'

Это не заменяет полноценный аудит, но помогает быстро понять, есть ли дубли вообще и откуда начинать разбор.

Откуда берутся дубли: типовые сценарии

На WordPress дубли метаданных чаще всего появляются в трех местах: тема, SEO-плагин и кастомный код. Если хотя бы два источника пытаются управлять одним и тем же тегом, конфликт почти неизбежен.

ИсточникЧто обычно ломаетЧто делать
ТемаЖестко выводит title, description или canonicalОтключить вывод в теме или убрать через дочернюю тему
SEO-плагинГенерирует метатеги поверх шаблона темыОставить один источник управления
Кастомный кодДобавляет метатеги через wp_head без проверкиОграничить вывод условиями и приоритетами

Если сайт старый, часто встречается еще один случай: в теме остался ручной <title>, а WordPress уже использует add_theme_support( 'title-tag' ). Тогда заголовок страницы может дублироваться или формироваться непредсказуемо.

Пошаговое решение: оставляем один источник метаданных

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

Шаг 1. Найдите, кто печатает лишнее

Проверьте functions.php, файлы шаблонов и подключенные плагины. Ищите прямой вывод в wp_head, ручной <title> в header.php и фильтры, которые меняют canonical или description.

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

grep -RniE 'wp_head|canonical|description|<title>|title-tag' wp-content/themes/your-theme

Если дубли идут из плагина, отключайте его не наугад, а на тестовой копии сайта. Иначе легко перепутать причину и следствие: метатеги исчезнут, но вместе с ними может пропасть и нужная SEO-логика.

Шаг 2. Уберите ручной title из старой темы

Если тема по-прежнему содержит жестко заданный <title>, лучше перевести ее на штатный механизм WordPress. В functions.php дочерней темы добавьте поддержку title-tag, а ручной вывод заголовка из header.php уберите.

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

После этого WordPress сам будет формировать title через ядро и фильтры, а не через жесткую разметку в шаблоне.

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

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

add_action( 'wp_head', function () {
    if ( is_singular() ) {
        echo '<link rel="canonical" href="' . esc_url( get_permalink() ) . '" />' . "\n";
    }
}, 5 );

Приоритет 5 здесь не случайный: если другой код тоже подключен к wp_head, у вас будет шанс вывести canonical раньше или позже, но главное — не дублировать его в нескольких местах.

Шаг 4. Для description используйте фильтр, а не прямой echo

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

Если вы не используете SEO-плагин, можно собрать description из excerpt или кастомного поля и вывести его через wp_head:

add_action( 'wp_head', function () {
    if ( ! is_singular() ) {
        return;
    }

    global $post;
    if ( ! $post ) {
        return;
    }

    $description = has_excerpt( $post )
        ? get_the_excerpt( $post )
        : wp_trim_words( wp_strip_all_tags( $post->post_content ), 22, '' );

    $description = trim( preg_replace( '/\s+/', ' ', $description ) );

    if ( $description !== '' ) {
        echo '<meta name="description" content="' . esc_attr( $description ) . '" />' . "\n";
    }
}, 10 );

Этот вариант годится только если вы точно не выводите description где-то еще. Иначе получите второй дубль.

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

После правок не ограничивайтесь визуальной проверкой страницы в браузере. Откройте исходный код и убедитесь, что в <head> остались только нужные теги. Для одной страницы должен быть один title, один meta name="description" и один canonical.

  • проверьте исходник страницы вручную;
  • сравните HTML до и после правки;
  • посмотрите, не меняется ли canonical на страницах пагинации и архивов;
  • проверьте мобильную и десктопную версии, если тема подгружает разные шаблоны;
  • сделайте повторный обход в Google Search Console после переобхода страниц.

Полезно также проверить, не остались ли старые кэшированные версии. Если у вас включен серверный кэш, CDN или плагин кеширования, очистите их после внесения изменений. Иначе в браузере будет один HTML, а поисковый бот может увидеть другой.

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

Оставили и SEO-плагин, и ручной вывод

Это самая частая причина дублей. Исправление простое: выберите один источник и отключите второй. Если SEO-плагин управляет title, description и canonical, не дублируйте их в теме.

Удалили тег в теме, но забыли про дочернюю тему

Иногда правки делают в родительской теме, а активна дочерняя. В результате ничего не меняется. Проверяйте именно активный шаблон и все подключенные файлы.

Сломали canonical на архивных страницах

Если без условий вывести canonical только через get_permalink(), на архивах и таксономиях он будет неверным. Для таких страниц нужен отдельный сценарий или штатная логика SEO-плагина.

Проверили только главную страницу

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

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

Любые правки в wp_head лучше вносить через дочернюю тему или небольшой mu-plugin. Так вы не потеряете изменения после обновления темы. Не редактируйте ядро и не вносите правки в файлы плагина, если хотите сохранить обновляемость.

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

Но даже с плагином логику все равно стоит понимать вручную: если не знаете, кто именно выводит метатеги, можно отключить лишнее и случайно сломать нужный canonical или description.

Когда лучше не править кодом

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

Практический критерий простой: если вы не можете за 5 минут ответить, где именно формируется title на конкретной странице, значит сначала нужен аудит, а не новая вставка в functions.php.

×
Прокачай свой WordPress!

Скидка -20% на премиум темы и плагины

Воспользоваться сейчас ⋙