Если в исходном коде страницы WordPress появляется больше одного тега rel="canonical", поисковик получает противоречивый сигнал. Чаще всего это происходит после установки SEO-плагина, правок темы или когда один и тот же canonical выводится и ядром, и кастомным кодом. В результате страница может индексироваться не так, как вы ожидаете, а в отчётах по сканированию появляются лишние дубли.
Ниже разберём, как быстро найти источник конфликта, убрать лишний canonical и проверить, что на странице остался только один корректный URL.
Как выглядит проблема на практике
Типичный сценарий: вы открываете страницу, смотрите исходный код и видите два похожих тега canonical. Один добавил SEO-плагин, второй — тема через wp_head или кастомный хук. Иногда дубли появляются не как два одинаковых тега, а как разные URL: с www и без, со слэшем и без, с параметрами фильтра или пагинации.
Проблема особенно заметна после миграции сайта, смены темы или переноса настроек SEO-плагина. Если не убрать конфликт, поисковик может выбрать не тот canonical, который вы считаете основным.
Диагностика: где искать лишний canonical
Начните с простого: откройте страницу в браузере и посмотрите исходный код. Ищите строку rel="canonical". Если тегов несколько, дальше нужно понять, кто именно их выводит.
Проверка через исходный код и DevTools
В браузере нажмите просмотр исходного кода страницы и найдите canonical. Если тег один, но URL в нём неверный, проблема уже не в дубле, а в генерации адреса. Если тегов два и больше, переходите к проверке темы и плагинов.
Проверка темы и плагинов
Чаще всего canonical добавляют:
- SEO-плагин;
- тема в файле
header.phpили черезwp_head; - кастомный плагин или сниппет в
functions.php; - редко — сторонний модуль кеша или оптимизации, который вмешивается в head.
Если у вас есть доступ к файлам, проверьте тему на наличие вызовов вроде rel_canonical() или ручного вывода тега canonical.
<?php
// Плохой пример: ручной canonical в теме, если SEO-плагин уже выводит свой тег.
add_action('wp_head', function () {
if (is_singular()) {
echo '<link rel="canonical" href="' . esc_url(get_permalink()) . '" />' . "\n";
}
}, 1);
Если такой код есть, а SEO-плагин тоже активен, у вас почти наверняка будет дубль.
Пошаговое решение без лишнего риска
Самый безопасный путь — оставить один источник canonical. Обычно это SEO-плагин или ядро WordPress, если вы не используете отдельный SEO-слой. Удалять нужно не всё подряд, а только лишний вывод.
Шаг 1. Найдите источник ручного вывода
Проверьте functions.php, mu-plugins и кастомные плагины. Ищите:
rel_canonical();wp_headс<link rel="canonical";- фильтры, которые меняют URL canonical;
- дублирующий код в дочерней теме.
Если canonical выводится вручную, а SEO-плагин уже делает это сам, удалите ручной код. Это самый чистый вариант.
Шаг 2. Если нужен кастомный canonical, отключите стандартный вывод
Иногда canonical действительно нужно формировать вручную: например, для нестандартных архивов или страниц с особыми правилами индексации. В таком случае сначала отключите стандартный вывод, а потом добавьте свой вариант.
<?php
// Убираем стандартный canonical WordPress.
remove_action('wp_head', 'rel_canonical');
// Добавляем свой canonical только для записей.
add_action('wp_head', function () {
if (!is_singular()) {
return;
}
$canonical = get_permalink();
echo '<link rel="canonical" href="' . esc_url($canonical) . '" />' . "\n";
}, 1);
Этот подход подходит только если вы понимаете, почему canonical должен отличаться от стандартного. Для большинства сайтов лучше не усложнять и оставить один источник — SEO-плагин или ядро.
Шаг 3. Проверьте конфликт с SEO-плагином
Если у вас установлен SEO-плагин, не добавляйте canonical вручную без необходимости. У многих плагинов canonical уже включён по умолчанию. В таком случае задача не в том, чтобы «добавить ещё один», а в том, чтобы убрать лишний код из темы или сниппета.
Если canonical нужен только на отдельных типах страниц, используйте фильтры конкретного плагина, а не дублируйте вывод через wp_head. Это уменьшает шанс получить два тега в одном шаблоне.
Сравнение подходов
| Подход | Когда уместен | Риск |
|---|---|---|
| Оставить canonical от SEO-плагина | Обычные записи, страницы, архивы | Минимальный, если нет ручного кода в теме |
| Отключить стандартный canonical и вывести свой | Нестандартные шаблоны, особая логика URL | Можно ошибиться в формировании адреса |
| Оставить оба источника | Никогда не стоит так делать | Дубли и конфликт сигналов для поиска |
Как проверить, что исправление сработало
После правки откройте страницу и снова посмотрите исходный код. На странице должен остаться один тег canonical. Важно проверить не только количество, но и сам URL: он должен быть абсолютным, без лишних параметров и вести на основную версию страницы.
Дополнительно проверьте:
- главную страницу;
- обычную запись;
- страницу пагинации, если она есть;
- архив рубрики или метки;
- страницу с параметрами фильтра, если такие URL индексируются у вас на сайте.
Если используете инструменты для сканирования сайта, запустите повторную проверку и убедитесь, что на проблемных URL больше нет нескольких canonical.
Частые ошибки и как их исправить
Canonical остался в теме после удаления из functions.php
Иногда код лежит не в functions.php, а в шаблоне header.php или в подключаемом файле темы. Поиск по проекту по строке canonical обычно быстрее, чем ручной просмотр всех файлов.
Плагин и тема спорят между собой
Если canonical выводит и SEO-плагин, и тема, не пытайтесь «подправить» оба источника одновременно. Оставьте один. В большинстве случаев безопаснее убрать ручной вывод из темы.
Неправильный URL в canonical
Бывает, что тег один, но URL в нём ведёт на версию с параметрами, на неканонический домен или на страницу без нужного слэша. Тогда проблема в логике генерации адреса. Проверьте настройки постоянных ссылок, домен сайта в Настройки → Общие и правила редиректов на уровне сервера.
Canonical добавляется только на части страниц
Это часто связано с условиями в коде. Например, разработчик вывел canonical только для is_singular(), но забыл про архивы или страницы пагинации. В таком случае нужно не копировать код наугад, а отдельно определить, какие шаблоны должны иметь canonical и какой именно URL там нужен.
Чек-лист перед публикацией изменений
- Проверен исходный код страницы на наличие одного canonical.
- Удалён ручной вывод canonical из темы или сниппета, если он дублировал SEO-плагин.
- Проверены главная, записи, архивы и страницы с параметрами.
- Canonical ведёт на правильный абсолютный URL.
- После правок очищен кеш страницы и кеш плагина, если он используется.
Что учесть для безопасности и производительности
Не держите правки canonical в случайных сниппетах без контроля версий. Если сайт рабочий, лучше вынести изменения в дочернюю тему или небольшой mu-plugin, чтобы не потерять их после обновления темы. Перед правкой сделайте резервную копию файлов и базы, особенно если меняете шаблоны, а не только один хук.
Если на сайте агрессивный кеш, после исправления canonical обязательно очистите серверный и плагинный кеш. Иначе вы можете смотреть на старый HTML и думать, что проблема не ушла.
Для сайтов с нестандартной структурой URL полезно один раз зафиксировать правило: кто именно отвечает за canonical — ядро, SEO-плагин или собственный код. Когда источников несколько, дубли появляются почти неизбежно.