Одна организация — несколько языковых страниц
Главный принцип: организация, товар или автор остаются одной сущностью независимо от языка страницы. Меняется описание страницы, а не сама сущность. Поэтому идентификатор организации делают общим для всех версий, а страницы каждого языка ссылаются на него.
Что переводить, а что оставлять общим
| Свойство | Как поступать |
|---|---|
name, headline, description | Переводить на язык страницы |
inLanguage | Указывать язык каждой страницы |
price, priceCurrency | Указывать актуальные для региона версии |
@id организации, бренда | Оставлять общим для всех языков |
url | Адрес именно этой языковой версии |
address | Формат и язык записи по стране адреса |
Пример
{
"@context": "https://schema.org",
"@type": "WebPage",
"@id": "https://example.com/en/delivery/#webpage",
"url": "https://example.com/en/delivery/",
"inLanguage": "en",
"name": "Delivery",
"isPartOf": { "@id": "https://example.com/#website" }
}
Идентификатор сайта общий, а страница описана на своём языке. О связывании сущностей — в статье про @id.
Согласованность версий
- Разметка каждой версии описывает содержимое именно этой версии, а не «оригинала».
- Цена и валюта соответствуют региону: не оставляйте рубли на английской версии для другой страны.
- Связь версий между собой задаётся атрибутом hreflang, а не разметкой Schema.org — это разные механизмы. Подробно — в статье про атрибут hreflang.
Типичные ошибки
| Ошибка | Последствие | Как исправить |
|---|---|---|
| Одинаковое название на всех языках | Страницы выглядят непереведёнными | Переводить name и описание |
Разные @id организации на разных языках | Одна компания воспринимается как несколько | Использовать общий идентификатор |
Неверный код в inLanguage | Язык страницы определяется неточно | Использовать коды ISO, например ru, en |
| Цена без учёта региона | Пользователь видит неподходящую валюту | Указывать валюту версии |
Как не вести разметку вручную для каждого языка
Если сайт имеет несколько языков, разметку удобно формировать из тех же данных, что и страницу: заголовок, описание и цена берутся из перевода этой версии, а общие сущности — из единого справочника. Так добавление нового языка не требует ручной работы по каждой странице, а расхождений между версиями не возникает.
С чего начать внедрение
- Определите общие сущности — организацию, сайт, бренды — и закрепите за ними единые идентификаторы.
- Для каждой языковой версии сформируйте описание страницы с указанием языка и переведёнными названием и описанием.
- Проверьте, что ссылки между версиями заданы отдельно — атрибутом hreflang, а не разметкой данных.
- Выборочно проверьте разметку по одной странице каждого языка в валидаторе.
Частые вопросы
Нужно ли создавать отдельную Organization для каждого языка?
Нет: организация остаётся одной сущностью с общим идентификатором, а страницы разных языков ссылаются на неё.
Заменяет ли разметка inLanguage атрибут hreflang?
Нет: inLanguage описывает язык страницы, а hreflang связывает языковые версии между собой для поисковой системы.
Как быть с ценами в разных регионах?
Указывать цену и валюту, актуальные именно для региона данной версии страницы.
Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.