Пример разметки хлебных крошек по schema.org

<ul itemscope itemtype="https://schema.org/BreadcrumbList">

    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
        <a href="/" title="Главная" itemprop="item">
            <span itemprop="name">Главная</span>
            <meta itemprop="position" content="0">
        </a>
    </li>

    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
        <a href="/section/" title="Раздел" itemprop="item">
            <span itemprop="name">Раздел</span>
            <meta itemprop="position" content="1">
        </a>
    </li>

    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
        <a href="/section/page/" title="Страница" itemprop="item">
            <span itemprop="name">Страница</span>
            <meta itemprop="position" content="2">
        </a>
    </li>

</ul>

itemscope - указывает, что на странице описывается определенный объект.

itemtype - указывает тип объекта.

itemtype="https://schema.org/BreadcrumbList" - указывает тип, хлебные крошки.

itemprop="itemListElement" - указывает на отдельный пункту хлебных крошек.

itemprop="item" - ссылка пункта хлебных крошек.

itemprop="name" - название пункта хлебных крошек.

meta itemprop="position" content="number" - определяет позицию пункта хлебных крошек.

Пример результата после внедрения микроразметки хлебных крошек

Добавляем микроразметка хлебных крошек в Yii2

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

Создадим класс MyBreadcrumbs.php (@app/widgets/MyBreadcrumbs.php), который будет наследовать базовый класс хлебных крошек Breadcrumbs, со следующим кодом:

<?php

namespace app\widgets;

use Yii;
use yii\base\InvalidConfigException;
use yii\bootstrap4\Breadcrumbs;
use yii\bootstrap4\Html;
use yii\helpers\ArrayHelper;

class MyBreadcrumbs extends Breadcrumbs {

    public $itemTemplate = "<li class=\"breadcrumb-item\" itemprop=\"itemListElement\" itemscope itemtype=\"https://schema.org/ListItem\">{link}</li>\n";
    public $activeItemTemplate = "<li class=\"breadcrumb-item active\" aria-current=\"page\" itemprop=\"itemListElement\" itemscope itemtype=\"https://schema.org/ListItem\">{link}</li>\n";

    public function run() {

        $this->registerPlugin('breadcrumb');

        if (empty($this->links)) {
            return '';
        }

        $links = [];
        $position = 0;

        if ($this->homeLink === null) {
            $links[] = $this->renderItem([
                'label' => Yii::t('yii', 'Home'),
                'url' => Yii::$app->homeUrl,
                'position' => $position,
            ], $this->itemTemplate);
        } else if ($this->homeLink !== false) {
            $links[] = $this->renderItem($this->homeLink, $this->itemTemplate);
        }

        foreach ($this->links as $link) {
            $position++;

            if (!is_array($link)) {
                $link = ['label' => $link, 'position' => $position,];
            } else {
                $link += ['position' => $position];
            }

            $links[] = $this->renderItem($link, isset($link['url']) ? $this->itemTemplate : $this->activeItemTemplate);
        }

        return Html::tag('nav', Html::tag($this->tag, implode('', $links), $this->options), $this->navOptions);
    }

    protected function renderItem($link, $template) {

        $encodeLabel = ArrayHelper::remove($link, 'encode', $this->encodeLabels);

        if (array_key_exists('label', $link)) {
            $label = $encodeLabel ? Html::encode($link['label']) : $link['label'];
        } else {
            throw new InvalidConfigException('The "label" element is required for each link.');
        }

        if (isset($link['template'])) {
            $template = $link['template'];
        }

        if (isset($link['position'])) {
            $position = $link['position'];
        } else {
            $position = 0;
        }

        if (isset($link['url'])) {
            $options = $link;
            $options += ['itemprop' => 'item'];
            unset($options['template'], $options['label'], $options['url'], $options['position']);
            $link = Html::a('<span itemprop="name">' . $label. '</span>', $link['url'], $options);
            $link .= '<meta itemprop="position" content="' . $position . '">';
        } else {
            $link = Html::a('<span itemprop="name">' . $label . '</span>', Yii::$app->request->url, ['style' => 'display: none;']);
            $link .= '<meta itemprop="position" content="' . $position . '">';
            $link .= $label;
        }

        return strtr($template, ['{link}' => $link]);

    }
}

Вызываем виджет хлебных крошек с микроразметкой в Yii2

Теперь в месте где вызывается стандартный виджет хлебных крошек Breadcrumbs (обычно это: @app/views/layouts/main.php) заменяем вызов стандартного виджета на наш:

<?php
echo \app\widgets\MyBreadcrumbs::widget([
    'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
]); 
?>

Заполняем массив хлебных крошек

В контроллере массив с хлебными крошками заполняется как и раньше:

<?php
$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Раздел'), 'url' => ['/section']];
$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Страница'), 'url' => ['/section/page']];
$this->params['breadcrumbs'][] = $this->title;

Как проверить микроразметку на сайте?

Проверить правильность микроразметки на сайте можно с помощью инструмента от google: https://developers.google.com/search/docs/advanced/structured-data