Языковые атрибуты: lang, dir, hreflang — назначение и примеры (HTML)

Атрибут lang

Назначение

Атрибут lang указывает язык содержимого элемента. Значение — код языка по стандарту BCP 47 (на основе ISO 639-1 и ISO 3166-1). Атрибут можно применять к любому HTML-элементу, а также задавать на корневом <html> для объявления языка всей страницы.

Что даёт

  • Скринридеры используют lang для выбора правильного произношения и голоса. Без указания языка программа чтения с экрана может читать английский текст русским голосом — результат непонятен.
  • Поисковые системы учитывают lang при определении языковой принадлежности страницы и выборе релевантных результатов для пользователя.
  • Браузеры используют lang для подбора шрифтов, переноса слов (свойство hyphens), оформления кавычек (CSS-свойство quotes) и активации проверки орфографии.
  • Переводчики (встроенные в браузер) опираются на lang при определении исходного языка.

Синтаксис

Базовый код языка состоит из двухбуквенного кода по ISO 639-1:

html
<html lang="ru">

Расширенный формат может включать подкод страны (ISO 3166-1) и другие подкоды через дефис:

html
<html lang="en-US">   <!-- английский, американский вариант -->
<html lang="en-GB">   <!-- английский, британский вариант -->
<html lang="pt-BR">   <!-- португальский, бразильский вариант -->
<html lang="zh-Hans"> <!-- китайский, упрощённые иероглифы -->
<html lang="zh-Hant"> <!-- китайский, традиционные иероглифы -->

Примеры

Объявление языка всей страницы:

html
<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="utf-8">
  <title>Пример страницы</title>
</head>
<body>
  <p>Текст на русском языке.</p>
</body>
</html>

Переключение языка для отдельного фрагмента:

html
<p>Статья была опубликована в журнале
   <cite lang="en">Nature</cite> в 2023 году.</p>

Слово «Nature» будет прочитано скринридером английским голосом, а не как «натюре».

Разные языки в одной странице:

html
<article lang="ru">
  <h1>Новости</h1>
  <section lang="en">
    <h2>Breaking News</h2>
    <p>Content in English.</p>
  </section>
</article>

Коды без подкода страны

Когда достаточно указать только язык без региональной принадлежности, используют двухбуквенный код:

html
<html lang="fr">  <!-- французский -->
<html lang="de">  <!-- немецкий -->
<html lang="es">  <!-- испанский -->
<html lang="ja">  <!-- японский -->
<html lang="ar">  <!-- арабский -->
<html lang="hi">  <!-- хинди -->

Распространённые ошибки

  • Использование lang="ru-RU" без необходимости. Если региональные отличия не важны, lang="ru" достаточно. Код страны добавляют, когда языковые или орфографические различия между регионами существенны (британский и американский английский).
  • Указание lang только на <html> при наличии значительных фрагментов на другом языке. Вложенные элементы с чужим языком нужно размечать отдельно.
  • Устаревший формат lang="ru_RU" с подчёркиванием. По стандарту BCP 47 разделитель — дефис: ru-RU.

Атрибут dir

Назначение

Атрибут dir задаёт направление текста. Применяется к любому элементу. Два значения:

  • ltr — слева направо (англичй, русский, французский, немецкий).
  • rtl — справа налево (арабский, иврит, фарси, урду).

Что даёт

  • Определяет визуальное направление текста и порядок размещения строчных элементов.
  • Задаёт направление потока для блочных элементов: выравнивание по умолчанию, порядок колонок в таблицах, позиционирование списков.
  • Влияет на начальное значение CSS-свойства direction и text-align.
  • Влияет на расположение полос прокрутки в некоторых браузерах (при dir="rtl" полоса может отображаться слева).

Синтаксис и примеры

Страница на арабском языке:

html
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
  <meta charset="utf-8">
  <title>صفحة تجريبية</title>
</head>
<body>
  <p>هذا نص باللغة العربية.</p>
</body>
</html>

Вставка фрагмента с направлением, отличным от основного:

html
<html lang="ar" dir="rtl">
<body>
  <p>الجملة بالعربية
     <span dir="ltr">with an English insert</span>
     ومتابعة بالعربية.</p>
</body>
</html>

Английский фрагмент будет отображаться слева направо внутри rtl-контекста.

Страница со смешанным контентом, где преобладает язык с направлением ltr:

html
<html lang="ru" dir="ltr">
<body>
  <article lang="ar" dir="rtl">
    <h2>العنوان بالعربية</h2>
    <p>نص عربي يُقرأ من اليمين إلى اليسار.</p>
  </article>
  <p>Этот текст — на русском, слева направо.</p>
</body>
</html>

Разница между dir и CSS direction

CSS-свойство direction меняет визуальное направление, но не передаёт семантическую информацию браузеру и вспомогательным технологиям. Атрибут dir делает и то, и другое. Правильный подход — задавать dir в разметке, а CSS использовать для переопределения визуальных аспектов при необходимости.

Автоопределение направления

Для текста, в котором смешаны языки с разным направлением, можно использовать Unicode Bidirectional Algorithm (Bidi). Атрибут dir="auto" включает автоматическое определение направления на основе первого сильного символа (буквы) содержимого:

html
<textarea dir="auto" placeholder="اكتب هنا"></textarea>

Полезно для пользовательского ввода, когда язык заранее неизвестен (формы комментариев, чаты).


Атрибут hreflang

Назначение

Атрибут hreflang указывает язык и (опционально) регион целевого документа, на который ведёт ссылка. Применяется к элементам <link> и <a>. Значение — код языка по BCP 47, как и у lang.

Что даёт

  • Поисковые системы используют hreflang для выбора правильной языковой или региональной версии страницы в результатах поиска. Если пользователь из Германии ищет на немецком, Google покажет немецкую версию страницы, а не английскую.
  • В элементе <link rel="alternate"> формирует карту языковых версий страницы, помогая поисковику понять, что это не дубликаты, а локализованные варианты.
  • В элементе <a> даёт браузеру и вспомогательным технологиям информацию о языке целевого документа до перехода.

Синтаксис на уровне <link>

Для страницы доступны несколько языковых версий. Каждая версия указывает на все остальные, включая себя:

html
<head>
  <!-- Русская версия (текущая страница) -->
  <link rel="alternate" hreflang="ru" href="https://example.com/ru/page">
  <!-- Английская версия -->
  <link rel="alternate" hreflang="en" href="https://example.com/en/page">
  <!-- Немецкая версия -->
  <link rel="alternate" hreflang="de" href="https://example.com/de/page">
  <!-- Французская версия -->
  <link rel="alternate" hreflang="fr" href="https://example.com/fr/page">
  <!-- Версия по умолчанию для пользователей без соответствующей локали -->
  <link rel="alternate" hreflang="x-default" href="https://example.com/en/page">
</head>

Значение x-default — зарезервированное, указывает страницу по умолчанию для пользователей, чьему языку не соответствует ни одна из перечисленных версий.

Синтаксис на уровне <a>

html
<nav>
  <ul>
    <li><a href="/ru/page" hreflang="ru">Русский</a></li>
    <li><a href="/en/page" hreflang="en">English</a></li>
    <li><a href="/de/page" hreflang="de">Deutsch</a></li>
  </ul>
</nav>

Региональные варианты

html
<link rel="alternate" hreflang="en-US" href="https://example.com/us/page">
<link rel="alternate" hreflang="en-GB" href="https://example.com/uk/page">
<link rel="alternate" hreflang="en-AU" href="https://example.com/au/page">
<link rel="alternate" hreflang="x-default" href="https://example.com/us/page">

Поисковик покажет американскую версию пользователям из США, британскую — из Великобритании, австралийскую — из Австралии, остальным — x-default.

Правила корректного применения

  • Двусторонность. Каждая языковая версия должна содержать hreflang-ссылки на все остальные версии, включая обратную ссылку на себя. Если немецкая страница ссылается на русскую, а русская не ссылается на немецкую, поисковик может проигнорировать аннотацию.
  • x-default обязателен. Без страницы по умолчанию поведение поисковика для неперечисленных языков непредсказуемо.
  • Канонический URL. Если страница имеет hreflang-аннотации, она также должна содержать <link rel="canonical">, указывающий на собственный канонический URL, а не на одну из локализованных версий.
  • Полный URL. В href следует указывать абсолютный URL (https://example.com/ru/page), а не относительный (/ru/page). Относительные URL поддерживаются спецификацией, но абсолютные надёжнее.
  • Совпадение с lang. Язык, указанный в hreflang целевой страницы, должен совпадать с языком, объявленным в атрибуте lang на <html> этой страницы. Несовпадение — частая ошибка, ведущая к неверному определению языка.

Распространённые ошибки

  • Указание hreflang без x-default.
  • Односторонние ссылки: русская страница ссылается на английскую, но английская — не на русскую.
  • Несовпадение кода в hreflang и lang целевой страницы: hreflang="ru" ведёт на страницу с lang="en".
  • Использование hreflang для страниц с одинаковым содержанием, но разными URL-параметрами (например, ?session=123). hreflang предназначен для языковых и региональных вариантов, а не для дубликатов.

Сводная таблица

Атрибут Элементы Формат значения Для чего
lang Любой BCP 47 (ruenzh-Hans) Язык содержимого
dir Любой ltrrtlauto Направление текста
hreflang <link><a> BCP 47 (ruen-USx-default) Язык целевого документа

Итог

lang объявляет язык содержимого страницы или её части. dir задаёт направление чтения. hreflang указывает язык документа, на который ведёт ссылка, и помогает поисковикам выбирать правильную локализацию. Все три атрибута принимают коды языков по стандарту BCP 47, но решают разные задачи: lang и dir работают с текущей страницей, hreflang — с целевой.

Добавить комментарий