Если в индексе появляются дубли, а поисковик выбирает не ту страницу, проблема часто не в контенте, а в канонических URL. В WordPress это случается после установки SEO-плагина, смены темы, правок шаблонов или из-за того, что разные типы страниц отдают разные rel="canonical". Ниже — рабочий сценарий: как быстро найти источник ошибки, исправить его и проверить результат.
Когда стоит проверять canonical в первую очередь
Канонические ошибки редко видны глазами. Страница может открываться нормально, но в исходном коде у неё указан другой адрес как основной. Это особенно заметно, если:
- в индексе есть дубли с параметрами в URL;
- страницы пагинации или архивы указывают canonical на первую страницу без причины;
- SEO-плагин и тема одновременно выводят тег canonical;
- после миграции остались старые адреса, а редиректы настроены не везде;
- на сайте есть AMP, фильтры, сортировки или UTM-параметры.
Что именно искать в исходном коде
Откройте страницу и посмотрите HTML в <head>. Нужен один тег canonical, без дублей и без конфликтов с noindex. Если на странице товара, записи или рубрики canonical указывает на другой URL, это уже повод разбираться.
<link rel="canonical" href="https://example.com/page/" />Проблема начинается, когда вы видите два таких тега или один из них ведёт на нерелевантную страницу, например на главную, архив или URL с параметрами.
Диагностика: где ломается canonical
Сначала нужно понять, кто именно выводит тег: SEO-плагин, тема или кастомный код. На практике это делается в три шага.
- Откройте исходный код проблемной страницы и найдите
canonical. - Проверьте, не добавляет ли его SEO-плагин в настройках мета-тегов.
- Посмотрите файлы темы на наличие ручного вывода через
wp_head.
Если у вас есть доступ к серверу или локальной копии, удобно временно включить логирование и искать правки в шаблонах. Но даже без этого можно быстро проверить конфликт: отключить SEO-плагин на тестовой копии и посмотреть, исчез ли тег.
Типичные симптомы
- страница категории имеет canonical на запись внутри категории;
- страницы с параметрами сортировки канонизируются на URL без параметров, хотя это допустимо не всегда;
- пагинация архивов указывает на первую страницу, но в индексе уже есть вторая и третья;
- у записи canonical ведёт на URL с другим слэшем, протоколом или доменом;
- тема выводит canonical вручную, а плагин — ещё один автоматически.
Пошаговое решение
1. Уберите дублирующий вывод canonical
Если canonical выводится и темой, и плагином, оставьте только один источник. В большинстве случаев правильнее доверить это SEO-плагину или ядру, а не шаблону темы.
Если в теме есть ручной вывод, его нужно убрать или отключить через дочернюю тему. Пример, который часто встречается в header.php или подключаемом шаблоне:
<link rel="canonical" href="<?php echo esc_url( get_permalink() ); ?>" />Такой код сам по себе не всегда ошибочный, но если SEO-плагин уже добавляет canonical, получится дубль. В этом случае ручной вывод лучше удалить.
2. Задайте canonical точечно через фильтр
Если нужно исправить canonical для конкретного типа страниц, используйте фильтр, который предоставляет SEO-плагин. Для Yoast SEO есть фильтр wpseo_canonical. Он позволяет переопределить адрес без правки шаблонов.
<?php
add_filter( 'wpseo_canonical', function( $canonical ) {
if ( is_page( 123 ) ) {
return home_url( '/landing/' );
}
return $canonical;
} );Это полезно, когда одна и та же страница доступна по нескольким адресам, но индексировать нужно только один вариант. Не используйте такой подход массово без проверки: неверный canonical может увести вес на несуществующую или нерелевантную страницу.
3. Исправьте canonical для архивов и пагинации
Для архивов и страниц пагинации важно не ломать логику навигации. Если canonical на второй странице архива указывает на первую, это не всегда ошибка, но нужно смотреть на задачу сайта. Для новостных и контентных архивов обычно важнее, чтобы каждая страница имела предсказуемый адрес и не конфликтовала с noindex и внутренней перелинковкой.
Если у вас кастомный тип записей или нестандартная пагинация, проверьте, не переписывает ли тема canonical через wp_head или SEO-настройки архива.
4. Приведите URL к одному формату
Canonical не спасёт, если сайт отдаёт разные версии одного и того же адреса: со слэшем и без, с http и https, с www и без него. Сначала должен быть один основной вариант домена и структуры URL, затем — canonical.
Проверьте:
- редирект с
httpнаhttps; - редирект между
wwwи безwww; - единый формат слэша в конце URL;
- отсутствие индексируемых дублей с параметрами, если они не нужны.
Пример: как переопределить canonical для фильтра или служебной страницы
Иногда нужно явно указать основной URL для страницы, которая генерируется плагином или шаблоном. В таком случае лучше не править HTML вручную, а использовать фильтр SEO-плагина или wp_head только там, где это действительно необходимо.
<?php
add_action( 'wp_head', function() {
if ( is_page( 'filter' ) ) {
echo '<link rel="canonical" href="' . esc_url( home_url( '/catalog/' ) ) . '" />' . "\n";
}
}, 1 );Этот вариант уместен только если вы точно контролируете, что в head больше не выводится другой canonical для этой страницы. Иначе получите дубль. В реальном проекте безопаснее использовать один механизм, а не смешивать несколько.
Как проверить, что исправление сработало
После правки не ограничивайтесь визуальной проверкой. Нужны минимум три проверки:
- в исходном коде страницы остался один тег canonical;
- canonical указывает на нужный абсолютный URL;
- страница открывается по основному адресу без лишних дублей.
Дополнительно проверьте через инструменты поисковой системы, как она видит страницу. Если у вас есть Search Console, откройте проверку URL и посмотрите, какой canonical выбран пользователем и какой — системой. Если они отличаются, значит конфликт ещё не устранён.
Полезно также пройтись по нескольким типам страниц:
- обычная запись;
- страница рубрики;
- страница пагинации;
- страница с параметрами;
- кастомный тип записи.
Частые ошибки и как их исправить
Два canonical в одном документе
Обычно это конфликт темы и SEO-плагина. Оставьте один источник. Если не уверены, временно отключите ручной вывод в теме и проверьте исходный код.
Canonical ведёт на главную
Такое часто появляется после неудачной настройки шаблона или при ошибке в условии. Проверьте, не подставляется ли home_url() вместо get_permalink() или нужного адреса.
Canonical на URL с параметрами
Если параметры не влияют на содержимое, canonical должен указывать на чистый URL. Если влияют — например, это отдельная сортировка или фильтр каталога, — решение нужно принимать отдельно, а не автоматически.
Canonical и редирект конфликтуют
Иногда страница редиректит на один адрес, а canonical указывает на другой. Это создаёт путаницу для поисковика. Сначала выровняйте редирект, затем canonical.
Чек-лист перед публикацией правок
- На странице только один canonical.
- URL в canonical абсолютный и открывается без редиректов.
- Нет конфликта между темой и SEO-плагином.
- Для архивов и пагинации проверена логика индексации.
- Параметры URL не создают лишние дубли.
- В Search Console выбранный canonical совпадает с ожидаемым.
Что делать, если проблема повторяется после обновления
Если canonical снова ломается после обновления темы или плагина, значит правка была сделана не в том слое. Не вносите изменения прямо в родительскую тему: они пропадут при обновлении. Используйте дочернюю тему, фильтры плагина или отдельный мини-плагин для точечных правок.
Для сайтов, где регулярно появляются дубли и технические SEO-ошибки, имеет смысл держать под рукой инструмент аудита вроде Clearfy Pro: он помогает быстрее находить дубли, лишние элементы и часть типовых SEO-настроек. Но даже с плагином всё равно нужно проверять исходный код и фактический ответ страницы, а не полагаться только на интерфейс.
Если canonical уже исправлен, но поисковик продолжает показывать старый вариант, это не всегда баг WordPress. Иногда нужно дождаться переобхода и убедиться, что старые URL отдают корректный редирект или закрыты от индексации там, где это действительно нужно.