
В этой статье хочу рассказать про хлебные крошки — элемент навигации по сайту, который помогает пользователям быстро перейти на уровень выше в иерархии страниц. Это особенно удобно, еще и потому, что не всегда может быть очевидно к какому разделу сайта относится страница.
Так например, на этом сайте есть отдельно раздел блога, с большими статьями вроде этой, а есть раздел с небольшими заметками об обновлениях в коде, которые я пишу только на английском. Соответственно из любой статьи можно вернуться в общий список всех статей, а из обновления к списку обновлений через хлебные крошки.
По большому счету хлебные крошки — это простое меню, которое можно использовать для навигации от дочерних страниц к родительским.
Название пришло из сказки братьев Гримм «Гензель и Гретель», в которой дети уходя в лес, оставляли себе след из хлебных крошек, чтобы вернуться домой. На сайтах самый первый элемент хлебных крошек — это главная страница, которую по-английски все же называют «домашней страницей» или коротко «Home», то есть «Дом».
Хлебные крошки обычно размещают в начале страницы, реже внизу страницы. Некоторые размещают их и там и там, чтобы дать возможность перейти по ним к родительской странице после прочтения длинного текста, без необходимости скроллить всю страницу наверх.
Для хорошего пользовательского опыта, считается, что хлебные крошки должны совпадать со структурой ссылок сайта. Рекомендуется, вместе с хлебными крошками реализовать также и структуру ссылок, вида https://домен/родительская-страница/текущая-страница/
В случае с WordPress и кастомными типами записей, для этого рекомендуется заводить страницу, одноименную с типом записей. Для этого может потребоваться добавить свои правила в wp_rewrite.
Таксономии и теги обычно не включаются в адрес страницы, так как скорее являются побочной родительской страницей, а не основной. К тому же таксономии и теги могут быть привязаны к нескольким типам записей, а также к каждой записи может быть привязано несколько таксономий. Чтобы не ломать голову, над выбором и выводом основной таксономии в хлебных крошках, как я и сказал ранее, лучше иметь отдельную родительскую страницу для каждого типа записей, реализованную не через архивы.
Чтобы минимизировать ручной труд, хлебные крошки должны генерироваться автоматически. Для этого можно написать и свое решение, как я сделал это в WP BOX, либо использовать другое готовое решение.
В готовых решениях обычно предоставляется возможность настройки правил в интерфейсе, если вы пишите свое решение или используете, хлебные крошки из WP BOX — то правила заданы в коде и редактируются разработчиком.
Для генерации вам потребуется учесть, что в WordPress есть разные сущности, не у всех есть родительские страницы из коробки, а также у каждой сущности по разному вытаскиваются название и ссылка для использования в элементе. Пример, того как я обрабатываю это в WP BOX:
<?php
$object = get_queried_object();
if ($object instanceof WP_Post) {
$object_type = 'post-type';
$current_page_title = $object->post_title;
if ($object->post_type !== 'page') {
//
} else {
//
}
} else if ($object instanceof WP_Term) {
//
} else if ($object instanceof WP_User) {
//
} else {
//
}
В зависимости от типов объектов и написанной вами логики вы должны получить несколько названий и несколько ссылок для вывода, дополнительно реализовать ветвление для страниц с родительскими страницами и без них. И в конце сверстать сам элемент.
Полную реализацию хлебных крошек WP BOX можно увидеть в коде проекта.
Имеет смысл добавить в верстку дополнительные атрибуты микроразметки, они помогают поисковым системами лучше понять, что это за элемент, и возможно как-то косвенно влияют на SEO. По-крайней мере, правильно размеченные хлебные крошки, как и некоторые другие выводятся в UI Google Search Console в разделе Enhancements (Улучшения). Пример из другого моего проекта:

Одна из причин по которой я не использую известные готовые SEO плагины, в том, что они не предоставляют (или я не нашел такой плагин) возможность управления микроразметкой и не добавляют ее по умолчанию.
Код хлебных крошек с микроразметкой можно проверить в валидаторе разметки — https://validator.schema.org/.
Микроразметка немного усложняет структуру, так как потребуется добавить атрибуты и мету. HTML элемент не может иметь несколько одинаковых атрибутов, поэтому придется сделать такую структуру, в которой разные itemprop атрибуты одного элемента, реализованы через вложенные <meta> и <span> элементы.
<nav itemscope="" itemtype="http://schema.org/BreadcrumbList">
<ul>
<li itemprop="itemListElement" itemscope="" itemtype="http://schema.org/ListItem">
<a itemprop="item">
<span itemprop="name"> </span>
</a>
<meta itemprop="position">
</li>
</ul>
</nav>