Если в WordPress одна и та же страница открывается по разным URL, поисковику нужно явно показать основную версию. Иначе в индекс могут попасть дубли: страницы с параметрами, архивы, пагинация, версии с UTM-метками, сортировкой или фильтрами. Для этого и нужен canonical — тег, который указывает предпочтительный адрес страницы.
В WordPress canonical можно настроить тремя способами: через SEO-плагин, через тему или вручную кодом. На практике чаще всего достаточно либо штатной поддержки в плагине, либо небольшой доработки шаблона. Главное — не плодить несколько canonical на одной странице и не ставить его наугад на все URL подряд.
Что именно делает canonical и когда он нужен
Canonical — это ссылка на «основную» версию страницы. Она не запрещает индексацию и не удаляет дубли сама по себе, а лишь подсказывает поисковику, какой URL считать предпочтительным. Для страниц с очень похожим содержимым это обычно лучший способ избежать размывания сигналов между дублями.
В WordPress canonical особенно полезен в таких случаях:
- страница доступна с параметрами в URL, например
?utm_source=...,?sort=...,?filter=...; - один и тот же материал открывается через архив рубрики, метки, автора или дату;
- есть пагинация архивов и списков;
- страница доступна по нескольким адресам из-за особенностей темы или плагина;
- на сайте есть похожие карточки, записи или посадочные страницы, где нужно закрепить одну основную версию.
Если страницы действительно разные по смыслу, canonical не должен «склеивать» их искусственно. Например, у фильтра каталога и у основной категории может быть разная ценность для поиска. В таком случае canonical ставят только там, где дублирование реально техническое, а не содержательное.
Как WordPress формирует canonical по умолчанию
В современных версиях WordPress canonical часто выводится автоматически через функцию rel_canonical(). Она подключается в <head> и формирует тег для записей, страниц, архивов и некоторых других типов контента. Но на практике этого не всегда достаточно.
Проблемы обычно возникают в трех ситуациях:
- тема отключила стандартный вывод canonical или добавила свой вариант;
- SEO-плагин уже генерирует canonical, а тема — еще один, и в коде страницы появляется дублирование;
- нужен нестандартный canonical для конкретного шаблона, записи или архива.
Перед любыми правками сначала откройте исходный код страницы и проверьте, сколько тегов <link rel="canonical"> там уже есть. На странице должен быть один canonical, а не два и не три. Если их несколько, сначала убирают лишний источник, а не добавляют новый.
Самый простой способ: настроить canonical через SEO-плагин
Если на сайте уже стоит SEO-плагин, это обычно самый безопасный вариант. У большинства таких плагинов есть штатная поддержка canonical для записей, страниц и архивов. В этом случае ручной код часто не нужен.
Что проверить в плагине:
- включен ли вывод canonical вообще;
- нет ли отдельной настройки для архивов, пагинации и страниц с параметрами;
- не переопределяет ли плагин canonical вручную в конкретной записи или таксономии;
- не создает ли тема параллельный тег в
<head>.
Если плагин позволяет задать canonical в редакторе записи или страницы, используйте это только для нестандартных случаев. Для обычных материалов лучше оставить автоматическую генерацию, чтобы не поддерживать canonical вручную на сотнях страниц.
После сохранения откройте страницу в браузере, посмотрите исходный код и убедитесь, что canonical указывает на нужный URL без параметров. Если страница открывается по нескольким адресам, canonical должен вести на чистую основную версию.
Как задать canonical через тему WordPress
Если SEO-плагина нет или он не решает задачу, canonical можно вывести в теме. Делать это лучше в дочерней теме, а не в исходных файлах шаблона: иначе обновление темы затрёт правку.
В большинстве случаев canonical добавляют в файл header.php внутри секции <head>. Но перед этим нужно понять, не выводит ли WordPress или плагин уже готовый тег. Если вывод есть, новый тег добавлять не нужно.
Пример базовой логики для одиночной записи или страницы:
<?php if ( is_singular() ) : ?>
<link rel="canonical" href="<?php echo esc_url( get_permalink() ); ?>" />
<?php endif; ?>Такой вариант подходит, когда canonical должен указывать на постоянный URL самой записи или страницы. Но для архивов, пагинации и специальных шаблонов этого недостаточно: там адрес нужно формировать отдельно.
Если вы редактируете тему вручную, сначала сделайте резервную копию файла и проверьте изменения на тестовой копии сайта. Ошибка в header.php может сломать вывод всего сайта, если случайно нарушить HTML или PHP-синтаксис.
Когда правка темы оправдана
Этот способ имеет смысл, если:
- на сайте нет SEO-плагина;
- плагин не дает нужной гибкости;
- нужно точечно изменить canonical для конкретного шаблона;
- вы понимаете, где именно в теме формируется
<head>.
Если задача типовая, плагин обычно надежнее. В теме проще допустить ошибку и сложнее поддерживать правки после обновлений.
Настройка canonical через код: когда нужен точечный контроль
Иногда canonical нужно менять не для всего сайта, а только для отдельных страниц, архивов или URL с параметрами. В этом случае удобнее использовать фильтр rel_canonical. Он позволяет подменить адрес, который WordPress выводит в canonical.
Ниже пример, который оставляет стандартный canonical для обычных страниц, но убирает параметры из URL, если они есть:
<?php
add_filter( 'rel_canonical', function( $canonical ) {
if ( is_admin() ) {
return $canonical;
}
if ( empty( $canonical ) ) {
return $canonical;
}
$parts = wp_parse_url( $canonical );
if ( empty( $parts['scheme'] ) || empty( $parts['host'] ) ) {
return $canonical;
}
$clean = $parts['scheme'] . '://' . $parts['host'];
if ( ! empty( $parts['port'] ) ) {
$clean .= ':' . $parts['port'];
}
$clean .= ! empty( $parts['path'] ) ? $parts['path'] : '/';
return $clean;
} );Этот пример полезен не для всех сайтов, а только когда canonical действительно должен быть очищен от лишних параметров. Но применять его нужно осторожно: если параметр влияет на содержимое страницы, просто вырезать его из canonical может быть неверно.
Если вам нужен canonical для конкретного шаблона, лучше писать условие точнее: по типу записи, таксономии, архиву или отдельному ID страницы. Чем уже условие, тем меньше риск сломать canonical там, где он и так работает правильно.
Как проверить, что canonical настроен правильно
После настройки не ограничивайтесь визуальной проверкой в браузере. Нужно убедиться, что в HTML есть один корректный тег и он ведет на нужный адрес.
Проверка занимает пару минут:
- Откройте страницу, которую хотите проверить.
- Посмотрите исходный код страницы через браузер.
- Найдите
rel="canonical". - Убедитесь, что тег один.
- Проверьте, что URL в
hrefсовпадает с основной версией страницы без лишних параметров.
Для страниц с параметрами откройте и чистый URL, и URL с параметром. Если canonical на обеих версиях указывает на один и тот же основной адрес, настройка работает как нужно.
Полезно проверить и архивы: рубрики, метки, страницы пагинации. У них canonical должен быть логичным и не вести, например, со второй страницы архива на первую, если это не соответствует вашей схеме. Здесь многое зависит от темы и SEO-плагина, поэтому слепо копировать настройки с другого сайта не стоит.
Типичные ошибки, из-за которых canonical не помогает
Самая частая проблема — на странице одновременно выводятся два canonical. Обычно это происходит, когда его добавили и тема, и плагин. Поисковик в такой ситуации может проигнорировать оба или выбрать не тот, который вы ожидали.
Еще одна ошибка — ставить canonical на все страницы на главную. Так делать не нужно. Canonical должен указывать на эквивалентную или основную версию конкретной страницы, а не на произвольный URL ради «чистки дублей».
Третья ошибка — использовать canonical вместо нормальной настройки URL-структуры. Если сайт генерирует десятки дублей из-за плохой логики фильтров, одними canonical проблему не закрыть. Иногда нужно дополнительно ограничить индексацию параметров, пересмотреть шаблоны ссылок или убрать лишние архивы из генерации.
И еще один практический момент: canonical не исправляет уже существующие ошибки контента. Если две страницы отличаются только заголовком, но содержат почти одинаковый текст, поисковик может все равно воспринимать их как дубли. В этом случае лучше либо объединить материалы, либо четко развести их по смыслу.
Что выбрать: тему, плагин или код
| Способ | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| SEO-плагин | Обычные записи, страницы, архивы | Просто, безопасно, удобно поддерживать | Меньше гибкости для нестандартных сценариев |
| Тема | Нужно быстро добавить canonical без плагина | Не требует отдельного расширения | Легко сломать при обновлении, нужен контроль за дублированием |
| Код через фильтр | Точечная логика для отдельных URL и шаблонов | Максимальная гибкость | Требует аккуратной проверки и понимания условий |
Если нужен рабочий и поддерживаемый вариант для большинства сайтов, начинайте с SEO-плагина. Если canonical уже есть, но ведет не туда, сначала ищите источник конфликта. И только если стандартных настроек не хватает, переходите к правке темы или фильтрам в коде.
Для сайтов, где часто приходится чистить дубли и управлять техническими SEO-настройками, может пригодиться Clearfy Pro: он помогает централизованно управлять рядом SEO- и технических настроек WordPress, чтобы не собирать одно и то же по разным файлам и плагинам.
Если настроить canonical аккуратно, WordPress перестает плодить лишние сигналы для поисковиков, а основная версия страницы получает понятный и стабильный адрес. В большинстве случаев этого достаточно, чтобы убрать технические дубли без лишних вмешательств в структуру сайта.