JSON-LD
JSON-LD — это способ разметки, при котором данные передаются с помощью объектов связанных данных (Linked Data, LD).
Принципы разметки
Данные в формате JSON-LD описываются набором разделенных запятыми пар ключ-значение. Формат предусматривает зарезервированные ключи, с помощью которых можно определять контекст описания или связывать объекты различным образом. Например, @context определяет словарь объектов (в данном случае — Schema.org), а @type — тип описываемой сущности. Полный список зарезервированных ключей приведен в документации JSON-LD.
Сущность описывается в фигурных скобках { } в теге<script>
с атрибутом type="application/ld+json" или type="ld+json". Укажите, что для разметки используется словарь Schema.org — "@context":"http://schema.org". С помощью ключа @type укажите класс Schema.org, определяющий описываемую сущность. Разметьте свойства сущности — в качестве ключей используйте свойства заданного класса Schema.org. Для каждого узла графа укажите @id — ссылку на раздел страницы, содержащий описываемую сущность.
В примере ниже описываются две новостные статьи "@type":"NewsArticle". Указаны идентификатор статьи (ключ @id), дата публикации (ключ datePublished) и авторы статьи (ключ author) в виде массива из двух элементов. Авторы описываются с помощью вложенных сущностей класса Person.
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@graph" : [
{
"@type": "NewsArticle",
"@id": "https://www.example-news.com/life/weather/moscow#cao",
"datePublished": "2018-12-11T08:56:49Z",
"author": [{"@type":"Person", "name":"Иван Иванов"},
{"@type":"Person", "name":"Петр Петров"}]
},
{
"@type": "NewsArticle",
"@id": "https://www.example-news.com/life/weather/moscow#zao",
"datePublished": "2018-12-11T09:56:49Z",
"author": [{"@type":"Person", "name":"Иван Иванов"},
{"@type":"Person", "name":"Алексей Алексеев"}]
}
]
}
</script>
Для каждой сущности укажите @id — ссылку на раздел страницы, содержащий описываемую сущность.
В примере ниже описываются две новостные статьи "@type":"NewsArticle". Указаны идентификатор статьи (ключ @id), дата публикации (ключ datePublished) и авторы статьи (ключ author) в виде массива из двух элементов. Авторы описываются с помощью вложенных сущностей класса Person.
<script type="application/ld+json">
[{
"@context": "http://schema.org",
"@type": "NewsArticle",
"@id": "https://www.example-news.com/life/weather/moscow#cao",
"datePublished": "2018-12-11T08:56:49Z",
"author": [{"@type":"Person", "name":"Иван Иванов"},
{"@type":"Person", "name":"Петр Петров"}]
},
{
"@context": "http://schema.org",
"@type": "NewsArticle",
"@id": "https://www.example-news.com/life/weather/moscow#zao",
"datePublished": "2018-12-11T09:56:49Z",
"author": [{"@type":"Person", "name":"Иван Иванов"},
{"@type":"Person", "name":"Алексей Алексеев"}]
}
]
</script>
Подробнее о JSON-LD.
Какие материалы можно разметить
Метрика поддерживает разметку следующих материалов:
Другие материалы, размеченные по стандарту, не попадут в отчеты Метрики.
Как разметить материал
Разметьте материал в соответствии с приведенными ниже правилами, чтобы он корректно обрабатывался Метрикой. Для получения более полной статистики рекомендуем разметить все элементы материала, но обязательными являются только три — идентификатор, заголовок и текст.
Если вы уже используете JSON-LD, проверьте, соответствует ли разметка на вашем сайте этим требованиям. Примеры кода в правилах не являются единственно правильным вариантом разметки.
Разметку можно добавить на сайт автоматически — например, с помощью плагинов для WordPress. Перед использованием убедитесь, что выбранный плагин позволяет передать в код страницы все нужные элементы разметки.
Укажите следующие элементы материала (обязательные элементы отмечены звездочкой):
- Идентификатор*
-
Идентификатор указывается с помощью зарезервированного ключа @id. Он позволяет Метрике отличать материалы друг от друга. Идентификатор не отображается в отчетах. Идентификатором может быть, например, ссылка на материал или произвольное уникальное значение.
"@id": "https://www.example-news.com/life/weather/moscow#сao"
Если ключ @id не был найден, система попытается найти его во вложенных сущностях в ключах mainEntity или mainEntityOfPage .
<script type="application/ld+json"> { "@context": "http://schema.org", "@type": "NewsArticle", "mainEntityOfPage": { "@type": "WebPage", "@id": "https://www.example-news.com/life/weather/moscow#сao" } } </script>
Содержимое @id может использоваться для расчета доскроллов и дочтений. Если в качестве идентификатора:
- Указан URL статьи, Метрика определяет фрагмент после знака # (#fragment). Затем ищет HTML-элемент с этим фрагментом в статье (атрибут id="fragment"). Если фрагмент найден, начинается расчет показателей. Так же обрабатывается URL материала.
- Указано произвольное значение и код JSON-LD размещен в head, то система рассчитывает показатели по содержимому body. Если в body код размещен внутри другого HTML-элемента, то для расчета используется родительский для разметки элемент. Поэтому данные в отчете могут быть неточными. Таким же образом ведется расчет, если в URL материала не указан фрагмент после знака #.
- Заголовок*
- Заголовок отображается в отчетах Метрики. Он может быть указан в ключах headline или alternativeHeadline . Если найдены оба ключа, их значения будут записаны через пробел. Например, если заголовки размечены так:
"headline": "В Москве побит температурный рекорд 1922 года", "alternativeHeadline": "Температура в ноябре превысила 12 °С"
в отчете статья будет называться «В Москве побит температурный рекорд 1922 года Температура в ноябре превысила 12 °С».
Если не найден ни один из ключей выше, в качестве заголовка будет использоваться значение ключа name или itemReviewed (для класса Review ).
- Текст*
-
Текст должен содержаться в ключе text . В тексте определяется количество символов — это нужно для определения объема материала и расчета метрик доскроллов и дочтения.
"text": "В среду, 6 ноября, в Москве был побит температурный рекорд, зафиксированный в 1922 году. Температура воздуха составила плюс 12,1 градуса по Цельсию, как сообщает центр Фобос."
Если ключ text не найден, в качестве текста будет взято:содержимое элемента, расположенного по якорю из значения ключа url или @id:
"@context" : "https://schema.org", "@type" : "Article", "url":"https://www.example-news.com/life/weather/moscow#cao"
содержимое узла, в который вложена описываемая сущность (если это не <head>);
содержимое <body> страницы во всех остальных случаях.
При расчете объема текста символы тегов не учитываются.
Примечание. Полную статистику можно получить по материалу, в тексте которого больше 500 символов. - Автор
-
Автор указывается с помощью ключа author . Если авторов несколько, перечислите их в массиве.
"author": [ {"@type":"Person", "name":"Иван Иванов"}, {"@type":"Person", "name":"Петр Петров"} ]
Если ключ не был найден, система попытается найти его во вложенных сущностях в ключах mainEntity или mainEntityOfPage .
<script type="application/ld+json"> { "@context": "http://schema.org", "@type": "NewsArticle", "@id": "12345", "mainEntityOfPage": { "@type": "WebPage", "author": {"@type":"Person", "name":"Иван Иванов"} } } </script>
Благодаря этим данным можно посмотреть статистику по отдельным авторам.
- Тематика
-
В качестве тематик можно разметить, например, ключевые слова или хэштеги. Укажите тематики в ключе about :
"about": [ {"@type": "Event", "name": "Жара"}, {"@type": "Event", "name": "Москва"} ]
Тип (@type) передавать необязательно или укажите любой, который поддерживается стандартом.
Если не найден ключ name, система попытается найти значения в ключе alternateName.
- Даты публикации и изменения
-
Даты публикации и изменения указываются в ключах datePublished и dateModified . Даты записываются в формате ISO 8601.
"datePublished":"2018-12-11T08:56:49Z", "dateModified":"2018-11-06T09:26:10+04:00"
- Рубрика
-
Рубрика — это раздел сайта, посвященный определенной теме. Для разметки рубрики используйте ключ BreadcrumbList . С его помощью описывается цепочка связанных страниц («хлебные крошки»), которая обычно заканчивается текущим материалом. Внутри BreadcrumbList в ключе itemListElement должно быть определено несколько сущностей типа ListItem , которые описывают текущую и более широкие рубрики.
Вложенность рубрики задается с помощью ключа position. Например, в рубрике «Жизнь» могут содержаться вложенные рубрики «Погода» и «Происшествия». При "position":"1" материал находится на верхнем уровне («Жизнь»), при "position":"2" — на втором («Погода»).
Рубрикой материала будет считаться значение ключа name с наибольшим значением position .
Примечание. На данный момент в статистике отображаются два уровня вложенности рубрик.{ "@context":"http://schema.org", "@type":"BreadcrumbList", "itemListElement":[ { "@type":"ListItem", "position":1, "item":{ "@id":"//example-news.ru/life", "name":"Жизнь"} }, { "@type":"ListItem", "position":2, "item":{ "@id":"//example-news.ru/life/weather", "name":"Погода"} }] }
- URL материала
Если разметка верна и правильно подключен счетчик, через некоторое время по материалу начнет собираться статистика в Метрике.
Пример разметки
Ниже вы можете посмотреть пример разметки новости.
<script type="application/ld+json">
{
"@context":"http://schema.org",
"@graph": [
{
"@type":"BreadcrumbList",
"itemListElement":[
{
"@type":"ListItem",
"position":1,
"item":{
"@id":"//example-news.ru/life",
"name":"Жизнь"
}
},
{
"@type":"ListItem",
"position":2,
"item":{
"@id":"//example-news.ru/life/weather",
"name":"Погода"
}
}
]
},
{
"@type": "NewsArticle",
"@id": "https://www.example-news.com/life/weather/moscow#cao",
"headline": "В Москве побит температурный рекорд 1922 года",
"alternativeHeadline": "Температура в ноябре превысила 12 °С",
"datePublished":"2018-12-11T08:56:49Z",
"dateModified":"2018-11-06T09:26:10+04:00",
"text": "В среду, 6 ноября, в Москве был побит температурный рекорд, зафиксированный
в 1922 году. Температура воздуха составила плюс 12,1 градуса по Цельсию,
как сообщает центр Фобос.",
"author": [
{"@type":"Person", "name":"Иван Иванов"},
{"@type":"Person", "name":"Петр Петров"}
],
"about":{
"@type": "Event",
"name": "Москва"
},
"url": "https://www.example-news.com/life/weather/moscow#cao"
}
]
}
</script>