Как сделать микроразметку сайта schema.org для яндекса и google

Наверняка каждый владелец сайта сталкивался или слышал про такое понятие - микроразметка сайта. Но многие из них даже не представляют ценность наличие разметки на своем ресурсе. В данной статье хочу немного (впрочем, как получится) поговорить на тему как сделать микроразметку сайта для яндекса и гугл используя словарь сематической разметки schema.org.
Тинькофф (Дебетовая карта) [CPS] RU

Цель микроразметки указать поисковым системам на структурированную информацию, которая находится на сайте. Благодаря внедрению специальных атрибутов, поисковой робот определяет, где именно на странице находится основной контент, а где второстепенный. Наличие разметки помогает передать информацию об “организации и её адрес”, “описание фильмов», «творческих работ”, “информацию о товаре и её стоимости”, “описание рецептов” и многое другое.

Например: на страницах моего сайта основным контентом является статья, но при этом на одной странице с статьей присутствуют комментарии, текст в боковой колонке и в подвале сайта. Когда поисковой робот заходит на страницу, то весь текст документа он оценивает как одно целое. В таком случае при отсутствие семантической разметки теряется смысл в уникальности текста и подбору ключевых фраз.

Любой медиа файл (картинка или видео) из боковой колонке будет присвоен к основному тексту, но при этом файл никак не относится к нему, а является рекламой или анонсом другой записи.

При правильно настроенной микрокроразметки поисковики “благодарят” и формируют в выдаче вот такие красивые сниппеты (краткое описание в поисковой выдаче):

различные варианты микроразметки

По мимо формирования красивых (человека понятных) данных в сниппете я обратил внимание что наличие микроданных положительно влияют на посещаемость ресурса, вот вам доказательство.

наглядный пример наличие микроразметки

Но хочу предупредить, микроразметка не является панацеей и не гарантирует увеличение посещаемости ресурса. Что бы сайт занимал первые места в поиске нужно комплексно подходить к seo оптимизации ресурса.

На днях (после смены шаблона) я решил внедрить разметку schema.org в свой блог, работающий на CMS WordPress. Каждый шаг распишу поэтапно.

Структура моего блога выглядит так:

<!DOCTYPE html>
<html>
<head>
    <!--- название сайта (сео заголовок) --->
    <title></title> 

    <!--- описание сайта --->
    <meta name="description" content=""> 

</head>

<body>

    <!--- шапка сайта --->
    <header></header> 

    <!--- меню (навигация по сайту) --->
    <nav></nav> 

    <!--- основной контен --->
    <article></article> 

    <!--- боковая колонка --->
    <aside></aside> 

    <!--- подвал сайта --->
    <footer></footer> 

</body>
</html>

Каждый из этих блоков имеют внутри свои элементы, но давайте по порядку.

Микроразметки шапки (header) сайта WPHeader

Наличие разметки WPHeader честно для меня не понятно так как не дает никакого результата в выдачи поиска, но всё же желательно ее сделать.

Вариант без разметки

<head> 

      <title></title> 

      <meta name="description" content=""> 

      <meta name="keywords" content=""> 

</head>

Пример с разметкой № 1. Разметить в теле head

<head itemscope itemtype="http://schema.org/WPHeader"> 

       <title itemprop="name"></title> 

       <meta itemprop="description" name="description" content=""> 

       <meta itemprop="keywords" name="keywords" content=""> 

</head>

Пример с разметкой № 2. Разметить в теле header

<header itemscope itemtype="http://schema.org/WPHeader"> 

    <meta itemprop="name" content=""> 

    <meta itemprop="description" content=""> 

    <meta itemprop="keywords" content=""> 

</header>

Мое решение

Моей задачей являлось разметить раздел, но возникли определенные сложности.

  • Во-первых, внедрить атрибут в title не представляется возможным используя хук _wp_render_title_tag(); (у меня лично ничего не вышло).
  • Во-вторых, вывод заголовка у меня формирует плагин Yoast Seo.

Таким образом нужно “костылять” через get_post_meta() используя id или ключи которые формирует плагин.

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

Решение с примером 2 намного проще, но мне он не подходит из личных соображений.

Дополнительные атрибут

CssSelector размечается в head указывает на селектор ссылки с файлом css.

Микроразметка меню (навигации) сайта SiteNavigationElement

Разметка меню формирует в выдачи следующие элементы:

быстрые ссылки

Главное меню без разметки:

<nav>  

    <ul> 

        <li><a href="ссылка">Пункт №1</a></li>  

        <li><a href="ссылка">Пункт №2</a></li>  

        <li><a href="ссылка">Пункт №3</a></li>  

        <li><a href="ссылка">Пункт №4</a></li>         

    </ul>  

</nav>

Пример с разметкой

<nav itemscope itemtype="http://schema.org/SiteNavigationElement">  

    <ul> 

        <li><a itemprop="url" href="ссылка">Пункт №1</a></li>  

        <li><a itemprop="url" href="ссылка">Пункт №2</a></li>  

        <li><a itemprop="url" href="ссылка">Пункт №3</a></li>  

        <li><a itemprop="url" href="ссылка">Пункт №4</a></li>         

    </ul>  

</nav>

Мое решение

Вывод меню на сайте настроен функционалом WordPress и выводится функцией wp_nav_menu(). Через фильтр nav_menu_link_attributes можно добавить itemprop="url". Выглядит это так:

// Добавляем микроразметки itemprop="url" для ссылок меню 

add_filter( 'nav_menu_link_attributes', 'filter_nav_menu_link_attributes', 10, 4 ); 

function filter_nav_menu_link_attributes( $atts, $item, $args, $depth ) {     

        $atts['itemprop'] = 'url'; 

        if ( $item->current ) { 

            $atts['class'] .= ' menu-link--active'; 

        } 

    return $atts; 

}

Микроразметка списка статей блога на главной (index) странице BlogPosting

Давайте определимся так как разметка главной страницы может быть разная, это может быть список статей, в интернет-магазине это товары, новости. У меня это список статей. При разметке статей есть обязательные требования:

  1. Название статьи
  2. Короткое описание
  3. Картинка (миниатюра)
  4. Дата публикации и модификации (обновление)
  5. Информация об организации
  6. Автор

Часто возникает вопрос про организацию, что делать если блог автора не имеет организацию? Суть в том, что можно обозначить разметку в формате блога (авторских или научных статей), но я решил вопрос по-другому. В разметки об организации название написал “блог Антона Воронцова”, указал не полный номер телефона (можно просто поставить прочерк) и ссылку на главную страницу, город, где проживаю и адрес центральной улицы. Этого стало достаточно чтобы гугл валидатор перестал выдавать ошибки.

<article itemscope itemtype="http://schema.org/BlogPosting"> 

    <meta itemscope="" itemprop="mainEntityOfPage" itemtype="https://schema.org/WebPage" itemid="ссылка_на_статью" content="название_статьи"> 
  
    <!--- Данные об организации ---> 
 
    <div itemprop="publisher" itemscope="" itemtype="http://schema.org/Organization"> 

        <link itemprop="sameAs" href="Ссылка на сайт организации"> 

        <meta itemprop="name" content="Название организации"></div> 

        <div itemprop="logo" itemscope="" itemtype="https://schema.org/ImageObject"> 

            <link itemprop="url image" href="ссылка на картинку"> 

        </div> 

        <meta itemprop="telephone" content="+7(900)000-11-22"> 

        <div itemprop="address" itemscope="" itemtype="http://schema.org/PostalAddress"> 

            <meta itemprop="streetAddress" content="улица"> 

            <meta itemprop="addressLocality" content="Москва"> 

        </div> 
  
    <!--- Миниатюра записи ---> 
  
    <figure itemprop="image" itemscope="" itemtype="https://schema.org/ImageObject">  

        <img width="617" height="340" src="ссылка"> 

        <meta itemprop="width" content="670"> 

        <meta itemprop="height" content="340"> 

    </figure> 
 
    <!--- Информация об авторе ---> 
 
    <span itemprop="author" itemscope="" itemtype="http://schema.org/Person"> 

        <span itemprop="name" content="Имя Автора"></span> 

    </span> 

    <!--- Дополнительная информация ---> 
 
    <span itemprop="articleSection"> 

        <a href="ссылка" rel="category tag">Рубрика статьи</a> 

    </span> 

       <span class="data_published" itemprop="datePublished" title="Дата публикации">2020-09-09</span> 

       <span class="data_published" itemprop="dateModified" title="Дата обновления">2020-09-09</span> 

       <span itemprop="commentCount" title="количество комментарие">999</span> 

    <!--- заголовок и описание ---> 

    <h2 class="storytitle" itemprop="headline"> 
       <a href="ссылка_на_статью" itemprop="url" >Название статьи</a> 
    </h2> 

    <div class="entry" itemprop="description">короткое описание статьи</div>
</article>

В принципе тут нет ничего сложного, все размечается прямо в шаблоне темы, но вот с выводом миниатюры нужно чуть-чуть поколдовать.

За стандартный вывод миниатюры отвечает команда  the_post_thumbnail( 'thumbnail' );
В таком случае выводится img с указанием ссылки, размера, но нам важно наличие атрибута itemprop="contentUrl" или itemprop="url contentUrl" завёрнутую в div itemscope itemtype="http://schema.org/ImageObject"

“финт ушами” решит задачу меняем the_post_thumbnail( 'thumbnail' ); на

<div itemprop="image" itemscope itemtype="https://schema.org/ImageObject"> 

  <?php the_post_thumbnail('thumbnail', array( 'itemprop' => 'url contentUrl' ));?> 

      <meta itemprop="width" content="670"> 

      <meta itemprop="height" content="340"> 

</div>

Микроразметка полной статьи на странице (single.php) Article

Разметка полной статьи ничем не отличается от разметки главной, за исключением несколько моментов:

  1. Необходимо указать что это полная статья
  2. Добавляются дополнительные элементы, которые имеют свою разметку (например, хлебные крошки, комментарии)
<article itemscope itemtype="http://schema.org/Article" >  
  
    <meta itemscope="" itemprop="mainEntityOfPage" itemtype="https://schema.org/WebPage" itemid="ссылка_на_статью" content="название_статьи">  
   
    <!--- Данные об организации --->  
  
    <div itemprop="publisher" itemscope="" itemtype="http://schema.org/Organization">  
  
        <link itemprop="sameAs" href="Ссылка на сайт организации">    

        <meta itemprop="name" content="Название организации"></div>    

        <div itemprop="logo" itemscope="" itemtype="https://schema.org/ImageObject">    

            <link itemprop="url image" href="ссылка на картинку">    

        </div>    

        <meta itemprop="telephone" content="+7(900)000-11-22">   

        <div itemprop="address" itemscope="" itemtype="http://schema.org/PostalAddress">    

            <meta itemprop="streetAddress" content="улица">    

            <meta itemprop="addressLocality" content="Москва">    

        </div>  

    <!--- Информация об авторе --->    

    <span itemprop="author" itemscope="" itemtype="http://schema.org/Person">    

        <span itemprop="name" content="Имя Автора"></span>    

    </span>    

    <!--- Дополнительная информация --->  
  
    <span itemprop="articleSection">    

        <a href="ссылка" rel="category tag">Рубрика статьи</a>    

    </span>  
  
       <span class="data_published" itemprop="datePublished" title="Дата публикации">2020-09-09</span>   

       <span class="data_published" itemprop="dateModified" title="Дата обновления">2020-09-09</span>    

       <span itemprop="commentCount" title="количество комментарие">999</span>    

    <!--- заголовок и описание --->  

    <h1 class="storytitle" itemprop="headline">Название статьи</h1>  

    <div class="entry" itemprop="articleBody" >Текст всей записи</div> 

</article>

Если сравнить два кода, то видно, что цикл вывода полной статьи обозначил itemtype="http://schema.org/Article" и тело статьи itemprop="articleBody".

Микроразметка изображения в теле статьи

При вставке изображения в статью, исходный код выглядит так:

Пример без микроразметки

<img loading="lazy" class="" src="полный адрес до изображения" alt="" width=" ширина " height=" высота ">

Валидатор яндекса и гугл будут выдавать ошибку «Необходимо указать значение для поля image» и рекомендации «Рекомендуется заполнять поле image. Укажите значение, если оно известно.»

Пример с микроразметкой №1

<div itemscope itemtype="http://schema.org/ImageObject"> 

    <div itemprop="name">название</div> 
    <img loading="lazy" class="" src=" полный адрес до изображения " itemprop="contentUrl" /> 
    <span itemprop="description">Описание изображения</span> 

</div>

Пример с микроразметкой №2

<div itemprop="image" itemscope itemtype="https://schema.org/ImageObject"> 

    <img itemprop="url" src=" полный адрес до изображения " alt="" width=" ширина " height=" высота "/>  
        <meta itemprop="width" content="ширина"> 
        <meta itemprop="height" content="высота"> 

</div>

Мое решение

код прописывается в файл functions.php

// микроразметку изображений  

function filter_image($content) { 

    $ar    = '!<img (.*?) width="(.*?)" height="(.*?)" (.*?)/>!si'; 
    $br = '<span itemprop="image" itemscope itemtype="https://schema.org/ImageObject"><img itemprop="url contentUrl" \\1 width="\\2" height="\\3" \\4/><meta itemprop="width" content="\\2"><meta itemprop="height" content="\\3"></span>'; 
    $content = preg_replace($ar, $br, $content); 
    return $content; 
    } 

add_filter('the_content', 'filter_image');

Микроразметка подвала сайта (footer.php) WPFooter

В подвале сайта коммерческие организации применяют разметку itemtype="http://schema.org/Organization" где используют адрес, логотип, контакты. На простых информационных ресурсах разметка футера имеет следующий вид.

Пример без микроразметки

<footer> 

    <div class="copyright">2020. Все права защищены</div> 

</footer>

Пример с микроразметкой № 1

<footer itemscope itemtype="http://schema.org/WPFooter"> 

    <div class="copyright"> <span itemprop="copyrightYear">2020</span>. Все права защищены</div>  

</footer>

Пример с микроразметкой № 2

<footer itemscope itemtype="http://schema.org/WPFooter"> 

<div itemscope="" itemtype="http://schema.org/Organization"> 

    <p itemprop="name">Наименование организации</p> 

    Контактная информация:  

    <div itemprop="address" itemscope="" itemtype="http://schema.org/PostalAddress"> 

    <p>Почтовый адрес: 

    <span itemprop="streetAddress">номер дома, улица</span> 

    <span itemprop="postalCode">почтовый индекс</span> 

    <span itemprop="addressLocality">город, страна</span> 

    </p> 

    </div> 

    <p>Телефон: 

    <span itemprop="telephone">контактный телефон</span>, 

    Факс:<span itemprop="faxNumber">факс</span>, 

    E-mail: <span itemprop="email">корпоративный e-mail</span> 

    </p> 

</div> 

    <div class="copyright"><span itemprop="copyrightYear">2020</span>. Все права защищены</div>  

</footer>

Микроразметка хлебных крошек Breadcrumbs

«хлебные крошки» это навигация цепочка, которая отражает путь до текущей страницы.

хлебные крошки на сайте

Пример без микроразметки

<ul>
         <li><a href="ссылка">Главная</a></li>
         <li><a href="ссылка">Название_категории</a></li>
         <li><a href="ссылка">Название_записи</a></li>
</ul>

Пример с микроразметкой

<ul itemscope itemtype="http://schema.org/BreadcrumbList">
       <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
              <a itemprop="item" href="ссылка">
                     <span itemprop="name">Главная</span>
              </a>
              <meta itemprop="position" content="1" />
       </li>
       <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
             <a itemprop="item" href="ссылка" >
                    <span itemprop="name">Название_категории</span>
             </a>
             <meta itemprop="position" content="2" />
       </li>
       <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
             <a itemprop="item" href="ссылка">
                    <span itemprop="name">Название_записи</span>
             </a>
             <meta itemprop="position" content="3" />
       </li>
</ul>

Мое решение

Я использую функцию, которую позаимствовал на сайте Дмитрия dimox.name/wordpress-breadcrumbs-without-a-plugin

За вывод хлебных крошек отвечает следующий код:

<?php if ( function_exists( 'dimox_breadcrumbs' ) ) dimox_breadcrumbs(); ?>

И вот сама функция (необходимо добавить в файл functions.php)

/*
 * "Хлебные крошки" для WordPress
 * автор: Dimox
 * версия: 2019.03.03
 * лицензия: MIT
*/
function dimox_breadcrumbs() {

	/* === ОПЦИИ === */
	$text['home']     = 'Главная'; // текст ссылки "Главная"
	$text['category'] = '%s'; // текст для страницы рубрики
	$text['search']   = 'Результаты поиска по запросу "%s"'; // текст для страницы с результатами поиска
	$text['tag']      = 'Записи с тегом "%s"'; // текст для страницы тега
	$text['author']   = 'Статьи автора %s'; // текст для страницы автора
	$text['404']      = 'Ошибка 404'; // текст для страницы 404
	$text['page']     = 'Страница %s'; // текст 'Страница N'
	$text['cpage']    = 'Страница комментариев %s'; // текст 'Страница комментариев N'

	$wrap_before    = '<div class="breadcrumbs" itemscope itemtype="http://schema.org/BreadcrumbList">'; // открывающий тег обертки
	$wrap_after     = '</div><!-- .breadcrumbs -->'; // закрывающий тег обертки
	$sep            = '<span class="breadcrumbs__separator"> › </span>'; // разделитель между "крошками"
	$before         = '<span class="breadcrumbs__current">'; // тег перед текущей "крошкой"
	$after          = '</span>'; // тег после текущей "крошки"

	$show_on_home   = 0; // 1 - показывать "хлебные крошки" на главной странице, 0 - не показывать
	$show_home_link = 1; // 1 - показывать ссылку "Главная", 0 - не показывать
	$show_current   = 1; // 1 - показывать название текущей страницы, 0 - не показывать
	$show_last_sep  = 1; // 1 - показывать последний разделитель, когда название текущей страницы не отображается, 0 - не показывать
	/* === КОНЕЦ ОПЦИЙ === */

	global $post;
	$home_url       = home_url('/');
	$link           = '<span itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">';
	$link          .= '<a class="breadcrumbs__link" href="%1$s" itemprop="item"><span itemprop="name">%2$s</span></a>';
	$link          .= '<meta itemprop="position" content="%3$s" />';
	$link          .= '</span>';
	$parent_id      = ( $post ) ? $post->post_parent : '';
	$home_link      = sprintf( $link, $home_url, $text['home'], 1 );

	if ( is_home() || is_front_page() ) {

		if ( $show_on_home ) echo $wrap_before . $home_link . $wrap_after;

	} else {

		$position = 0;

		echo $wrap_before;

		if ( $show_home_link ) {
			$position += 1;
			echo $home_link;
		}

		if ( is_category() ) {
			$parents = get_ancestors( get_query_var('cat'), 'category' );
			foreach ( array_reverse( $parents ) as $cat ) {
				$position += 1;
				if ( $position > 1 ) echo $sep;
				echo sprintf( $link, get_category_link( $cat ), get_cat_name( $cat ), $position );
			}
			if ( get_query_var( 'paged' ) ) {
				$position += 1;
				$cat = get_query_var('cat');
				echo $sep . sprintf( $link, get_category_link( $cat ), get_cat_name( $cat ), $position );
				echo $sep . $before . sprintf( $text['page'], get_query_var( 'paged' ) ) . $after;
			} else {
				if ( $show_current ) {
					if ( $position >= 1 ) echo $sep;
					echo $before . sprintf( $text['category'], single_cat_title( '', false ) ) . $after;
				} elseif ( $show_last_sep ) echo $sep;
			}

		} elseif ( is_search() ) {
			if ( get_query_var( 'paged' ) ) {
				$position += 1;
				if ( $show_home_link ) echo $sep;
				echo sprintf( $link, $home_url . '?s=' . get_search_query(), sprintf( $text['search'], get_search_query() ), $position );
				echo $sep . $before . sprintf( $text['page'], get_query_var( 'paged' ) ) . $after;
			} else {
				if ( $show_current ) {
					if ( $position >= 1 ) echo $sep;
					echo $before . sprintf( $text['search'], get_search_query() ) . $after;
				} elseif ( $show_last_sep ) echo $sep;
			}

		} elseif ( is_year() ) {
			if ( $show_home_link && $show_current ) echo $sep;
			if ( $show_current ) echo $before . get_the_time('Y') . $after;
			elseif ( $show_home_link && $show_last_sep ) echo $sep;

		} elseif ( is_month() ) {
			if ( $show_home_link ) echo $sep;
			$position += 1;
			echo sprintf( $link, get_year_link( get_the_time('Y') ), get_the_time('Y'), $position );
			if ( $show_current ) echo $sep . $before . get_the_time('F') . $after;
			elseif ( $show_last_sep ) echo $sep;

		} elseif ( is_day() ) {
			if ( $show_home_link ) echo $sep;
			$position += 1;
			echo sprintf( $link, get_year_link( get_the_time('Y') ), get_the_time('Y'), $position ) . $sep;
			$position += 1;
			echo sprintf( $link, get_month_link( get_the_time('Y'), get_the_time('m') ), get_the_time('F'), $position );
			if ( $show_current ) echo $sep . $before . get_the_time('d') . $after;
			elseif ( $show_last_sep ) echo $sep;

		} elseif ( is_single() && ! is_attachment() ) {
			if ( get_post_type() != 'post' ) {
				$position += 1;
				$post_type = get_post_type_object( get_post_type() );
				if ( $position > 1 ) echo $sep;
				echo sprintf( $link, get_post_type_archive_link( $post_type->name ), $post_type->labels->name, $position );
				if ( $show_current ) echo $sep . $before . get_the_title() . $after;
				elseif ( $show_last_sep ) echo $sep;
			} else {
				$cat = get_the_category(); $catID = $cat[0]->cat_ID;
				$parents = get_ancestors( $catID, 'category' );
				$parents = array_reverse( $parents );
				$parents[] = $catID;
				foreach ( $parents as $cat ) {
					$position += 1;
					if ( $position > 1 ) echo $sep;
					echo sprintf( $link, get_category_link( $cat ), get_cat_name( $cat ), $position );
				}
				if ( get_query_var( 'cpage' ) ) {
					$position += 1;
					echo $sep . sprintf( $link, get_permalink(), get_the_title(), $position );
					echo $sep . $before . sprintf( $text['cpage'], get_query_var( 'cpage' ) ) . $after;
				} else {
					if ( $show_current ) echo $sep . $before . get_the_title() . $after;
					elseif ( $show_last_sep ) echo $sep;
				}
			}

		} elseif ( is_post_type_archive() ) {
			$post_type = get_post_type_object( get_post_type() );
			if ( get_query_var( 'paged' ) ) {
				$position += 1;
				if ( $position > 1 ) echo $sep;
				echo sprintf( $link, get_post_type_archive_link( $post_type->name ), $post_type->label, $position );
				echo $sep . $before . sprintf( $text['page'], get_query_var( 'paged' ) ) . $after;
			} else {
				if ( $show_home_link && $show_current ) echo $sep;
				if ( $show_current ) echo $before . $post_type->label . $after;
				elseif ( $show_home_link && $show_last_sep ) echo $sep;
			}

		} elseif ( is_attachment() ) {
			$parent = get_post( $parent_id );
			$cat = get_the_category( $parent->ID ); $catID = $cat[0]->cat_ID;
			$parents = get_ancestors( $catID, 'category' );
			$parents = array_reverse( $parents );
			$parents[] = $catID;
			foreach ( $parents as $cat ) {
				$position += 1;
				if ( $position > 1 ) echo $sep;
				echo sprintf( $link, get_category_link( $cat ), get_cat_name( $cat ), $position );
			}
			$position += 1;
			echo $sep . sprintf( $link, get_permalink( $parent ), $parent->post_title, $position );
			if ( $show_current ) echo $sep . $before . get_the_title() . $after;
			elseif ( $show_last_sep ) echo $sep;

		} elseif ( is_page() && ! $parent_id ) {
			if ( $show_home_link && $show_current ) echo $sep;
			if ( $show_current ) echo $before . get_the_title() . $after;
			elseif ( $show_home_link && $show_last_sep ) echo $sep;

		} elseif ( is_page() && $parent_id ) {
			$parents = get_post_ancestors( get_the_ID() );
			foreach ( array_reverse( $parents ) as $pageID ) {
				$position += 1;
				if ( $position > 1 ) echo $sep;
				echo sprintf( $link, get_page_link( $pageID ), get_the_title( $pageID ), $position );
			}
			if ( $show_current ) echo $sep . $before . get_the_title() . $after;
			elseif ( $show_last_sep ) echo $sep;

		} elseif ( is_tag() ) {
			if ( get_query_var( 'paged' ) ) {
				$position += 1;
				$tagID = get_query_var( 'tag_id' );
				echo $sep . sprintf( $link, get_tag_link( $tagID ), single_tag_title( '', false ), $position );
				echo $sep . $before . sprintf( $text['page'], get_query_var( 'paged' ) ) . $after;
			} else {
				if ( $show_home_link && $show_current ) echo $sep;
				if ( $show_current ) echo $before . sprintf( $text['tag'], single_tag_title( '', false ) ) . $after;
				elseif ( $show_home_link && $show_last_sep ) echo $sep;
			}

		} elseif ( is_author() ) {
			$author = get_userdata( get_query_var( 'author' ) );
			if ( get_query_var( 'paged' ) ) {
				$position += 1;
				echo $sep . sprintf( $link, get_author_posts_url( $author->ID ), sprintf( $text['author'], $author->display_name ), $position );
				echo $sep . $before . sprintf( $text['page'], get_query_var( 'paged' ) ) . $after;
			} else {
				if ( $show_home_link && $show_current ) echo $sep;
				if ( $show_current ) echo $before . sprintf( $text['author'], $author->display_name ) . $after;
				elseif ( $show_home_link && $show_last_sep ) echo $sep;
			}

		} elseif ( is_404() ) {
			if ( $show_home_link && $show_current ) echo $sep;
			if ( $show_current ) echo $before . $text['404'] . $after;
			elseif ( $show_last_sep ) echo $sep;

		} elseif ( has_post_format() && ! is_singular() ) {
			if ( $show_home_link && $show_current ) echo $sep;
			echo get_post_format_string( get_post_format() );
		}

		echo $wrap_after;

	}
} // end of dimox_breadcrumbs()

Микроразметка комментариев Comment

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

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

<h3 id="comments" itemprop="commentCount">2</h3>

<ol class="commentlist">

    <li itemprop="comment" itemscope="" itemtype="https://schema.org/Comment">
    		<div class="name_autor" itemprop="creator">Имя</div>
    		<div class="comment-data" itemprop="dateCreated">Дата</div>
    		<div class="comment_text" itemprop="text">Комментарий</div>
    </li>

    <li itemprop="comment" itemscope="" itemtype="https://schema.org/Comment">
    		<div class="name_autor" itemprop="creator">Имя</div>
    		<div class="comment-data" itemprop="dateCreated">Дата</div>
    		<div class="comment_text" itemprop="text">Комментарий</div>
    </li>

<ol>

Микроразметка вопрос/ответ раздел (FAQ) FAQPage

На многих сайтах встречал раздел с часто задаваемыми вопросами в конце статьи. Но в 90% случаях автор не использует микроразметку itemtype="https://schema.org/FAQPage" и лишает свой сайт вот такого сниппета:

faq

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

Пример разметки

<div class="faq" itemscope="" itemtype="https://schema.org/FAQPage"> 

    <div itemscope="" itemprop="mainEntity" itemtype="https://schema.org/Question"> 
        <span class="question" itemprop="name">текст вопросительного характера</span> 
        <div itemscope="" itemprop="acceptedAnswer" itemtype="https://schema.org/Answer"> 
         <span class="answer" itemprop="text"> 
             <p>Ответ на вопрос</p>  
         </span> 
        </div> 
    </div> 

    <div itemscope="" itemprop="mainEntity" itemtype="https://schema.org/Question"> 
        <span class="question" itemprop="name">текст вопросительного характера</span> 
        <div itemscope="" itemprop="acceptedAnswer" itemtype="https://schema.org/Answer"> 
         <span class="answer" itemprop="text"> 
             <p>Ответ на вопрос</p>  
         </span> 
        </div> 
    </div> 

    <div itemscope="" itemprop="mainEntity" itemtype="https://schema.org/Question"> 
        <span class="question" itemprop="name">текст вопросительного характера</span> 
        <div itemscope="" itemprop="acceptedAnswer" itemtype="https://schema.org/Answer"> 
         <span class="answer" itemprop="text"> 
             <p>Ответ на вопрос</p>  
         </span> 
        </div> 
    </div> 

</div>

FAQ - Часто задаваемые вопросы

Добавить комментарий

Подтверждаю условия Пользовательского соглашения и даю согласие на обработку персональных данных, в соответствии с Федеральным законом от 27.07.2006 года №152-ФЗ