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

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

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

Когда проблема действительно есть

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

  • title — одинаковый заголовок у разных URL;
  • meta description — одинаковое описание на нескольких страницах;
  • canonical — у страницы указан не тот основной URL или canonical отсутствует.

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

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

Откройте страницу и проверьте, не выводятся ли метатеги дважды. Типичный признак — два тега <meta name="description"> или два <link rel="canonical">. Ещё один частый сценарий — title формируется и через wp_title, и через add_theme_support( 'title-tag' ), из-за чего в браузере всё выглядит нормально, а в HTML есть конфликт логики.

Откуда берутся дубли метатегов

В WordPress дубли обычно появляются в одном из четырёх мест:

  1. тема вручную печатает title, description или canonical в header.php;
  2. SEO-плагин уже добавляет те же теги через wp_head;
  3. шаблоны архивов и таксономий используют одинаковые fallback-значения;
  4. вложенные страницы, пагинация и страницы поиска получают один и тот же шаблон метатега.

Если у вас старый шаблон, проверьте, нет ли там прямого вывода <title> и самописного canonical. Если тема современная, но SEO-плагин установлен поверх неё, конфликт чаще всего возникает из-за того, что тема не была адаптирована под плагин.

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

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

Шаг 1. Уберите ручной вывод title из темы

В functions.php темы должен быть включён современный механизм заголовка:

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

После этого в header.php не нужно выводить <title> вручную. Если он там есть, удалите этот фрагмент. Иначе WordPress и тема будут конкурировать за один и тот же тег.

Шаг 2. Отключите дублирующий description и canonical

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

remove_action( 'wp_head', 'theme_meta_description', 5 );
remove_action( 'wp_head', 'theme_canonical_tag', 10 );

Названия функций здесь должны совпадать с реальными функциями темы. Если в теме они называются иначе, ищите их по add_action( 'wp_head', ... ) или по строкам meta name="description" и rel="canonical" в файлах шаблона.

Шаг 3. Сделайте один источник метатегов для архивов

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

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

    if ( is_search() || is_404() ) {
        return;
    }

    $description = '';

    if ( is_category() || is_tag() || is_tax() ) {
        $term = get_queried_object();
        if ( $term && ! empty( $term->description ) ) {
            $description = wp_strip_all_tags( $term->description );
        }
    }

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

    if ( is_archive() ) {
        echo '<link rel="canonical" href="' . esc_url( get_pagenum_link( 1 ) ) . '" />' . "\n";
    }
}, 20 );

Здесь важно не пытаться «улучшить SEO» любой ценой. Если у вас уже стоит Yoast SEO, Rank Math или другой SEO-плагин, не дублируйте их логику этим кодом. Используйте его только как временное решение или в проектах без SEO-плагина.

Сравнение подходов

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

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

После правок проверьте не только визуально, но и в HTML. Откройте несколько страниц разных типов:

  • обычная запись;
  • страница рубрики;
  • страница метки;
  • страница поиска;
  • страница пагинации архива.

В исходнике должен быть один title, один meta name="description" и один link rel="canonical". Если тегов несколько, значит, один из источников вы не отключили.

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

curl -s https://example.com/category/news/ | grep -Ei 'title|description|canonical'

Если в ответе видно повторяющиеся строки, ищите второй источник в теме, плагине или в коде, который подключается через functions.php.

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

  • Оставили <title> в header.php и включили title-tag. Решение: оставить только add_theme_support( 'title-tag' ).
  • Поставили SEO-плагин, но не убрали старый код темы. Решение: найти все функции, подключённые к wp_head, и отключить дублирующие.
  • Используете одинаковый шаблон description для всех архивов. Решение: задавать описание по типу страницы, а не одной строкой на весь сайт.
  • Забыли про пагинацию. Решение: проверить страницы /page/2/, /page/3/ и убедиться, что canonical ведёт на корректный URL.
  • Проверяли только главную страницу. Решение: тестировать минимум 4–5 разных шаблонов, иначе дубли останутся незамеченными.

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

Не храните метатеги в произвольных опциях без необходимости и не генерируйте их тяжёлыми запросами на каждом хите. Для архивов достаточно данных, которые уже есть в объекте запроса: get_queried_object(), get_the_title(), get_pagenum_link(). Это быстрее и проще для поддержки.

Если вы редактируете тему на живом сайте, сначала сделайте копию и проверьте изменения в staging-окружении. Ошибка в wp_head легко ломает не только SEO, но и вёрстку, если в коде случайно пропущены кавычки или экранирование.

Для проектов, где нужно не только убрать дубли, но и почистить сайт от лишних SEO-артефактов, удобно сначала пройтись по шаблонам темы и отключить всё лишнее вручную, а уже потом подключать SEO-плагин или оставлять собственную логику. Если нужен более широкий набор инструментов для чистки дублей и технических настроек, можно посмотреть Clearfy Pro: https://wpshop.ru/plugins/clearfy.

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

Как использовать хуки и фильтры в WordPress для кастомизации сайта
18.11.2025
Оптимизация WordPress для быстрой загрузки сайта: практические методы и примеры
05.11.2025
Автоматизация отключения неиспользуемых плагинов в WordPress на WPengine
26.01.2026
Как автоматизировать удаление старого и неиспользуемого кода в WordPress
25.02.2026
Как разделить базу данных по таблицам в WordPress для улучшения производительности
14.01.2026