Schema.org – микроразметка, которая структурирует данные на сайте для поисковых систем. На основе этих данных поисковики формируют расширенные сниппеты в поисковой выдаче.

Схема разметки хлебных крошек в формате микроданных

Общая схема микроразметки Breadcrumbs в формате микроданных (Microdata) следующая:

<ul itemscope itemtype="http://schema.org/BreadcrumbList">
    <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
        <a itemprop="item" href="Ссылка_1">
            <span itemprop="name">Заголовок_1</span>
        </a>

        <meta itemprop="position" content="1" />
    </li>
    <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
        <a itemprop="item" href="Ссылка_2">
            <span itemprop="name">Заголовок_2</span>
        </a>

        <meta itemprop="position" content="2" />
    </li>
    …
    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
        <span>
            Заголовок_N
            
            <link href="Ссылка_N" itemprop="item">
            <meta itemprop="name" content="Заголовок_N"/>
            <meta itemprop="position" content="N" />
        </span>
    </li>
</ul>

Как видно, последний пункт N мы разметили по-другому. Именно так рекомендуется размечать последний пункт, когда сам по себе он не является ссылкой.

Однако разметить все пункты по аналогии с последним тоже рабочий вариант, ошибок не будет.

<ul itemscope="" itemtype="https://schema.org/BreadcrumbList">
    <li itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem">
        <a href="Ссылка_1">
            Заголовок_1

            <link href="Ссылка_1" itemprop="item">
            <meta itemprop="name" content="Заголовок_1">
            <meta itemprop="position" content="1">
        </a>
    </li>
    <li itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem">
        <a href="Ссылка_2">
            Заголовок_2

            <link href="Ссылка_2" itemprop="item">
            <meta itemprop="name" content="Заголовок_2">
            <meta itemprop="position" content="2">
        </a>
    </li>
    …
    <li itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem">
        <span>
            Заголовок_N

            <link href="Ссылка_N" itemprop="item">
            <meta itemprop="name" content="Заголовок_N">
            <meta itemprop="position" content="N">
        </span>
    </li>
</ul>

Шаблон разметки хлебных крошек для Битрикс в формате Microdata

Минимальный код для разметки стандартного шаблона компонента bitrix:breadcrumb в формате Microdata:

<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();

/**
 * @global CMain $APPLICATION
 * @var array $arResult
 */

if (empty($arResult)) return '';

global $APPLICATION;

$curPage = $APPLICATION->GetCurPage();
$arResult = array_values($arResult);
$itemSize = count($arResult);

$strReturn = '<ul itemscope itemtype="https://schema.org/BreadcrumbList">';

for ($index = 0; $index < $itemSize; $index++) {
    $title = htmlspecialcharsex($arResult[$index]['TITLE']);
    $link = $arResult[$index]['LINK'] ?: $curPage;

    if ($index != $itemSize - 1) {
        $strReturn .= '
        <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
            <a itemprop="item" href="' . $link . '">
                <span itemprop="name">'
                    . $title .
                '</span>
            </a>
            <meta itemprop="position" content="' . ($index + 1) . '" />
        </li>';
    } else {
        $strReturn .= '
        <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
            <span>'
            . $title . '
                <link href="' . $link . '" itemprop="item">
				<meta itemprop="name" content="' . $title . '" />
                <meta itemprop="position" content="' . ($index + 1) . '" />
            </span>
        </li>';
    }
}

$strReturn .= '</ul>';

return $strReturn;

Далее уже можете добавить на элементы необходимые вам классы для стилей.

Схема разметки хлебных крошек в формате JSON-LD

JSON-LD – это способ разметки, при котором данные передаются с помощью объектов связанных данных (Linked Data, LD).

Схема микроразметки Breadcrumbs в формате JSON-LD следующая:

<script type="application/ld+json">
    {
        "@context": "https://schema.org",
        "@type": "BreadcrumbList",
        "itemListElement": [
            {
                "@type": "ListItem",
                "position": 1,
                "name": "Заголовок_1",
                "item": "Ссылка_1"
            },
            {
                "@type": "ListItem",
                "position": 2,
                "name": "Заголовок_2",
                "item": "Ссылка_2"
            },
            …
        ]
    }
</script>

Шаблон разметки хлебных крошек для Битрикс в формате JSON-LD

Дополнить текущий шаблон хлебных крошек микроразметкой JSON-LD даже еще проще, чем микроданными. Вам всего навсего нужно добавить формирование массива JSON данных, а затем добавить его к возвращаемому HTML.

<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();

/**
 * @global CMain $APPLICATION
 * @var array $arResult
 */

if (empty($arResult)) return '';

global $APPLICATION;

$curPage = $APPLICATION->GetCurPage();
$arResult = array_values($arResult);
$itemSize = count($arResult);

//Формируем JSON-LD структуру
$jsonLd = [
    '@context' => 'https://schema.org',
    '@type' => 'BreadcrumbList',
    'itemListElement' => [],
];

$strReturn = '<ul>';

for ($index = 0; $index < $itemSize; $index++) {
    $title = htmlspecialcharsex($arResult[$index]['TITLE']);
    $link = $arResult[$index]['LINK'] ?: $curPage;

    if ($index != $itemSize - 1) {
        $strReturn .= '<li><a href="' . $link . '">' . $title . '</a></li>';
    } else {
        $strReturn .= '<li><span>' . $title . '</span></li>';
    }

    //Добавляем элемент в JSON-LD
    $jsonLd['itemListElement'][] = [
        '@type' => 'ListItem',
        'position' => $index + 1,
        'name' => $title,
        'item' => $link,
    ];
}

//Переводим сформированный массив в формат JSON и добавляем к итоговому HTML
$jsonLdScript = '<script type="application/ld+json">' . json_encode($jsonLd, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . '</script>';

$strReturn .= '</ul>' . $jsonLdScript;

return $strReturn;

Или даже еще проще. Просто заменяем в файле шаблона последнюю строку:

return $strReturn;

на следующий блок кода:

global $APPLICATION;

// Формируем JSON-LD структуру
$jsonLd = [
    '@context' => 'https://schema.org',
    '@type' => 'BreadcrumbList',
    'itemListElement' => [],
];

for ($index = 0; $index < $itemSize; $index++) {
    // Добавляем элемент в JSON-LD
    $jsonLd['itemListElement'][] = [
        '@type' => 'ListItem',
        'position' => $index + 1,
        'name' => htmlspecialcharsex($arResult[$index]['TITLE']),
        'item' => $arResult[$index]['LINK'] ?: $APPLICATION->GetCurPage(),
    ];
}

//Переводим сформированный массив в формат JSON и добавляем к итоговому HTML
$jsonLdScript = '<script type="application/ld+json">' . json_encode($jsonLd, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . '</script>';

$strReturn .= '</ul>' . $jsonLdScript;

return $strReturn;

Проверка валидности микроразметки

Проверить микроразметку можно с помощью: