Структурированные данные schema.org / JSON-LD / MODX
Всем привет, оставлю тут заметку, каким образом, я релизую cтруктурированные данные schema.org в формате JSON-LD для MODX Revolution.
Для начала, могу сказать, что таким образом намного проще простовлять микроразметку, чем добавлять её в html.
Данную разметку поддерживает и Google и Yandex
Вадиторы:
- Google - https://search.google.com/structured-data/testing-tool?hl=ru
- Yandex - https://webmaster.yandex.ru/tools/microtest/
Напишу следующие виды микроразметки, которые обычно использую
Стандарт:
- BreadcrumbList (хлебные крошки);
- Organization (инфа об организации)
- PostalAddress (Адрес)
- ContactPoint (Телефон)
Блог:
- BlogPosting
Для интернет магазинов (дополнительно):
- Order (Информация о продавце)
- Product (Информация о товаре)
- Offer (Цена товара)
- AggregateRating (Рейтинг товара)
Рекомендую создать для этих целей отдельно чанк. Обычно создаю массив, дальше делаю просто json_encode, для Laravel Blade предаю ещё второй параметр: JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES
Все написано на Fenom :)
BreadcrumbList
Реализуем с помощью стандартного pdoCrumbs
{$_modx->runSnippet('pdoCrumbs',[
'showHome'=> 1,
'showCurrent' => 1,
'from' => '0'
'tplWrapper'=> '@INLINE
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [ {$output} ]
}
</script>',
'tplHome'=>'@INLINE
{
"@type": "ListItem",
"position": {$idx},
"item":
{
"@id": "{$link}",
"name": "Главная"
}
},',
'tplCurrent'=>'@INLINE
{
"@type": "ListItem",
"position": {$idx},
"item":
{
"@id": "{$link}",
"name": "{$menutitle}"
}
}',
'tpl'=>'@INLINE
{
"@type": "ListItem",
"position": {$idx},
"item":
{
"@id": "{$link}",
"name": "{$menutitle}"
}
},',
])}
Organization
Здесь просто подставляем переменные, обычно я пользуюсь компонентом ClientConfig.
{set $organization = [
'@context' => 'https://schema.org',
'@type' => 'Organization',
'name' => 'company_name' | config,
'url' => 'site_url' | config,
'logo' => 'site_url' | config ~ 'assets/img/logo.png',
'address' => [
'@type' => 'PostalAddress',
'streetAddress' => 'address' | config,
'addressLocality' => 'city' | config,
'postalCode' => 'index' | config,
'addressCountry' => 'RU',
],
'contactPoint' => [
'@type' => 'ContactPoint',
'telephone'=> 'phone' | config,
'contactType' => 'customer service',
'areaServed' => 'RU',
'availableLanguage' => 'Russian'
]
]}
<script type="application/ld+json">
{json_encode($organization)}
</script>
BlogPosting
Выводим только на странице статьи. Можно поставить проверку в чанке, на то, какой шаблон.
{set $blog_posting = [
'@context' => 'https://schema.org',
'@type' => 'BlogPosting',
'mainEntityOfPage' =>[
'@type' => 'WebPage',
'@id' => $_modx->makeUrl($_modx->resource.id, '','','https')
],
'headline' => $_modx->resource.pagetitle,
'description' => $_modx->resource.description,
'image' => 'site_url' | config ~ $_modx->resource.img,
'author' =>[
'@type' => 'Organization',
'name' => 'company_name' | config
],
'publisher' =>[
'@type' => 'Organization',
'name' => 'company_name' | config,
'logo' =>[
'@type' => 'ImageObject',
'url' => 'site_url' | config ~ 'assets/img/logo.png'
],
],
'datePublished' => $_modx->resource.publishedon | date_format : '%Y-%m-%d',
'dateModified' => $_modx->resource.publishedon | date_format : '%Y-%m-%d',
]}
<script type="application/ld+json">
{json_encode($blog_posting)}
</script>
Order
{set $order = [
'@context' => 'https://schema.org/',
'@type' => 'Order',
'seller' => [
'@type' => 'Organization',
'name' => 'company_name' | config,
'telephone' => 'phone' | config,
]
]}
<script type="application/ld+json">
{json_encode($order)}
</script>
Пишите в комментариях, а каким способом пользуетесь Вы?
Если белый экран, пробуйте так:
{set $organization = json_encode($organization) | replace : '{' : '{ '}
<script type="application/ld+json">
{$organization}
</script>
03.12.2020 / 18117
Комментарии (2)