На самописной CMS, с которой мне пришлось столкнуться, необходимо обернуть хлебные крошки в разметку Schema.org, два часа попытки внедрения разметки непосредственно в чужой код не дали положительного результата (опечатки, нарушение структуры DOM и т.п.). Решил работать с результирующей строкиой. Стоит отметить, что это подходит для конкретной ситуации, но в полне может стать универсальным решением, со временем.
Есть разметка хлебных крошек по Schema.org от Google:
<ol itemscope itemtype="https://schema.org/BreadcrumbList">
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a itemprop="item" href="/https://example.com/books">
<span itemprop="name">Books</span>
</a>
<meta itemprop="position" content="1" />
</li>
›
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a itemscope itemtype="https://schema.org/WebPage" itemprop="item" itemid="https://example.com/books/sciencefiction" href="https://example.com/books/sciencefiction">
<span itemprop="name">Science Fiction</span>
</a>
<meta itemprop="position" content="2" />
</li>
›
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<span itemprop="name">Award winners</span>
<meta itemprop="position" content="3" />
</li>
</ol>
Кусок функции, которая у меня получилась:
$html = new SimpleXMLElement('
<div class="path">
<a href="/http://yugozapad-vrn.ru/" class="start">Главная</a>
<span>–</span>
<a href="/http://yugozapad-vrn.ru/about.html">О центре</a>
<span>–</span> Схемы этажей
</div>');
// аттрибут
$position = 1;
// забираем гиперссылки
foreach ($html->a as $tempA) {
if ($position == 1) {
$linkElement[] = '<span itemscope itemtype="https://schema.org/BreadcrumbList">'
. '<span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">'
. '<a itemprop="item" '
. 'href="' . $tempA['href'] . '" '
. 'class="' . $tempA['class'] . '">'
. '<span itemprop="name">' . $tempA . '</span>'
. '</a>'
. '<meta itemprop="position" content="' . $position . '" />'
. '</span>'
. '<!--сепаратор-->'
. '<span> – </span>';
} else {
$linkElement[] = '<span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">'
. '<a itemprop="item" '
. 'itemscope '
. 'itemtype="https://schema.org/WebPage" '
. 'itemid="' . $tempA['href'] . '"'
. 'href="' . $tempA['href'] . '" '
. 'class="' . $tempA['class'] . '">'
. '<span itemprop="name">' . $tempA . '</span>'
. '</a>'
. '<meta itemprop="position" content="' . $position . '" />'
. '</span>'
. '<!--сепаратор-->'
. '<span> – </span>';
}
$position++;
}
// забираем послдний текст крошек, который, мать его даже в спан не обернут...
$linkElement[] = '<span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">'
. '<span itemprop="name">' . strip_tags($html) . '</span>'
. '<meta itemprop="position" content="' . $position . '" />'
. '</span>'
. '</span>';
$resStr= implode('',$linkElement);
var_dump($linkElement);
print_r($resStr);
Результат:
- валидатор разметки Google - Ok;
- W3C - Ok.