Что означает каждый тег: определение и назначение
Canonical и hreflang — это два разных инструмента для разных задач, хотя новички часто их путают. Link rel canonical сообщает поисковым системам, какой URL считать основным, когда одинаковый контент существует по нескольким адресам. Атрибут rel alternate hreflang указывает, что страница имеет языковые версии или региональные варианты для разных пользователей.
Разница в назначении простая: canonical решает проблему дублирования контента на одном сайте (или между доменами), hreflang помогает поисковым системам понять структуру многоязычного ресурса и показывать пользователям версию страницы на нужном языке.
Когда вы используете canonical, вы говорите Google: «Индексируйте эту страницу, остальные — просто копии». Когда добавляете hreflang, вы говорите: «У этого контента есть альтернативные версии для других языков или регионов — отправьте пользователю из Франции версию на французском, из России — русскую».
Назначение canonical: борьба с дублированием контента
Canonical решает конкретную проблему: когда одинаковый контент доступен по разным URL. Вот типичные сценарии использования.
Параметры в URL могут создавать дубли. Например, страница товара может открываться и как example.com/shoes?color=red&size=10, и как example.com/shoes?size=10&color=red. Для пользователей это одна страница, для Google — две разные. Canonical указывает поисковику: обе версии ссылаются на основной URL, индексируй только его.
Мобильная версия и десктопная версия на разных доменах (например, m.example.com и example.com) тоже требуют canonical. Когда десктопная версия указывает на себя с помощью link rel canonical href, поисковик понимает связь между версиями.
Фильтры в каталоге интернет-магазинов создают бесконечные URL-дубли. Пользователь кликает на разные фильтры цены, размера, цвета — получаются сотни вариаций одной страницы. Canonical на основной версии страницы решает это.
HTTP- и HTTPS-версии одного сайта, WWW и без WWW — все это требует canonical для правильной настройки. Google должен понимать ваше предпочтение и индексировать только один вариант.
Назначение hreflang: правильные версии для разных языков и регионов
Hreflang работает по-другому. Он не скрывает дубли — наоборот, он помогает сопоставить локализованные версии, потому что это разные языковые версии или региональные варианты.
Когда ваш сайт существует на нескольких языках — русском, английском, французском, немецком — каждая страница должна иметь атрибут rel alternate hreflang, который указывает на альтернативные версии контента. Синтаксис xhtml link выглядит так: <link rel="alternate" hreflang="en" href="https://example.com/en/">. Это помогает Google понять, что на example.com/ru/ русская версия, на example.com/en/ — английская.
Региональные варианты требуют hreflang с кодом страны. Если у вас есть версии для России (ru-RU) и США (en-US), укажите это правильно в hreflang. Google тогда покажет пользователю из Москвы русскую версию, а из Нью-Йорка — американскую.
E-commerce часто использует hreflang для разных валют. Товар на example.com/en-us/ в долларах, на example.com/en-gb/ в фунтах — это реально разные версии страницы, не просто перевод. Hreflang указывает на связь между ними.
Когда применяется каждый тег: практические сценарии
Используйте canonical, когда: — Один контент доступен по разным URL (параметры, сессионные ID) — Синдицированный контент: вы скопировали статью из другого блога или она опубликована в нескольких местах — Версии одной страницы для разных устройств (если у вас не адаптивный дизайн) — Категория товаров имеет несколько способов фильтрации
Используйте hreflang, когда: — У вас многоязычный сайт — Контент локализован для разных стран — Вы хотите помогать Google показывать пользователю подходящую версию страницы — Существуют региональные варианты товаров (разные цены, наличие)
Синтаксис: как правильно писать link rel canonical и rel alternate hreflang
Для canonical код в head документа выглядит просто:
<link rel="canonical" href="https://example.com/main-page/">
Google и поисковые системы читают этот элемент и понимают, какой URL основной.
Для hreflang нужно указать больше информации. Вот правильный синтаксис xhtml link:
<link rel="alternate" hreflang="ru" href="https://example.com/ru/">
<link rel="alternate" hreflang="en" href="https://example.com/en/">
<link rel="alternate" hreflang="de" href="https://example.com/de/">
<link rel="alternate" hreflang="x-default" href="https://example.com/">
Атрибут hreflang принимает значение — это код языка по стандарту ISO 639-1. ru для русского, en для английского, fr для французского. Если добавляете региональное уточнение: ru-RU, en-US, en-GB.
Значение x-default зарезервировано для версии по умолчанию — когда пользователь из страны, на которую не нацелена ни одна версия, его отправляют сюда.
Атрибут href содержит полный URL альтернативной версии страницы. Важно: это должны быть абсолютные адреса, не относительные.
Добавляйте эти link-элементы в head каждой версии страницы. Если у вас 5 языков, на каждой странице должно быть 5 ссылок rel alternate hreflang с указанием всех версий.
Также можно указывать hreflang через HTTP-заголовки и в sitemap-файле. В sitemap используется тег <xhtml:link rel="alternate"> для обозначения альтернативных версий контента. Все три способа работают, но link в head — самый надежный.
Как они работают друг с другом: взаимодействие и конфликты
На одной странице могут присутствовать и canonical, и hreflang одновременно. Это нормально, но важно понимать логику.
Каждая языковая версия страницы должна использовать canonical, который указывает на саму себя. Вот правильный способ: на странице example.com/ru/ добавляйте:
<link rel="canonical" href="https://example.com/ru/">
<link rel="alternate" hreflang="ru" href="https://example.com/ru/">
<link rel="alternate" hreflang="en" href="https://example.com/en/">
<link rel="alternate" hreflang="de" href="https://example.com/de/">
Страница указывает на себя через canonical (это называется self-referencing canonical) и одновременно показывает, какие альтернативные версии существуют через hreflang. Google понимает: основной URL — русская версия, а ещё есть английская и немецкая.
Конфликты возникают, когда canonical указывает на другой URL, а hreflang указывает на третий. Поисковик теряется. Например, на странице example.com/ru/ canonical указывает на example.com/main/, но hreflang указывает на example.com/en/. Google не знает, какой URL считать основным.
Частая ошибка: все языковые версии указывают canonical на один главный URL. Неправильно! На русской версии canonical должен указывать именно на русскую версию. Это позволит Google правильно индексировать и ранжировать каждую языковую версию отдельно.
Self-referencing canonical: обязательный элемент структуры
Self-referencing canonical — когда страница указывает на саму себя через link rel canonical. Звучит странно, но это важная практика для SEO.
На каждой странице вашего сайта должен быть установлен canonical — даже если это основной URL без параметров. Это подтверждает поисковику, что именно этот адрес вы считаете основным и хотите, чтобы он был проиндексирован. Без self-referencing canonical могут возникнуть проблемы с ранжированием, особенно если сайт получает ссылки на разные варианты URL.
На многоязычных сайтах это критично. Если забыть добавить self-referencing hreflang и canonical на русскую версию, Google может начать индексировать её как дубль английской версии и потерять трафик в выдаче для русскоязычных запросов.
Большим магазинам и корпоративным проектам это экономит недели работы с поисковиками.
