Проблема разрозненных блоков
Если на странице просто рядом лежат разметки организации, сайта и статьи, система не знает наверняка, что издатель статьи и организация — одна и та же сущность. Идентификатор @id решает эту проблему: он даёт сущности уникальное имя, на которое можно сослаться из любого места.
Как выглядит цепочка связей
Пример с использованием @graph
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://example.ru/#organization",
"name": "Пример-Мебель",
"url": "https://example.ru/"
},
{
"@type": "WebSite",
"@id": "https://example.ru/#website",
"url": "https://example.ru/",
"publisher": { "@id": "https://example.ru/#organization" }
},
{
"@type": "WebPage",
"@id": "https://example.ru/blog/chpu/#webpage",
"url": "https://example.ru/blog/chpu/",
"isPartOf": { "@id": "https://example.ru/#website" }
},
{
"@type": "BlogPosting",
"@id": "https://example.ru/blog/chpu/#article",
"headline": "Как настроить ЧПУ",
"mainEntityOfPage": { "@id": "https://example.ru/blog/chpu/#webpage" },
"publisher": { "@id": "https://example.ru/#organization" }
}
]
}
</script>
Организация описана один раз, а сайт и статья лишь ссылаются на неё по идентификатору. Так данные не дублируются и не расходятся.
Правила для идентификаторов
| Правило | Пояснение |
|---|---|
| Уникальность | У каждой сущности свой идентификатор, у разных сущностей — разные |
| Стабильность | Идентификатор не меняется при изменении названия или оформления |
| Единообразие | Одна и та же сущность везде называется одним и тем же @id |
| Формат | Обычно адрес страницы с фрагментом, например #organization |
| Реальность адреса | Идентификатор не обязан открываться как самостоятельная страница |
Типичные ошибки
- Несколько разных идентификаторов для одной организации на разных страницах.
- Идентификатор, зависящий от домена тестового окружения и попавший на боевой сайт.
- Ссылка на идентификатор, сущность с которым нигде не описана.
Как это применить: опишите организацию по правилам из статьи про Organization, сайт — по статье про WebSite, а статьи — по статье про Article и BlogPosting и свяжите их идентификаторами.
Какие связи стоит задать в первую очередь
| Откуда | Свойство | Куда |
|---|---|---|
WebSite | publisher | Organization |
WebPage | isPartOf | WebSite |
Article | mainEntityOfPage | WebPage |
Article | author | Person |
Article | publisher | Organization |
Product | brand | Brand |
Пошаговое внедрение
- Договоритесь о едином правиле формирования идентификаторов, например «адрес + фрагмент».
- Опишите организацию и сайт один раз, на главной странице, с постоянными идентификаторами.
- На остальных страницах ссылайтесь на организацию и сайт по этим идентификаторам, не повторяя их описание.
- Проверьте, что ни одна ссылка не указывает на несуществующую сущность.
Эта дисциплина окупается на больших сайтах: изменить название компании или логотип нужно в одном месте, а не на тысячах страниц.
Частые вопросы
Зачем нужен @id в разметке?
Он даёт сущности уникальное имя, чтобы ссылаться на неё из разных частей разметки и объединять данные в связный граф, а не в набор независимых блоков.
Должен ли адрес в @id открываться в браузере?
Нет: это лишь идентификатор, и он не обязан вести на самостоятельную страницу, хотя обычно строится на основе адреса сайта с фрагментом.
Что такое @graph?
Массив сущностей внутри одного блока JSON-LD, которые могут ссылаться друг на друга по идентификаторам.
Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.