» » » Микроразметка Schema.org на примере кулинарного сайта
logotip

Микроразметка Schema.org на примере кулинарного сайта

Всем привет! Надо идти в ногу с временем и сегодня на SEO Маяк я расскажу, что за «зверь» семантическая микроразметка Schema.org.

Я не буду описывать разные типы микроразметок, скажу лишь, что на блоге уже есть одна статья, связанная с данной темой — это Микроразметка в хлебных крошках,  там я использовал разметку RDF, можете почитать.

Микроразметка Schema.org была признана основными поисковыми системами еще 2011 году и в данное время активно внедряется веб-мастерами в свои проекты.

Наверное главный вопрос, что дает эта микроразметка и стоит ли ей вообще размечать сайты?

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

Также микроразметка влияет на внешний вид сниппета. У меня пока еще нет своего примера для демонстрации, но вы наверняка встречали в выдачи Яндекса такие сниппеты:

mikrorazmetka

Так вот, это результат правильной микроразметки кулинарного сайта. Кстати для каждой тематики существуют свои словари, посмотреть их можно тут. Я же сейчас буду размечать свой кулинарный блог и заодно покажу вам как это делается. Поехали!

Микроразметка шапки сайта

Советую обязательно сделать резервную копию файлов, дабы избежать ненужных проблем. Прежде всего идем в Яндекс Вебмастер и жмем на строчку «Проверить микроразметку»:

mikrorazmetka1

На открывшийся странице в поле «URL документа» вбиваем свой домен и жмем кнопку «Проверить»:

mikrorazmetka2

Как видите, на dommenu.ru микроразметка не обнаружена. Теперь давайте это дело поправим.

Первым делом надо снять галочку в пункте «Use Schema.org Markup» в плагине All in One SEO Pack.

Затем с помощью FTP клиента Notepad++ открываем для редактирования файл header.php и ниже тега <body> ищем такую строчку:

<div id="wrapper">

У кого-то это может быть:

<div id="header">

У вас конечно может быть другая структура шаблона, главное, чтобы действие контейнера <div> распространялось до конца кода файла header.php. Надеюсь понятно объясняю.

В самый конец строчки нам надо вставить такой элемент разметки:

itemscope itemtype="http://schema.org/WPHeader"

В общем выглядеть это должно так:

<div id="wrapper" itemscope itemtype="http://schema.org/WPHeader">

Теперь снова обратимся к валидатору микроразметки, интересно что он нам покажет:

mikrorazmetka3

Обратите внимание на слово помеченное стрелочкой. Именно это слово находится в конце вставленного нами элемента микроразметки и не трудно догадаться, что это часть словаря Schema.org, которая будет отвечать за шапку сайта. Весь словарь можно посмотреть здесь.

В предупреждение сообщается, что не хватает обязательного поля description. Давайте его добавим. Для этого ищем в коде такую строчку:

<h2><?php bloginfo('description'); ?></h2>

И прямо в тег h2 (у вас это может быть другой тег) добавляем следующее:

itemprop="description"

После чего строчка должна выглядеть так:

<h2 itemprop="description"><?php bloginfo('description');?></h2>

Смотрим валидатор:

mikrorazmetka5

Ага, валидатор просит 250 символов в описании сайта, ну что же, давайте мы ему их предоставим:

mikrorazmetka4

Теперь полный порядок. Но на этом микроразметка header.php еще не закончена. Ищем строчку с заголовком сайта. У меня она выглядит так:

<h1><a href="<?php bloginfo('url'); ?>"><?php bloginfo('name'); ?></a></h1>

И также в тег h1 или любой другой, которые на вашем сайте оборачивает заголовок вставляем следующий элемент микроразметки:

itemprop="headline"

Строчка теперь выглядит так:

<h1 itemprop="headline"><a href="<?php bloginfo('url'); ?>"><?php bloginfo('name'); ?></a></h1>

Обращаемся к валидатору:

mikrorazmetka6

Теперь в микроразметке шапки у нас есть название сайта. С шапкой вроде все, самое время приступить к разметке записей.

Микроразметка страниц с записями (рецептами)

Открываем любую страницу с рецептом, копируем URL и вставляем в валидатор:

mikrorazmetka7

Ужас, сплошные предупреждения, хотя шапочка теперь у нас аккуратная. А что самое главное нет никакой информации о самом рецепте. Оставим предупреждения пока в покое, ими мы займемся чуть позже, а пока приступим к разметке рецепта.

Для этого открываем файл single.php. У кого неразбериха с файлами советую почитать мою статью о структуре современных шаблонов.

Ищем в файле класс, который находиться ниже такого PHP кода:

<?php get_header(); ?>

У меня он выглядит так:

<div class="span-24" id="contentwrap">

И в самый конец строчки вставляем следующий элемент микроразметки:

itemscope itemtype="http://schema.org/Recipe"

Кстати вы заметили слово «Recipe». Это значит вступает в силу раздел словаря Schema.org отнёсшийся к рецептам. Должно получится следующее:

<div class="span-24" id="contentwrap" itemscope itemtype="http://schema.org/Recipe">

Просим валидатор проверить:

mikrorazmetka8

Итак раздел «Рецепты» активирован, но он пустой. Теперь надо его наполнить. Ищем заголовок рецепта. У меня он выглядит так:

<h2 class="title entry-title"><?php the_title(); ?></h2>

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

itemprop="name"

Вот что должно получится:

<h2 itemprop="name" class="title entry-title"><?php the_title(); ?></h2>

Смотрим валидатор:

mikrorazmetka9

Ага, появился заголовок блюда и исчезла одна ошибка. Идем дальше А дальше дело пойдет посложнее, так как нам надо будет разметить ингредиенты, входящие в блюдо и инструкцию по приготовлению. Начнем с ингредиентов. Обычно у всех и у меня в частности, ингредиенты заключены в элементы списка, который выглядит следующим образом:

<ol> 
<li>Капуста</li>
<li>Марковка</li> 
<li>Картошка</li> 
</ol>

Наша задача заключается в том, чтобы в каждый элемент списка  <li> добавить разметку. Должно получится так:

<ol> 
<li itemprop="ingredients">Капуста</li> 
<li itemprop="ingredients">Марковка</li>
<li itemprop="ingredients">Картошка</li> 
</ol>

Делать это каждый раз вручную — дело неблагодарное, поэтому мы призовем на помощь PHP. Я написал небольшую функцию, которая сделает это за нас, причем исправит все старые рецепты и будет исправно работать с новыми.

Открываем файл functions.php и в самое начало, после тега <php вставляем следующую функцию:

function mayak_ingredients($content) {
global $post;
$pattern = "<li";
$replacement = '<li itemprop="ingredients"';
$content = str_replace($pattern, $replacement, $content);
return $content;
}
add_filter('the_content', 'mayak_ingredients');

Бежим к валидатору:

mikrorazmetka10

Вот они все ингредиенты с моего подопытного рецепта и теперь осталась всего одна ошибка и на эту ошибку я потратил больше всего времени.

Все в тот же файл functions.php вставляем следующий код:

function mayak_text_description($content){
$ot = '<p(.*?)/p>';
$do = 'p itemprop="description" \\1/p';
$content = preg_replace($ot, $do, $content, 1);
return $content;
}
add_filter('the_content', 'mayak_text_description');

Помню, как после многочисленных фиаско, я с дрожью в пальцах нажимал кнопку «Проверить». Но для вас это просто, в общем жмем:

mikrorazmetka11

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

На самом деле с микроразметкой рецепта мы еще не закончили осталась пара маленьких моментов:

Момент №1. Кто автор рецепта?
Момент №2. Каким образом изображения попадут в поиск?

Да уж мороки с этой микроразметкой, ведь жили же без нее как-то раньше и ничего и вообще кто ее придумал… Ну да ладно, начнем с автора рецепта. Открываем файл single.php и ищем такой код:

<?php the_author() ?>

Теперь на надо обернуть этот код тегами span, и добавить элемент микроразметки описывающий автора:

itemprop="author"

В общем выглядеть должно так:

<span itemprop="author"><?php the_author() ?></span>

Что скажет валидатор:

mikrorazmetka12

Итак, мы переходим к последнему этапу микроразметки страницы рецепта  — это изображения. Допустим у нас есть код изображения, неважно, приведу для примера такой:

<img class="aligncenter size-full wp-image-3318" title="Mясной рулет с яйцом" src="http://DomMenu.ru/wp-content/uploads//2013/02/myasnoi-rulet-s-yaicom.jpg" alt="myasnoi rulet s yaicom" width="500" height="375"/>

Что нам надо сделать? Нам надо в каждое изображение добавить вот такой элемент микроразметки:

itemprop="image"

Я как-то прочитал на одном блоге, веб-мастерица привела целую фото-инструкцию как добавлять микроразметку в картинки. Естественно вручную.

Да уж, многие лучше вообще откажутся от этой злополучной микроразметки, чем корпеть днями, вставляя ненавистные элементы. Нет мы этим точно заниматься не будем, а лучше еще раз помучаем файл functions.php и вставим в него следующую функцию:

function mayak_image_marking($content) {
global $post;
$pattern = "<img";
$replacement = '<img itemprop="image"';
$content = str_replace($pattern, $replacement, $content);
return $content;
}
add_filter('the_content', 'mayak_image_marking');

После чего, во все изображения какие были на блоге и какие будут, микроразметка внедриться сама. Проверяем результат на валидаторе. Вуаля:

mikrorazmetka13

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

Теперь разметим первое изображение в рецепте, которое должно отображаться в сниппете. Для этого внедрим, вернее поменяем в коде атрибут: itemprop='image' на itemprop='resultPhoto'.

В этом нам поможет простенькая функция:

function mayak_result_image($content) {
return  preg_replace(array('{<img itemprop="image"}'), array('<img itemprop="resultPhoto"'),$content, 1); 
}
add_filter('the_content', 'mayak_result_image');
Важно! Необходимо соблюсти последовательность функций. Функция mayak_result_image() должна обязательно располагаться в файле ниже функции mayak_image_marking(), иначе элементы не заменятся!

mikrorazmetka19

Осталось разметить зону комментариев. Приступим!

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

Здесь я не стану подробно расписывать все задействованные элементы микроразметки, так как будет слишком долго. Мы просто возьмем и исправим все оставшиеся ошибки несколькими движениями. Напомню как выглядели предупреждения в валидаторе:

mikrorazmetka14

Опять разработчики WordPress накосячили, а люди месяцами греют себе мозги пытаясь найти ответы. Ну да ладно я тоже был среди этих людей и из общей массы веб-мастеров себе не выделяю, все мы «одной крови».

Поэтому я предлагаю миру лекарство, которое излечит Ваш сайт от этих предупреждений. Открываем многострадальный файл functions.php и вставляем в самый конец, ПОСЛЕ закрывающего тега ?> следующую не маленькую функцию:

<?php
/*** Микроразметка в комментариях ***/
function mayak_comment($comment, $args, $depth){
$GLOBALS['comment'] = $comment;
if ( 'div' == $args['style'] ) {
$tag = 'div';
$add_below = 'comment';
} else {
$tag = 'li';
$add_below = 'div-comment';
}
?>
<<?php echo $tag; ?> <?php comment_class( empty( $args['has_children'] ) ? '' : 'parent' ); ?> id="comment-<?php comment_ID(); ?>">
<?php if ( 'div' != $args['style'] ) : ?>
<div id="div-comment-<?php comment_ID(); ?>" class="comment-body">
<?php endif; ?>
<div class="comment-author">
<?php if ( 0 != $args['avatar_size'] ) echo get_avatar( $comment, $args['avatar_size'] ); ?>
</div>
<div itemprop="comment" itemscope="itemscope" itemtype="http://schema.org/Comment">
<?php printf( __('<div itemprop="creator">%s:</div>' ), get_comment_author_link() ); ?>
<?php if ( '0' == $comment->comment_approved ) : ?>
<em class="comment-awaiting-moderation"><?php _e( 'Your comment is awaiting moderation.' ) ?></em>
<br />
<?php endif; ?>
<div class="comment-meta commentmetadata" itemprop="datePublished"><a href="<?php echo esc_url( get_comment_link( $comment->comment_ID, $args ) ); ?>">
<?php
/* translators: 1: date, 2: time */
printf( __( '%1$s' ), get_comment_date('Y-m-d')); ?></a><?php edit_comment_link( __( '(Edit)' ), '&nbsp;&nbsp;', '' );
?>
</div>
<span itemprop="text"><?php comment_text( get_comment_id(), array_merge( $args, array( 'add_below' => $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?></span>
<div class="reply">
<?php comment_reply_link( array_merge( $args, array( 'add_below' => $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?>
</div>
</div>
<?php if ( 'div' != $args['style'] ) : ?>
</div>
<?php endif; ?>
<?php
}
?>

После чего открываем файл comments.php и ищем там такой код:

<?php wp_list_comments(); ?>

И в скобки вставляем следующее:

'callback=mayak_comment'

Если в скобках уже был какой-то код, то просто добавляем в конец через знак «&». В общем может быть так:

<?php wp_list_comments('callback=mayak_comment'); ?>

или так:

<?php wp_list_comments('type=comment&avatar_size=48&callback=mayak_comment'); ?>

Идем проверять на валидаторе:

mikrorazmetka18

Больше никаких предупреждений, но остался один штрих. В том же файле comments.php ищем такую строчку:

<h3 id="comments">Комментариев к записи: <?php comments_number('Нет', '1', '%' );?></h3> 

У вас она может отличатся, но функция comments_numbe() везде одна. К тегу заголовка добавляем следующий элемент микроразметки:

itemprop="commentCount"

Должно получиться так:

<h3 id="comments"> Комментариев к записи: <span itemprop="commentCount"> <?php comments_number('Нет', '1', '%' );?></span></h3>

И что это нам дало? А вот что:

mikrorazmetka17

Ну вот наверное и все! Кстати, микроразметку также можно проверить на валидаторе Google. Данная статья я думаю будет полезна не только веб-мастерам, ведущим кулинарные блоги, но и многим другим. Если что непонятно, спрашивайте в комментариях.

Вышла в свет свежая статья: Гугл, Яндекс и обновление микроразметки Schema.org.

До встречи!

С уважением, Виталий Кириллов

(следующая статья)

Комментарии: 345

  1. Александр Силиванов:

    Привет, Виталий!
    Микроразметка, судя по вниманию к ней сейчас в инете, очень важна. Пробую разбираться. Но пока что не получилось разобраться даже с шапкой сайта 🙂

    Информацию отправил письмом — возможно, я что-то не то делаю?

    Ответить
  2. Александр Силиванов:

    Элемент разметки нужно вставлять до тега header или после него?

    Ответить
    • Виталий Кириллов:

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

      Ответить
  3. Виталик:

    Ух, так и не смог осилить. Вроде бы все просто, но когда начинаешь делать, появляются нюансы конкретной темы вордпресс. Пока оставим эту затею.Решил остановиться на Вашей схеме RDF разметки.

    Ответить
    • Виталий Кириллов:

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

      Ответить
      • Виталик:

        Может и так. Хотя для моего шаблона подошла бы полностью и RDF разметка. Пока ей и пользуюсь. Делала по Вашей инструкции.

        Ответить
  4. Сергей:

    Виталий, спасибо за подробную статью по микроразметке! Все понятно и доступно. Но есть пару вопросов по внедрению микроразметки в шаблон Striking (на другом своем блоге, с простой, бесплатной темой все получилось с первого разу, благодаря Вашим рекомендациям, а вот Striking как-то не могу осилить). Можно ли связаться с Вами по этому поводу? Заранее благодарен.

    Ответить
    • Виталий Кириллов:

      Сергей, просто напишите мне через форму обратной связи!

      Ответить
  5. Саша:

    Админ, как вы сделали плавающий баннер с социальными кнопками?

    Ответить
    • Виталий Кириллов:

      Скоро выпущу статью на эту тему.

      Ответить
  6. Денис:

    Функция для изображений, работает, а вот сама мениатюра поста не отображаеться в разметке, только те картинки которые вложены как медиафайлы, как же можно сделать для миниатюр?

    Ответить
    • Виталий Кириллов:

      Как-то так:

      function mayak_thumbnail_image( $html ){
      return str_replace('img', 'img itemprop="image"', $html);
      }
      add_filter( 'post_thumbnail_html', 'mayak_thumbnail_image' );
      
      Ответить
      • Денис:

        Спасибо, попробую, по идеи должно сработать.

        Ответить
  7. Олег Клышко:

    Не нашел в свей теме MeetaTheme коды которые надо было менять

    Ответить
  8. Юлия:

    У меня проблема все таки с этим дискрипшином(( уже сделала как вы описали и все равно идти не хочет( еще и в хедере теперь вылазит…
    А вот сами ошибки:
    microdata
    ОШИБКА: невозможно определить принадлежность данных полей. Возможны две причины: эти поля некорректно размещены, либо указан лишний атрибут itemprop
    itemType =
    image = jcooks.in.ua/wp-content/uploads/DSC_0537-680×1024.jpg
    headline = Julia’sCook
    description = Пошаговые рецепты с фото. Рецепты на любой вкус и цвет! Надеюсь вам они помогут)

    wpheader
    ПРЕДУПРЕЖДЕНИЕ: не выполнено обязательное условие для острова «Статья» — обязательное поле description отсутствует
    itemType = schema.org/WPHeader

    Ответить
    • Виталий Кириллов:

      Юлия, Вы сняли галочку в плагине All in One AEO Pack, в пункте «Use Schema.org Markup»?

      Ответить
      • Юлия:

        да конечно сняла, все как вы написали

        Ответить
  9. Юлия:

    <!DOCTYPE html>
    <html lang="ru">
    <head>
    <meta charset="utf-8">
    <h1 itemprop="headline"><a href="<?php bloginfo('url'); ?>"><?php bloginfo('name'); ?></a></h1>
    <h2 itemprop="description"><?php bloginfo('description');?></h2>
    <link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>">
    <link rel="pingback" href="<?php bloginfo('pingback_url');?>">
    <link rel="alternate" type="application/rss+xml" title="<?php bloginfo('name'); ?> RSS Feed" href="<?php bloginfo('rss2_url'); ?>">
    <link rel="icon" href="favicon.ico" type="image/x-icon"/>
    <?php wp_head(); ?>
    </head>
    <body>
    <div id="wrapper" itemscope itemtype="http://schema.org/WPHeader">

    Ответить
    • Виталий Кириллов:

      Юлия обратите внимания, что заголовок:

      <h1 itemprop="headline"><a href="<?php bloginfo('url'); ?>"><?php bloginfo('name'); ?></a></h1>
      

      Находиться в не поля действия библиотеки http://schema.org/WPHeader, Можно прописать отдельный блок div, но так чтобы он покрывал весь файл.

      Ответить
  10. Евгений:

    Спасибо за статью. Всё подробно и чётко. У меня выдаёт только такую ошибку:
    microdata
    ОШИБКА: невозможно определить принадлежность данных полей. Возможны две причины: эти поля некорректно размещены, либо указан лишний атрибут itemprop
    itemType =

    Где именно эта ошибка понять не могу, всё вроде бы заполнено

    Ответить
    • Виталий Кириллов:

      Евгений, эта ошибка возникает при разметке тела статьи?

      Ответить
  11. Евгений:

    Да, похоже после внесения изменений. Попробую всё удалить и сделать заново.

    Ответить
  12. Vika:

    Спасибо за подробное описание,
    все сделано по вашим рекомендациям, но валидатор Яндекса все равно пишет:
    »
    vcard
    ПРЕДУПРЕЖДЕНИЕ:кажется, ваша разметка hCard описывает не организацию (поля fn и org не совпадают). В данный момент такая разметка не поддерживается Яндексом
    fn = Vika
    n = Vika
    url = …»

    Ответить
    • Виталий Кириллов:

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

      Ответить
  13. Олег Клышко:

    Виталлий у вас нет такой услуги по микроразметки для сайтов?

    Ответить
    • Виталий Кириллов:

      Олег, я конечно могу взяться, но в данное время мне просто некогда.

      Ответить
  14. Надежда:

    Виталий, здравствуйте! Очень расположил Ваш дружелюбный тон. 🙂 Разрешите поприставать с вопросами? Разметку на сайте делала не я. Гугл пишет, что больше сотни ошибок. Хочу разобраться и исправить. Оказалось, удобнее начать с Яндекса. Есть там такие строки в ответе: «префикс article неизвестен валидатору, укажите его явно атрибутом prefix». Просто заменить слово article на слово prefix?
    Кстати, вообще не пойму, откуда в шапке facebook взялся. Были социальные сети в настройках шаблона, но месяц, как все переделано.
    И второе предупреждение разрешите целиком покажу:
    ПРЕДУПРЕЖДЕНИЕ: поле http://schema.org/query-input не определено в спецификации http://schema.org/SearchAction
    @type = http://schema.org/SearchAction
    http://schema.org/target
    @id = http://lentorgspb.ru/?s={search_term}
    http://schema.org/query-input
    @value = required name=search_term

    Что с этим делать, подскажете?

    Ответить
    • Виталий Кириллов:

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

      Ответить
      • Надежда:

        Виталий, нашла, откуда первое предупреждение. Эту ошибку дает плагин Yoast WordPress SEO в интеграции с социальными сетями. Не пойму, почему только от фейсбука ссылка должна быть с протоколом, а остальные просто урлы. Где-то здесь собака зарыта. Или лучше вообще стереть эту информацию о социальных сетях. Спасибо Вам за уделенное время!

        Ответить
      • Наталия:

        Это предупреждение происходит из-за All in SEO Pack, а как его исправить — только в самом плагине нужно копать. У меня та же проблема.

        Ответить
        • Виталий Кириллов:

          Надо убрать галочку в пункте «Использовать разметку Schema.org».

          Ответить
  15. Светлана:

    Здравствуйте.
    Подскажите пожалуйста как решить такую проблему:
    Я делаю микроразметку к комментариям. Вставляю в functions.php код из вашей статьи. А когда делаю следующий шаг и добавляю в скобки строку, то у меня появляется белое поле и все.
    В чем может быть ошибка?

    Ответить
    • Светлана:

      Прошу прощения. Дело не в коде. А в чем то другом. После сегодняшней пляски с микроразметкой у меня при нажатии на кнопку «Обновить» в редакторе появляется белое поле и приходится нажимать на обновление адреса в строке браузера 🙁

      Ответить
      • Виталий Кириллов:

        Светлана, надеюсь в делали резервные копии файлов.

        Ответить
        • Светлана:

          Да, конечно 🙂

          Ответить
  16. Анастасия:

    Добрый день
    Я добавляла разметку к рецептам через произвольную запись (только одна рубрика с рецептами)
    А можно эту функцию привязать к категории или к заголовку, например, начинающемуся на слово «Рецепт»?

    Ответить
    • Виталий Кириллов:

      Анастасия, какую функцию?

      Ответить
      • Анастасия:

        Эту функцию, из статьи =)
        function mayak_ingredients и тд

        Ответить
        • Виталий Кириллов:

          Функция function mayak_ingredients размечает ингредиенты и не может применяться к категориям.

          Ответить
          • Анастасия:

            Я имею в виду, размечать ингредиенты только в записях из определенной категории

            Ответить
            • Виталий Кириллов:

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

              Ответить
  17. Павел:

    Хорошая статья, но у меня не всё получилось:( Со своей проблемой обратился к Вам через форму обратной связи. Можете мне помочь? Спасибо

    Ответить
  18. Денис:

    Интересно если к комментариям к полю «Сайт» добавить itemprop=»url» , для того чтобы выделить ссылки авторов, если они закрыты от индексации они будут в индекс попадать?

    Ответить
    • Виталий Кириллов:

      Денис, ничего индексироваться не будет, не прореживайте.

      Ответить
      • Денис:

        Ага, спасибо за ответ, может поставлю, незнаю только нужно это или нет )))

        Ответить
  19. Денис:

    А как сделать url для страници с постом, в шаблоне одной записи, там же нет атрибута ссылки ?)

    Ответить
    • Виталий Кириллов:

      Не понял!

      Ответить
      • Денис:

        Указать в разметке url страницы с постом itemprop=»url» прописать нужно, а вот как это сделать, ведь в файле шаблона одной записи нету функции адреса странице.

        Ответить
  20. Мария:

    Здравствуйте, Виталий!
    Мне ваша статья очень хорошо помогла при разметке моего сайта (не кулинарного), особенно функции, которые вы даете в статье, вот они особенно, так как без них у меня многое бы не получилось.
    Правда вместо
    itemscope itemtype="http://schema.org/WPHeader"
    я указала
    itemscope itemtype=&quot;http://schema.org/Blog"
    т.к. у меня блог, поэтому решила попробовать указать Blog, а Вы как считаете: Blog целесообразно указывать?

    Ответить
    • Виталий Кириллов:

      Здравствуйте Мария!
      Думаю тут каждый вправе выбирать на свое усмотрение.

      Ответить
  21. Сергей:

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

    Ответить
    • Виталий Кириллов:

      Рад Видеть Вас, Сергей!

      Ответить
  22. Алексей:

    Здравствуйте, Виталий! Начал внедрять микроразметку по Вашей статье. Сделал шапку сайта — по валидатору яндекса ошибок нет. Решил проверить главную страницу с помощью W3C валидатора — оказалось, что появились ошибки. Не подскажете в чем причина?

    Ответить
    • Виталий Кириллов:

      Точно сказать не могу, Возможно валидатор W3C еще не адаптирован под микроразметку.

      Ответить
  23. Виктория:

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

    Ответить
  24. Наталья Буланова:

    Здравствуйте, Виталий. Пробую делать микроразметку для блога. В вашей статье я не нашла, как удалить старую разметку. Или, может быть, у Вас есть отдельная статья? Помогите, плиз. А может, Вы оказываете такие услуги (установить микроразметку Schema)? Как раз у меня кулинарный блог.

    Ответить
    • Виталий Кириллов:

      Здравствуйте Наталья! У меня сейчас просто нет времени, поэтому взяться не могу.

      Ответить
      • Наталья Буланова:

        А может тогда подскажите, как старую разметку удалить?

        Ответить
        • Виталий Кириллов:

          Вы имеете в виду vcard?

          Ответить
          • Наталья Буланова:

            Выскакивает вот что
            rdfanode
            ОШИБКА: префикс article неизвестен валидатору, укажите его явно атрибутом prefix

            Где найти rdfanode и т.д. Открываю страницу в коде нахожу только vcard, но в файлах php найти никак не могу через CTRL+F

            Ответить
            • Виталий Кириллов:

              Наталья, я не стал публиковать Ваш комментарий полностью.
              rdfanode — это микроразметка, которая используются в хлебных крошках и удалять ее не надо.
              Другое дело vcard. Данной разметкой в WordPress размечены комментарии. В конце статьи я привел функцию, которая заменяет разметку в комментариях c vcard на schema.org.

              Ответить
              • Наталья Буланова:

                Спасибо. Попробую поколдовать над кодом.

                Ответить
  25. Максим:

    Виталий, а Вы не подскажите, как задать условие подобной функции:

    function mayak_ingredients($content) {
    global $post;
    $pattern = «<li";
    $replacement = '<li itemprop="ingredients"';
    $content = str_replace($pattern, $replacement, $content);
    return $content;
    }
    add_filter('the_content', 'mayak_ingredients');

    Что бы она работал только в определенном, индивидуальном шаблоне записей?
    Или придется создавать custom post type…?

    Ответить
    • Виталий Кириллов:

      С ходу не могу сказать.

      Ответить
      • cooledit:

        А если уже есть custom post type, как использовать код внедрения itemprop=»»?

        Ответить
  26. Юлия:

    Здравствуйте, Виталий! Спасибо за статью, потрясающе! а за функцию автоматической разметки картинок отдельный респект, все сделала, все получилось, один маленький ньюанс остался в валидаторе гугл вот такую ошибку показывает
    Ошибка. Missing required hCard «author».
    А в Яндексе все ок.
    Нашла вот такой вариант
    <span class="vcard author">
    <span class="fn"><?php the_author_posts_link(); ?></span>
    </span>
    Но тогда ошибку пишет уже Яндекс «ПРЕДУПРЕЖДЕНИЕ:кажется, ваша разметка hCard описывает не организацию (поля fn и org не совпадают). В данный момент такая разметка не поддерживается Яндексом».
    Подскажите, пожалуйста, как исправить.

    Ответить
    • Виталий Кириллов:

      Юлия, эта ошибка выскакивает в зоне комментариев?

      Ответить
      • Юлия:

        Виталий, нет ошибка в первой части разметки
        hatom-feed
        hatom-entry:
        entry-title: Пирог бездрожжевой с капустой
        updated: 2014-04-28 Бочарова Юлия
        bookmark:
        name: Икра из запеченных баклажанов
        rel: bookmark
        url: http://bo4ariki.ru/zakuski/ikra-iz-zapechennyx-baklazhanov
        tags:
        name: Просмотреть все записи в рубрике «Выпечка»
        rel: tag
        url: http://bo4ariki.ru/vypechka
        Ошибка. Missing required hCard «author».

        Ответить
        • Виталий Кириллов:

          Юлия, а где у Вас строчка «author»?
          Наверное должно быть так:
          author = автор: Бочарова Юлия
          И вообще я не использовал микроразметку hcard, зачем Вам она?

          Ответить
          • Юлия:

            Я честно говоря ее и не использовала, ведь hcard используют для разметки адреса и.т.п. различных организаций, а какой физический адрес у кулинарного блога? Не пойму, почему валидатор гугл упорно ее от меня требует…

            Ответить
          • Юлия:

            Виталий! Я только что ввела страницу Вашего кулинарного сайта в валидатор и показывает ту же ошибку, что и у меня. Смотрите сами, вводила вот эту http://dommenu.ru/salat-serdce.html

            Ответить
            • Виталий Кириллов:

              Юлия, все правильно, у меня эта ошибка присутствует, но дело в том, что Яндекс, в отличии от Гугла, не поддерживает разметку vcard и поэтому выдает ошибку. Я выбрал schema.org и на эту ошибку не обращаю внимания.

              Ответить
              • Юлия:

                Да нет, тут как-то можно сделать чтобы и нашим и вашим. Вот, как пример блог Борисова isif-life.ru использована разметка schema.org, а микроразметка валидна и в гугл и в яндекс и таких блогов много. Вот голову ломаю и понять не могу, как подправить код, чтобы угодить обоим)

                Ответить
                • Виталий Кириллов:

                  Да Юля, Яндекс не поддерживает vcard, поэтому народ и использует schema.org и RDF. Кстати на сайте, что Вы мне привели в пример, vcard и не пахнет, поэтому там и ошибки нет. Посмотрите внимательно.
                  А теперь по сути вопроса. Все Ваши мучения связанны с функцией post_class(), что находится в файлах index.php, single.php возможно и др. Данная функция выводит в исходный код страницы Вашего сайта такую строчку:

                  <div class="post-344 post type-post status-publish format-standard hentry category-vypechka" id="post-344">
                  

                  Все дело в одном слове — hentry, которое включает одноименную библиотеку vcard и говорит Гуглу, что здесь применена данная микроразметка.
                  Надо удалить эту функцию, также возможно еще придется подправить стили страницы, так как к post_class() частенько привязывают CSS. Поэтому вместо функции post_class() пропишите:

                  class="post"
                  

                  И еще уберите из файлов следующие классы, если они есть:

                  class="updated";
                  class="entry-title";
                  class="entry-summary";
                  class="author";
                  

                  Успехов!

                  Ответить
                  • Юлия:

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

                    Ответить
                    • Юлия:

                      Здравствуйте, Виталий! Пробовала переименовать post_class()в class=»post», эти строки были в файлах index.php и single.php- в итоге пропали все записи на главной и в рубриках, просто шапка сайта и белый лист.
                      Хотела у Вас спросить, микроразметка привязывается к шаблону, ведь мы вносим изменения в файлы шаблона?
                      А если это так, то почему я устанавливаю другой шаблон (взяла с другого своего блога, там микроразметки вообще никакой нет и гугл и яндекс показывает, что микроразметки нет и ошибок тоже никаких нет, т.е. чистый шаблон без следов микроразметки)установила его на bo4ariki.ru и опять показывает эти ошибки hcard! Как же так, значит оно где-то не в файлах шаблона спряталось?

                    • Виталий Кириллов:

                      Здравствуйте Юлия. Вы видимо не знаете, как работают функции, поэтому у Вас и рушится сайт. Давайте пошагово:
                      Шаг №1:
                      Находим и удаляем функцию post_class(), которая являться тегом шаблона и в файлах выглядит следующим образом:

                      <?php post_class(); ?>
                      

                      Удаляем указанный код полностью.
                      Шаг № 2:
                      В блок div, в теле которого располагалась функция post_class() дописываем класс post:

                      class="post"
                      

                      Юля правильно удалите функцию post_class() и все проблемы закончатся.

  27. Татьяна:

    Виталий, здравствуйте! Спасибо за статью. Подскажите пожалуйста, есть ли в Schema.org подраздел аналогичный Рецептам?
    У меня рукодельный блог, на котором так же как и на кулинарном идут сначала «ингридиенты» в качестве необходимых инструментов и приспособлений для работы, потом детальное описание изготовления с пошаговыми фотографиями.
    Я бы хотела (если возможно, конечно) сделать такую же детальную разметку как для кулинарных сайтов, но только у меня ведь не рецепты 🙁
    Я так понимаю, если я у себя разметку для рецептов внедрю, то это ведь не правильно?
    Есть что-то похожее? Не смогла сама разобраться как там эти категории искать.
    Спасибо большое заранее.

    Ответить
    • Виталий Кириллов:

      Татьяна, вот как вариант, почитайте help.yandex.ru/webmaster/supported-schemas/other-content.xml

      Ответить
      • Татьяна:

        Ага. 🙂 Спасибо большое.

        Ответить
  28. Юлия:

    Спасибо большое, Виталий! Все получилось! Мучениям конец!

    Ответить
  29. Наталья Буланова:

    А вот еще задачка. На блоге есть просто статьи, а есть рецепты. Как их разметить?

    Ответить
    • Виталий Кириллов:

      Думаю,что для этого надо создавать отдельные шаблоны для таких записей.

      Ответить
  30. Юлия:

    Виталий, подскажите,пожалуйста, а для главной страницы блога (index.php) нужно делать разметку?

    Ответить
    • Виталий Кириллов:

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

      Ответить
  31. kris:

    До разметки ингредиентов все получилось. А вот дальше… Ингредиенты у меня заключены в другой тег. Поменял тег в предложенном вами файле для functions.php , но валидатор не видит ингредиентов. Поменял в одном рецепте теги ингредиентов, сделал, как у вас в статье. Результат без изменений. В чем может быть причина?

    Ответить
    • Виталий Кириллов:

      Не могу сказать. Где-то ошибка.

      Ответить
      • kris:

        Забыл написать, что валидатор гугла все видит правильно, а у яндекса ничего нет.

        Ответить
  32. Максим:

    А я уже 3-й час ковыряю микроразметку, могу посоветовать всем новичкам, никогда не берите шаблон Twenty fourteen, потому как в нём всё запутано, и ни один из этих примеров не поможет. Придётся долго копаться в файлах, а если ваши познания хромают в программировании, то сделать это будет очень сложно.

    Ответить
  33. Мария Шутова, врач-косметолог:

    Здравствуйте, а почему надо снять галочку в пункте «Use Schema.org Markup» в плагине All in One SEO Pack? Я так понимаю, что эта галочка как раз указывает плагину на то, чтобы он использовал микроразметку Schema.org. Разве нет?

    Ответить
    • Виталий Кириллов:

      Здравствуйте! Дело дело в том, что плагин расставляет разметку не полностью, а только отдельные элементы. В общем валидатор выдаст вам кучу ошибок.

      Ответить
  34. Мария Шутова, врач-косметолог:

    Видимо, завалю я Вас вопросами, Виталий).
    У меня Header.php выглядит так:

    <a href="/»>

    Я правильно вставила код?

    Ответить
  35. Мария Шутова, врач-косметолог:

    </head>
    <body>
    <div id="art-main"itemscope itemtype="http://schema.org/WPHeader"
    >
    <div class="art-Sheet">
    <div class="art-Sheet-tl"></div>
    <div class="art-Sheet-tr"></div>
    <div class="art-Sheet-bl"></div>
    <div class="art-Sheet-br"></div>
    <div class="art-Sheet-tc"></div>
    <div class="art-Sheet-bc"></div>
    <div class="art-Sheet-cl"></div>
    <div class="art-Sheet-cr"></div>
    <div class="art-Sheet-cc"></div>
    <div class="art-Sheet-body">
    <div class="art-Header">
    <div class="art-Header-jpeg"></div>
    <div class="art-Logo">
    <h1 id="name-text" class="art-Logo-name">
    <a href="<?php echo get_option('home'); ?>/"><?php bloginfo('name'); ?></a></h1>
    <div id="slogan-text" class="art-Logo-text">
    <?php bloginfo('description'); ?></div>
    </div>

    Ответить
  36. Мария Шутова, врач-косметолог:

    У меня bloginfo description выглядит так:

    <div class="art-Header">
    <div class="art-Header-jpeg"></div>
    <div class="art-Logo">
    <h1 id="name-text" class="art-Logo-name">
    <a href="<?php echo get_option('home'); ?>/"><?php bloginfo('name'); ?></a></h1>
    <div id="slogan-text" class="art-Logo-text">
    <?php bloginfo('description'); ?></div>
    </div>

    Прямо перед ним нет тега , куда вставлять код? Перепробовала все возможные места), но в валидаторе Яндекса описания не появляется. Подскажите, пожалуйста, куда вставить код.

    Ответить
    • Виталий Кириллов:

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

      Ответить
  37. Мария Шутова, врач-косметолог:

    В конце концов, я сделала вот так:

    <div class="art-Header">
    <div class="art-Header-jpeg"></div>
    <div class="art-Logo">
    <h1 id="name-text" class="art-Logo-name">
    <a href="<?php echo get_option('home'); ?>/><?php bloginfo('name'); ?></a></h1>
    <div id="slogan-text" class="art-Logo-text">
    <h2 itemprop="description"><?php bloginfo('description');?></h2>
    </div>

    И вот, что пишет валидатор Яндекса: description =

    Ответить
    • Виталий Кириллов:

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

      Ответить
    • Баяс:

      «И вот, что пишет валидатор Яндекса: description =»

      Возможно у вас нет описания сайта в заголовке. Пройдите по адресу: Внешний вид- Заголовок и проверьте, скорей всего у вас там пустое поле.

      Ответить
  38. Екатерина:

    Спасибо.
    Статью и комментарии разметить получилось, а от главную страницу показывает только:

    wpheader
    itemType = http://schema.org/WPHeader
    image
    href = http://quilling-life.com/wp-content/uploads/2014/11/IMG_2.jpg
    text = Квиллинг

    Нет описания главной. Это нормально?

    Ответить
    • Виталий Кириллов:

      Екатерина, описание главной страницы — это описание сайта и оно должно быть.

      Ответить
      • Екатерина:

        в header.php прописала

        в коде описание есть

        Но яндекс не видит эту разметку описания. Почему так может быть?

        Ответить
        • Виталий Кириллов:

          Екатерина, значит что-то не правильно. Валидатор не ошибается.

          Ответить
  39. Екатерина:

    И еще от:

    microdata
    ОШИБКА: невозможно определить принадлежность данных полей. Возможны две причины: эти поля некорректно размещены, либо указан лишний атрибут itemprop
    itemType =
    image =

    Эта ошибка появляется после вставки кода для разметки картинок в functions.php

    Ответить
    • Виталий Кириллов:

      Микроразметка вещь не простая и требует некоторых знаний. В каждом случаи надо разбираться в отдельности. У меня к сожелению не хватит времени помочь всем желающим.

      Ответить
  40. kris:

    Здравствуйте. У меня почему-то валидатор гугла все видит, нет никаких ошибок. Яндекс же не видит разметку ингредиентов и описание приготовления. Как так, у гугла есть, а у яндекса нет.

    Ответить
    • Виталий Кириллов:

      Значит где-то ошибка.

      Ответить
  41. Константин:

    Здравствуйте Виталий! понравилась Ваша статья, тоже веду кулинарный блог и возникли вопросы по ходу пьесы так сказать)
    если ингредиенты написаны без списка Li как поступить?
    function mayak_image что значит mayak?
    можно переразметить только картинки для выдачи их в снипете?

    Ответить
    • Виталий Кириллов:

      Здравствуйте Константин!
      1. Вы давно смотрели выдачу Яндекса? Полюбопытствуйте. Фотки из снипетов убрали.
      2. А что значит image? )

      Ответить
  42. Дима:

    Здравствуйте. У меня значение headline такое же, как и description. Подскажите пожалуйста, как и где его можно поменять?

    Ответить
    • Виталий Кириллов:

      Админка -> Настройки -> Общие -> Краткое описание

      Ответить
      • Дима:

        Спасибо!

        Ответить
  43. Олеся:

    Ранее на своем кулинарном блоге я использовала плагин hRecipe, сейчас он почему то перестал работать, я его деактивировала и сделала разметку как описано в вашем посте, так теперь валидатор яндекса мои новые посты с рецептами, которые писались без плагина видит нормально, именно так как описано у вас, а вот старые посты, которые я писала с использованием плагина hRecipe, валидатор размечает дважды, т.е. первый раз идет разметка как у вас, а следом за ней разметка с использованием плагина.(при этом плагин деактивирован). Ошибок валидатор не выдает. Посоветуйте пожалуйста чем чревата такая двойственность и как ее возможно убрать?

    Ответить
    • Виталий Кириллов:

      Олеся, двойственность ничего хорошего не сулит, лучше тогда вообще без разметки. Некоторые плагины очень сложно удалить полностью, трудно найти все их корешки. С hRecipe я не знаком и мне сложно сказать наверняка. Думаю, что в базе данных плагином была создана отдельная таблица, проверьте.

      Ответить
      • Den:

        Виталий, подскажите мне с разметкой. Гугл выдает hatom-feed и
        hatom-entry, которые я хочу убрать. На сайте за эту разметку отвечает блок:

        <article id="post" >

        При его редактировании картинки перестают отображаться. Как его удалить?

        Ответить
        • Виталий Кириллов:

          Den, а файл post.php в шаблоне есть?

          Ответить
          • Den:

            Нету. За вывод этого блока отвечает файл content-single.php.Но еще есть single.php, который как я понял, вызывает header, сайдбара, блок комментов и футер.

            Ответить
            • Виталий Кириллов:

              Den, и что там в файле content-single.php?

              Ответить
              • Den:

                Вот такая строка

                Ответить
              • Den:

                article id=»post» class=»post-6990 post type-post status-publish format-standard hentry category-armrestling-texnika entry content entry_left

                Ответить
                • Виталий Кириллов:

                  Den, воспользуйтесь преобразователем, чтобы более четко отобразить код. Я думаю именно здесь собака зарыта.

                  Ответить
                  • Den:

                    Что такое преобразователь?

                    Ответить
                    • Виталий Кириллов:

                      Над формой комментирования есть кнопочка открыть преобразователь. Пропустите через него код и вставьте в комментарий.

                  • Den:

                    Преобразователь изменяет код. Выдает ерунду. Как убрать эту строку, чтобы изображения показывались, я понял. Проблема в том, что выводил картинки через шорт-код и там не было «<img src…, а было [img …

                    Теперь я вручную изменяю шорт-коды на нормальный html код. Печаль)
                    При замене все работает и hentry нет.

                    Ответить
  44. Олеся:

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

    Ответить
  45. Oleg:

    Неплохо описано, но непонятно требование делать description более 250 символов, при том, что ПС считают в среднем около 70 символов. Надо постараться воткнуть ключи в начало текстовки.

    Ответить
  46. Китаец:

    Жаль, что для форумов нет подходящей микроразметки. Хотя часть инфы можно выдернуть для форума.

    Ответить
  47. Ксенья Юрьевна:

    Какая ужасная статья! Я ее даже дочитать была не в состоянии, не то чтобы разобраться.Появляется желание вообще эти сайты бросить, так ведь втянулись, не оттащить. Где вы только научились всему этому?!

    Ответить
    • Виталий Кириллов:

      Терпение и труд все перетрут!

      Ответить
  48. Антон:

    Отличный мануал. Автору спасибо большое.

    Ответить
  49. Алена:

    Доброго времени суток.
    Спасибо за статью.
    Не понимаю, почему обновления в разметке можно отследить в лучшем случае на следующий день.
    Кэш почистила в WP Super Cache, в браузере, пробовала отключать плагин.
    Может, подскажете в чем может быть дело?

    Ответить
    • Виталий Кириллов:

      Здравствуйте Алена! Вы имеете в виду обновления исходного кода?

      Ответить
      • Алена:

        Разобралась с микроразметкой. Спасибо за подробную статью!

        Ответить
  50. Денис Андриевский:

    Спасибо за хорошую информацию. Я вот думал, что придется все теги вручную проставлять.
    Не могли бы вы немного подправить код скрипта для вставки тегов в список или фото для сайтов на другом движке или просто на пхп.

    Ответить
    • Виталий Кириллов:

      Здравствуйте Денис! Для того, чтобы подправить что-то на другом движке надо знать функции, которые отвечают за вывод той или иной информации. С WordPress я знаком хорошо, хуже обстоят дела с другими CMS, поэтому однозначно на Ваш вопрос ответить не могу.

      Ответить
      • Денис Андриевский:

        Целый день долбил searchengines? и вот решение найдено. Для тех у кого не wordpress:

        $переменная, в которой находится список ингредиентов = str_replace (‘<li', '<li itemprop="ingredients"', $переменная, в которой находится список ингридиентов);

        Код был мной поставлен прямо перед функцией printf

        Ответить
  51. Алексей:

    Виталий здравствуй! Как в комментариях оставить те стили что были раньше, а то имя и дата были напротив аватарки, а сейчас под аватаркой и еще появилось имя автора статьи около хлебных крошек? Спасибо за разметку.

    Ответить
  52. Евгений:

    Виталий здравствуйте! После вставки кода, для разметки комментариев, в файл functions.php пропал доступ к админ панели блога(экран стал белым). Пришлось через сервер удалять код и тогда доступ вернулся. Код у вас верно написан?

    Ответить
    • Виталий Кириллов:

      Евгений, php не терпит ошибок и если структура языка нарушена, то сайт не будет работать. История с белым экраном вполне типична для тех, кто только начал знакомство с php и я через это тоже проходил.
      Конечно код правильный и удивительно, что Вам в первую очередь не пришла мысль о том, что Вы что-то сами не так сделали.
      Скажите, Вы вставили функцию после php тега ?>, что находится в самом конце файла functions.php?
      Еще одна распространенная ошибка заключается в следующем. Многие новички вставляют код в файл functions.php, что находится в папке wp-includes.
      И еще, для работами с файлами на сервере, советую пользоваться FTP клиентом Notepad++, где есть функция «шаг назад».

      Ответить
      • Евгений:

        Да, я ошибся и вставил код до закрытия функции, однако, когда все исправил, ошибка трансформировалась. Во-первых: после размещения самого кода в functions.php без редактирования в comments.php ничего не произошло, код был принят нормально. Далее, после того, как вставил ‘callback=mayak_comment’ в comments.php произошло вот что с сайтом, раздела комментарии:
        savepic.su/4819911.png сбился шаблон, пропала кнопка «ответить»
        Вот что при этом выдал валидатор микроразметки яндекса:
        savepic.su/4838343.png
        Ошибок размещения кодов при этом я делал и был внимателен.

        Ответить
        • Виталий Кириллов:

          Евгений все шаблоны разные и возможно у Вас уже подключена похожая функция, которая была внедрена разработчиками шаблона. Приведите мне полный код подключения функции в файле comments.php.

          Ответить
          • Евгений:

            Сюда выложил код в файле:

            Ответить
            • Виталий Кириллов:

              Евгений я не стал публиковать ссылку, так как не стоит выкладывать файлы php для общего доступа.
              Как я и ожидал, у Вас уже подключена функция, которая называется et_custom_comments_display и скорее всего живет в файле functions.php. Также к данной функции подключены свои стили, поэтому и происходит деформация зоны комментариев, когда вы вставляете мою функцию.
              В общем Евгений, микроразметка не такая простая вещь и надо иметь хотя бы базовые знания в программировании, чтобы реализовывать это самостоятельно.

              Ответить
  53. Павел:

    Виталий здравствуйте! Сделал все как Вы писали, но у меня почему-то отсутствует название блога в микроразметке шапке (headline=….), после равно отсутствует название моего блога. Подскажите, что не так сделал.

    Ответить
    • Виталий Кириллов:

      Ну наверное вы не разметили название, или сделали это с ошибкой. Мне трудно сказать не видя Ваших движений.

      Ответить
  54. Павел:

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

    Ответить
    • Виталий Кириллов:

      Павел, встречный вопрос, а зачем его скрывать?

      Ответить
  55. Алена:

    Виталий, я, как новичок, не совсем «в теме», как говорится. У меня два вопроса.
    Для главной тег издателя подтвержден, зато беда с микроразметкой.
    Яндекс: поле ingredients не определено в спецификации schema.org/WPHeader
    Гугл: Ошибка. Page contains property «ingredients» which is not part of the schema.
    Действительно, они не понимают, что размещено на главной (последние записи)
    Посмотрела другие кулинарные сайты. У них микроразметки на главной вообще нет, в большинстве случаев. Не поняла, почему. Я думаю, что нужно создать статическую главную страницу с соответствующей микроразметкой или есть другой вариант?
    Второй вопрос: есть смысл размещать тег издателя в каждой записи? У меня в записях тег издателя не подтвержден

    Ответить
    • Виталий Кириллов:

      Алена, дело в том, что у Вас ingredients попадают в анонсы рецептов, которые отображаются на главной странице, от этого и ошибка. Переставьте тег more так, чтобы ingredients отображались только в теле самого рецепта. На всякий случай еще раз скажу. На главной странице, размечается только шапка!

      Ответить
      • Алена:

        Спасибо за ответ Виталий.
        Тэги переставлю. С остальным разберусь позже

        Ответить
  56. Петр:

    Добрый день! Подумывал использовать микроразметку на своём кулинарном сайте, нашёл Вашу статью. А потом посмотрел выдачу и возникло ощущение, что Яндекс убрал расширенные сниппеты для рецептов. Так ли это? И имеет ли смысл использовать микроразметку рецептов для Яндекса сейчас? Заранее благодарю.

    Ответить
    • Виталий Кириллов:

      Здравствуйте Петр! Яндекс дайствительно убрал расширенные снипеты, но микроразметку есть смысл использовать в любом случаи.

      Ответить
  57. Дмитрий:

    Здравствуйте. По поводу правки микроразметки комментариев. У меня вот такой код — wp_list_comments( array( ‘callback’ => ‘ashford_comment’ ) );

    Подскажите, как правильно вставить ваш код — callback=mayak_comment
    Вставлял по разному и получал 2 эффекта: либо комментарии все удалялись вместе с формой. Либо комментарии удалялись, но форма для новых комментариев была.

    Ответить
    • Виталий Кириллов:

      Здравствуйте Дмитрий! Ван надо просто заменить ashford_comment на mayak_comment. В общем функция может выглядеть так:

      wp_list_comments( array( ‘callback’ => ‘mayak_comment’ ) );
      

      Или так:

      wp_list_comments('callback=mayak_comment'); 
      

      Дело в том, что в вашем шаблоне, разработчики прописали свою функцию вывода комментариев ashford_comment и в ней заданны css классы, поэтому и происходит деформация зоны комментариев, когда вы пытаетесь прицепить мою функцию. Тут надо или новые стили задавать или переподчинить уже имеющиеся.

      Также есть возможность перенести микроразметку на функцию ashford_comment.

      Ответить
      • Дмитрий:

        Попробовал. Вроде сработало. Была проблема с датой небольшая. Пока её не пробовал устронить. Так же стили немного поменялись. Вы хорошо разбираетесь с микроразметкой. Может сможете перенести её на мою функцию или стили переподчинить, чтобы валидатор не показывал ошибки и стили оформления сохранились. Например, за денюжку. А то я не силён в этом. Буду ковыряться целый день)

        Ответить
        • Виталий Кириллов:

          Дмитрий, напишите мне через форму обратной связи, обсудим.

          Ответить
  58. Андрей:

    Виталий, не подскажите как в поиске убрать дату публикации. Но в тоже время оставить код itemprop=»datePublished» в микроразметке сайта.

    Ответить
    • Виталий Кириллов:

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

      Ответить
  59. Мария:

    Виталий, а для вордпресс не решает ли проблему валидной разметки плагин schema creator settings?

    Ответить
    • Виталий Кириллов:

      Мария, валидность вещь очень тонкая! Что не валидно для XHTML 1.0 Transitional, вполне валидно для XHTML 1.1. Насчет плагина не знаю, попробуйте.

      Ответить
      • Мария:

        СОгласна с вами Сергей, но может какая то общая схема, например «Как прокачать WP для поисковиков оптимально, быстро, просто»
        А моя неблондинистая голова и взорваться может 😀

        Ответить
  60. Роман:

    Виталий здравствуйте. Подскажите пожалуйста: У меня строка вывода коммента вот такая:
    <?php wp_list_comments('type=all&callback=art_comment'); ?>
    Я добавляю callback=mayak_comment
    И получается вот так
    <?php wp_list_comments('type=all&callback=art_comment&callback=mayak_comment'); ?>
    Но после этой манипуляции комментарий на заднем плане шаблона.
    Если прописываю <?php wp_list_comments('callback=mayak_comment'); ?> Яндекс ругается: «vcard ПРЕДУПРЕЖДЕНИЕ: кажется, ваша разметка hCard описывает не организацию (поля fn и org не совпадают). В данный момент такая разметка не поддерживается Яндексом»
    Что делать?

    Ответить
    • Виталий Кириллов:

      Здравствуйте Роман! Прежде чем прописывать вызов функции <?php wp_list_comments('callback=mayak_comment'); ?>, надо вставить саму функцию в файл functions.php. Надеюсь вы это сделали?

      Ответить
      • Роман:

        Конечно сделал.

        Ответить
        • Виталий Кириллов:

          Мне трудно давать советы в слепую, но что моя функция прошла все валидаторы — факт! Ищите, где-то ошибка! Если не найдете, пишите в личку, на платной основе поищем вместе.

          Ответить
  61. Роман:

    А может быть проблемма через два «callback»? т.к. проблемма только в этой строке.

    Ответить
    • Роман:

      Кстати проблемма на 2-х разных сайтах с разными шаблонами.

      Ответить
      • Виталий Кириллов:

        Роман, php довольно не простой язык и проблемы у новичков возникают всегда, но это не значит, что моя функция не работает)

        Ответить
    • Виталий Кириллов:

      Два callback быть не должно, подключаться может только одна функция.

      Ответить
  62. Роман:

    Виталий, подскажите еще пожалуйста, если у меня теги выступают ингредиентами — как правильно код поправить ?

    Ответить
    • Виталий Кириллов:

      Роман, я не понял, что значит теги выступают ингредиентами?

      Ответить
      • Роман:

        Ну на одном из сайтов у меня много материалов и ингредиенты не прописаны через , но они прописаны как теги (метки).

        Ответить
        • Роман:

          Есть идеи, или вы дальше не понимаете суть вопроса ?))

          Ответить
          • Виталий Кириллов:

            Роман, идеи должны быть у Вас а не у меня!

            Ответить
            • Роман:

              Виталий, извините но я слаб в этом деле. Я хочу что-бы вы подсказали что в этом коде
              function mayak_text_description($content){
              return $content. '</span>';}
              function mayak_recipeInstructions($the_content) {
              global $post;
              $the_content=preg_replace('#<h3(.*?)</h3>#','<h3\1</h3><span itemprop="recipeInstructions">',$the_content);
              return $the_content;}
              add_filter('the_content', 'mayak_recipeInstructions');
              add_filter('the_content', 'mayak_text_description');
              Нужно поменять чтобы выводились ингредиенты не из <li> </li> а из меток. Спасибо.

              Ответить
              • Виталий Кириллов:

                Роман, а вы функции не попутали? Совет, заплатите деньги специалисту (я говорю не про себя) и не мучайтесь или просто откажитесь от данной затеи до тех пор, пока не наберетесь знаний.

                Ответить
                • Роман:

                  Да, действительно — я имел в виду этот код
                  function mayak_ingredients($content) {
                  global $post;
                  $pattern = "<li";
                  $replacement = '<li itemprop="ingredients"';
                  $content = str_replace($pattern, $replacement, $content);
                  return $content;
                  }
                  add_filter('the_content', 'mayak_ingredients');
                  Но думаю вы и так поняли. Там поменять нужно мелочь (я так думаю(несколько вариантов попробовал — не помогло)), но вижу вы не знаете? или просто не хотите сказать?

                  Ответить
                  • Виталий Кириллов:

                    Роман, я действительно пока не знаю, надо проводить эксперименты, а не имею столько свободного времени на это, так как даже с платными заказами не успеваю… Надеюсь на Ваше понимание.

                    Ответить
  63. Алена:

    Доброго времени суток, Виталий.
    С микроразметкой разобралась в конце января.
    Сейчас случайно обнаружила, что картинки не соответствуют названию.
    В валидаторе все ОК.
    Изображения пришлось разметить для каждой записи, т.к. у меня стоит плагин вывода похожих записей.
    Несколько дней на сайте стояла функция для микроразметки изображений и она выводила в сниппет фото последней похожей записи (это было в январе).
    Что посоветуете? Думаю, для начала опубликовать посты со ссылками на эти записи в Твиттере и Сабскрайб.

    Ответить
  64. Евгений:

    Виталий, добрый день! Занимаюсь микроразметкой на своем сайте, пока разметил записи и страницы, но вот возник один вопрос: для внедрения микроразметки в дату публикации статьи обязательно нужно соблюдать формат времени «Y-m-d», просто у меня формат немного другой, есть ли варианты решения этого вопроса?

    Ответить
    • Виталий Кириллов:

      Здравствуйте Евгений! Формат времени придется сменить, иначе валидатор будет выдавать ошибку.

      Ответить
  65. Роман:

    А у меня при внедрении кода «recipeInstructions» не отображается. Да и если код не приписывать валидатор ошибки не выдает. В чем проблемма ?

    Ответить
  66. Svetlana:

    Виталий, спасибо! Описано просто и понятно. Раньше я выборочно в сами записи вставляла разметку, но этот вариант реально лучше. Единственное я вручную в рецепте еще указывала итоговую фотографию, с помощью itemprop=»resultPhoto».
    Можно ли это внедрить как-то с помощью кода. К примеру чтобы первая фотография в рецепте помечалась как resultPhoto?

    Ответить
    • Виталий Кириллов:

      Swetlana, думаю можно но с ходу конечно не могу вам выдать функцию. Вы наверное понимаете, что я не могу писать функции под каждого.

      Ответить
  67. Надежда:

    Может можно как то плагином решить вопрос микроразметки? А то уж очень сложно

    Ответить
    • Виталий Кириллов:

      Надежда, плагин какой-то есть, но он не уберет все ошибки в валидаторе, да и неудобный он.

      Ответить
  68. Андрей:

    Здравствуйте! Скажите, актуальна ли ваша инструкция сейчас для того чтобы на моем кулинарном блоге на WP в выдаче яндекса отображались фото рецептов?

    Ответить
    • Виталий Кириллов:

      Здравствуйте Андрей! В Яндексе сейчас отображается всего одна фотка с рецепта. Да, инструкция актуальна!

      Ответить
  69. Надежда:

    как тут с разметкой автора быть подскажите пжста

    Ответить
  70. Надежда:

    <?php
    $get_author_bio = get_theme_option('author_bio_on'); if($get_author_bio == 'Enable'):
    get_template_part( 'lib/templates/author-bio' );
    endif
    ?>

    Ответить
    • Виталий Кириллов:

      Надежда, прежде всего прочитайте мою статью про функцию get_template_part(). Если останутся вопросы, буду готов выслушать.

      Ответить
  71. Надежда:

    Здравствуйте, Виталий. Спасибо, что отвечали на мои вопросы, у меня кажется все получилось, если нетрудно, посмотрите, оцените так сказать, может быть еще что-то надо сделать, наверно вы заняты

    Ответить
  72. Андрей:

    Сделал все по вашей инструкции, все получилось с первого раза)))), круто!!!

    Но возник вопрос по фото, в яндексе сейчас отображается только одно фото, у вас в инструкции написана функция как сделать чтобы ко всем фото добавилась разметка itemprop=»image», скажите при такой разметке яндекс будет брать первую фотку и показывать ее в сниппете или к первой фото нужно обязательно добавить resultPhoto?

    По сути ведь не нужно размечать все фото, а добавить resultPhoto только к первой, остальные ведь в расширенном сниппете не отображаются. У вас есть какая-то функция для добавления resultPhoto ко всем первым фото всех рецептов?

    Еще скажите а эта разметка и для гугла работает?

    Блог однозначно в закладки, стока крутой инфы)

    Ответить
    • Виталий Кириллов:

      Андрей itemprop=»image» будет достаточно для вывода фото в сниппет. Для Гугла тоже должно работать.

      Ответить
      • Андрей:

        Виталий, если к каждой фото добавить itemprop=»image», то какая из всех фото будет отображаться в сниппете?

        И для чего тогда нужен resultPhoto если все и без него работает как вы говорите?

        Ответить
        • Виталий Кириллов:

          На моем кулинарном сайте dommenu.ru стоит разметка itemprop=»image» и фото в сниппете. Да я так говорю, но это не значит, что resultPhoto бесполезно. Если бы вы вежливо попросили, то возможно я бы привел функцию в ответе на комментарий, после того, как над ней поработал, а теперь, даже не знаю…
          Посмотреть можно тут

          Ответить
          • Андрей:

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

            Ответить
      • Роман:

        К сожелению в гугле не работает. Или может больше времени нужно ?

        Ответить
        • Виталий Кириллов:

          В Гугле 100% работает!

          Ответить
  73. Надежда:

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

    Ответить
    • Виталий Кириллов:

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

      Ответить
    • Роман:

      Да, я так понимаю это связано с праздниками. У меня тоже посещаемость выросла в разы, а потом упала ниже чем была (((

      Ответить
  74. Максим Козлов:

    Хорошая статья, я раньше этого и не знал

    Ответить
  75. Alina:

    Огромное спасибо Вам за статью! Все замечательно работает!))
    Только вот возник вопрос по поводу recipeInstructions. В написании функций к сожалению не разбираюсь(. В теле рецепта 2 тэга h2. Можно ли прописать функцию таким образом, чтобы recipeInstructions считывался после второго тэга h2?

    Ответить
    • Виталий Кириллов:

      Alina, а не проще теги поменять…

      Ответить
      • Alina:

        так в каждой статье придется менять) я их вручную проставляю, если б раньше знала, сделала бы один тэг h2))

        Ответить
        • Виталий Кириллов:

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

          Ответить
          • Alina:

            Большое спасибо за совет, буду переделывать. И отдельное спасибо за скорость ответа) Очень приятный у вас блог, на который хочется возвращаться)

            Ответить
          • Игорь:

            Здравствуйте, Виталий!
            Я сменил шаблон и начал делать разметку, но почему то выходит такая ошибка:
            …microdata
            ОШИБКА: невозможно определить принадлежность данных полей. Возможны две причины: эти поля некорректно размещены, либо указан лишний атрибут itemprop

            itemType =
            name = Диетическое куриное филе в духовке…
            Не отражается schema.org/Recipe
            На этом шаблоне есть еще один сайт и там все в порядке он не кулинарный, но разметка в валидаторе отражается:

            itemType = schema.org/Article
            name = Усть-Ленский государственный…

            A файле single я просто заменил schema.org/Article на schema.org/Recipe
            Результата нет ((((

            Ответить
            • Виталий Кириллов:

              Ошибка с микродатой обычно возникает из-за неправильного формата даты в микроразметке. Поддерживаемый формат выглядит так: (Y-m-d).
              Не отражается schema.org/Recipe, хм, точно не могу сказать, но возможно надо поменять месторасположение библиотеки в файле single.

              Ответить
              • Игорь:

                Уже все сделал, поставил в другой класс и проблема исчезла. Просто стало интересна почему другая разметка так работала, а это не нет.

                Ответить
  76. Роман:

    Сейчас у меня появилась ошибка в яндексе
    article ОШИБКА: В свойстве content тега meta не может содержаться ссылка
    Как исправить ?

    Ответить
    • Роман:

      Так как решить ?

      Ответить
      • Виталий Кириллов:

        Уберите ссылку из meta content.

        Ответить
  77. янис:

    Приветствую! Василий, вот эта строчка в разметке комментариев:
    ….( ‘Your comment is awaiting moderation.’ )… Ее же лучше наверное на русский перевести?

    Ответить
  78. янис:

    Извиняюсь, Виталий.

    Ответить
  79. янис:

    Виталий, я пробовал по твоему коду разметку комментариев, ни фига не хочет работать. Все равно в Яндексе выдает ошибку vcard. Я даже переименовывал vcard в comment-template.php — бесполезно. У меня есть такая хрень как hentry, может из-за нее не получается? hentry отвечает за автора и дату статьи, но не комментариев, что-то странно…

    Ответить
    • Виталий Кириллов:

      Здравствуйте Янис! В исходном коде я не нашел элементы Schema.org в зоне комментариев, это значит что функция не была подключена или не работает, проверьте правильность подключения. Функция post_class(); тоже дает ошибку, об этом подробней здесь.

      Ответить
      • янис:

        Я убрал ваш код — насчет комментариев! Почему убрал? В Гугле этот код показывал все норм — user comments вместо vcard, при этом hentry также присутствовало, а Яндексу пофиг — не отключает этот код vcard! Видел решение вопроса у М.Зайцева, тока там перед обновлением вордпресс надо скопировать. Ну это ерунда, вот буду пробовать…

        Ответить
  80. Андрей Зимин:

    Добрый день, Виталий. Идея с кодом комментариев хорошая. Я настроил всю микроразметку, кроме комментариев, но когда вставляю ваш код в функции, сносит весь блог. Пока не восстановишь файл функций. Почему это? Хотелось бы знать? Нельзя это как нибудь исправить? Заранее благодарен за ответ.

    Ответить
    • Виталий Кириллов:

      Здравствуйте Андрей! А Вы мою функцию вставляете после знака «?>» или до?

      Ответить
  81. Андрей Зимин:

    Вы же сказали Виталий после, поэтому после.

    Ответить
    • Виталий Кириллов:

      Какой-то конфликт происходит. Функция рабочая, проверенная тысячу раз. Часто встречается ситуация, когда разработчики шаблона внедряют собственную функцию вывода комментариев на сайте.

      Ответить
      • Константин:

        Здравствуйте. А вы не подскажите, как определить функцию, которую внедряют разработчики, чтобы самому подредактировать ваш код под нее? Спасибо.

        Ответить
        • Виталий Кириллов:

          Здравствуйте Константин! В файле comments.php найдите такую функцию

          <?php wp_list_comments('callback=mayak_comment'); ?>
          

          Вместо mayak_comment у должно быть вписано другое название. Это и есть название функции, прописанной разработчиками шаблона. Ищите функцию с точно таким названием в файле functions.php.

          Ответить
  82. Игорь:

    Здравствуйте,
    Поменялись стандарты и теперь выдает ошибку:
    ПРЕДУПРЕЖДЕНИЕ: поле comment содержит некорректный тип данных schema.org/UserComments. Допустимые типы данных schema.org/Comment

    Исправьте пожалуйста код в статье

    Ответить
    • Виталий Кириллов:

      Спасибо Игорь! Уже поправил код.

      Ответить
  83. Егор:

    Здравствуйте. У меня такой вопросик. А если я применяю itemscope itemtype=»http://schema.org/Blog» к head? Где находятся все мета теги. Правильно ли это? Валидаторы разметки не ругаются. Ну то-есть все содержимое сайта — блог.

    Ответить
    • Виталий Кириллов:

      Здравствуйте Егор! Думаю можно и так, раз валидаторы не ругаются.

      Ответить
  84. Андрей:

    Здравствуйте, Виталий. За последнее решение с разметкой комментариев огромное спасибо! Я раньше просто изменял название vcard, убирая первую букву, чтобы Яндекс не распознавал этот кусок кода как разметку. Но ваше решение выше всяких похвал.

    Ответить
    • Виталий Кириллов:

      Спасибо Андрей на добром слове…

      Ответить
  85. Александр:

    Здравствуйте Виталий! Помогите в моем вопросе, яндекс по микроразметке для статей показывает «article
    ПРЕДУПРЕЖДЕНИЕ: Не выполнено обязательное условие для структурированных сниппетов творческих работ: поле description или articleBody отсутствует или пусто
    itemType = http://schema.org/Article» Хотя стоит плагин All in One Seo Pack и есть описание к каждой статье есть описание, когда проверяеш код страницы тоже есть, а вот в яндекс микроразметке нет
    когда прописываю itemType = http://schema.org/Article» как в вашей статье , то появляется еще одна точно такая же ошибка

    Ответить
    • Виталий Кириллов:

      Александр, надо обернуть в span и пометить description или articleBody пару первых абзацев текста, тогда ошибка пропадет.

      Ответить
      • Александр:

        а для чего тогда плагин All in One Seo Pack, ведь там же уникальное описание статьи, а не копия, можно как то связать description с плагина для микроразметки

        Ответить
        • Виталий Кириллов:

          Александр, причем тут плагин All in One Seo Pack? Вам надо разметить первых 2 — 3 абзаца с помощью элемента микроразметки:

          <span itemprop="description">
          <p>Текст</p>
          <p>Текст</p>
          <p>Текст</p>
          </span>
          

          Сделать это можно с помощью функции:

          function mayak_text_description($content){
          return '<span itemprop="description">' .$content;
          }
          function mayak_span_end_content( $content ) {
                  if( !is_single() )
                      return $content;
                      $paragraphAfter = 3;
                      $content = explode ( "</p>", $content );
                      $new_content = '';
                          for ( $i = 0; $i < count ( $content ); $i ++ ) {
                              if ( $i == $paragraphAfter ) {
                              $new_content .= '</span>';
                              }
                      $new_content .= $content[$i] . "</p>";
                      }
                      return $new_content;
              }
          add_filter('the_content', 'mayak_text_description');
          add_filter( 'the_content', 'mayak_span_end_content' );
          

          Удачи!

          Ответить
          • Александр:

            Проблема осталась, появилась новая ошибка microdata
            ОШИБКА: невозможно определить принадлежность данных полей. Возможны две причины: эти поля некорректно размещены, либо указан лишний атрибут itemprop

            Ответить
            • Александр:

              Нашел причину!itemtype=»http://schema.org/Article» было прописано в плагине wp-postratings, удалил и ошибка пропала

              Ответить
  86. Evgeniy:

    Здравствуйте, Виталий.
    Основной упор на продвижение своего блога, планирую организовать через SMO, но прежде, хочется оптимизировать содержимое под SEO. В общем для этого дела установил плагины All in One Seo Pack, а также All In One Schema.org Rich Snippets. Но в итоге снес последний, т.к. мне не понравилось то, что при его использовании, он формирует уродливую таблицу на странице записи, которая портит внешний вид.
    В общем посе этого стал искать решения своей проблемы и наткнулся на Ваш замечательный ресурс (добавил в закладки, буду изучать).
    Собственно на данный момент, у меня несколько вопросов, по внедрению разметки Schema.org
    Во-первых, при проверки в валидаторе Яндекса, у меня не появляется, сообщения об отсутствии разметки, а выводится следующий текст:

    rdfanode
    og
    ОШИБКА: поле http://ogp.me/ns#type отсутствует или пусто
    http://ogp.me/ns#title
    @value = Borncook.com - blog about the art of cooking delicious food.
    http://ogp.me/ns#url
    @value = http://borncook.com/
    http://ogp.me/ns#image
    @value = http://borncook.com/wp-content/plugins/all-in-one-seo-pack/images/default-user-image.png
    http://ogp.me/ns#site_name
    @value = Borncook.com - blog about the art of cooking delicious food.
    twitter
    http://dev.twitter.com/cards/markup#card
    @value = summary

    Во-вторых: я не смог понять, где мне нужно внести изменения в header.php в моём шаблоне.
    Пжл, помогите разобраться!

    Ответить
  87. Данил:

    Спасибо, а что это за ошибки, кто в курсе?

    i11.pixs.ru/storage/0/9/8/Screenshot_9506822_19012098.png

    Ответить
  88. Алексей:

    Подскажите пожалуйста как можно отфильтровать изображения для разметки. К примеру что б бралось первое или последнее или изображение с атрибутом title к примеру.

    Ответить
    • Виталий Кириллов:

      К сожалению, такого решения я не знаю.

      Ответить
  89. Odessit:

    Вопрос на засыпку, обязательно ли для главной страницы делать микроразметку? Я её делаю для статей чтоб была миниатюра, ну и ингредиенты если что. Имя и инструкция тоже как я понимаю необязательны, валидатор яндекса не просит инструкцию, а в сниппете она все равно не отображается.
    Описание как я понимаю тоже не идёт в сниппет? В микроразметку мы ж его не добавляем?

    Ответить
    • Виталий Кириллов:

      Если Вы имеете в виду билилиотеку itemtype=»http://schema.org/WPHeader», то это разметка шапки сайта, а не главной страницы. Можно данную библиотеку и не применять, по-моему валидатор не ругается.

      Ответить
      • Odessit:

        Да, я получается пропустил полностью разметку шапки сайта и сделал только разметку страницы записи, валидатор не ругается, правда я пропустил и автора, но валидатор его не требует, а оно мне вроде как особо и не надо))))
        Не подскажете через сколько сниппет изменится в Гугле и Яндексе? А то пока сделал ради интереса только одну страницу и пока тишина. С Яндексом понятно, а Гугл как долго может обновляться? Спасибо.

        Ответить
        • Виталий Кириллов:

          Для все сайтов по разному.

          Ответить
  90. Павел:

    Добрый день. У меня несколько вопросов по микроразметке schema.org.
    1. На странице помощи у Вас перечислены схемы, которые поддерживает Яндекс: https://yandex.ru/support/webmaster/schema-org/what-is-schema-org.xml.
    Вопрос: стоит ли использовать на сайте для микроразметки другие сущности, которых нет в этом списке Яндекса (к примеру, Article, User comments и т.д.)? Будет ли как-то различать их поисковый робот или для него это просто будет лишним кодом на странице?
    2. У схемы «Article» есть поле «description». Будет ли содержимое этого поля как-то влиять на сниппет статьи в поисковой выдаче? Или лучше не ставить на сайт эту схему микроразметки schema.org и использовать обычный мета тег «description» как более действенный инструмент влияния на выдачу в сниппете?
    3. На одной странице есть статья и под ней комментарии. Если для статьи использовать схему «article», а для комментариев «user comments», то будет ли их разделять поисковый робот? Или для него все равно комментарии будут продолжением статьи?
    Большое спасибо!!

    Ответить
    • Виталий Кириллов:

      Здравствуйте!
      1. Вам все покажет валидатор, как работ различать данные библиотеки.
      2. Текст description вполне может попасть в сниппет, также как и не попасть. Здесь от запроса многое зависит.
      3. Поисковики выделяют отдельных роботов для работы с комментариями.

      Ответить
  91. Артём:

    Здравствуйте, Виталий!
    Разметка на вашем сайте помогла указать роботу, какой контент важен и что он значит. А разметка помогла составить сниппеты для поисковых систем?

    Ответить
    • Виталий Кириллов:

      Здравствуйте Артем! Да конечно, особенно это ярко выражено на кулинарном блоге.

      Ответить
  92. Эйлат:

    Здравствуйте, Виталий.
    Валидатор микроразметки Яндекса показывает одну ошибку на моем сайте:
    microdata
    ОШИБКА: невозможно определить принадлежность данных полей. Возможны две причины: эти поля некорректно размещены, либо указан лишний атрибут itemprop
    itemType =
    description = тут идет описание
    keywords = тут ключевые слова

    Нужно вместо
    вставить ?
    И как быть с keywords? Единственная строка в header.php где упоминается keywords выглядит так:
    <input type="search" class="search-field" placeholder="» value=»» name=»s» title=»» />

    И еще нескромный вопрос — откуда у Вас такая хорошая посещаемость? Директ? Мне бы хоть половину от таковой…

    Ответить
    • Виталий Кириллов:

      Здравствуйте Эйлат!
      Ошибка microdata встречается довольно часто и причины вы основном в неправильном размещении элементов микроразметки. Еще такая ошибка возникает при включенной опции микроразметки в плагине All in One SEO Pack.

      Ответить
  93. Эйлат:

    Попробую преобразовать в html сущность

    В предыдущем комментарии

    Нужно вместо
    <h2 class="description"><?php bloginfo( 'description' ); ?></h2>

    вставить

    <h2 itemprop="description" class="description"><?php bloginfo( 'description' ); ?></h2> ?

    Ответить
  94. Татьяна:

    Здравствуйте, Виталий!
    И вновь ваша статья помогла мне. На этот раз с микроразметкой. Не знала, как разметить фотографии, которых у меня на блоге в каждой статье в среднем 15 штук. Нашла у Вас скрипт, который с первого раза вписался в структуру моего блога:) Спасибо Вам за него!
    А вот с разметкой даты пока не справилась…

    Ответить
  95. Bahus:

    Что делать, если код исправления микроразметки комментариев в functions.php приводит к внутренней ошибке 500?

    Ответить
  96. Дмитрий:

    Добрый день, Виталий!
    Пытаюсь создать разметку навигационного меню в шапке, но не выходит — не могу понять где вписывать itemprop=»url» и «name». Функция ссылается на некое ‘primary-menu’ где его искать-не понятно.
    Хотел бы попросить помочь с этим.
    Заранее спасибо!

    Ответить
    • Виталий Кириллов:

      Дмитрий, шаблоны все разные и itemprop=»url» ставится в ссылку, которая одновременно является заголовком сайта.

      Ответить
  97. Алексей:

    Здравствуйте! Подскажите пожалуйста Проверка выдает
    blog
    ПРЕДУПРЕЖДЕНИЕ: Не выполнено обязательное условие для структурированных сниппетов творческих работ: поле description или articleBody отсутствует или пусто
    itemType = http://schema.org/Blog

    Как можно исправить?

    Ответить
    • Виталий Кириллов:

      Здравствуйте Алексей! Вот из этого комментария функцию вставьте в файл functions.php Вашей темы.

      Ответить
      • Алексей:

        не сработало с этой функцией

        Ответить
  98. Алексей:

    подскажите где можно использовать itemType = http://schema.org/Blog

    Ответить
  99. Алексей:

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

    image [ImageObject]:

    height: отсутствует (обязательное)

    url: отсутствует (обязательное)

    width: отсутствует (обязательное)

    Для image указан недопустимый URL.

    publisher: отсутствует (обязательное)

    dateModified: отсутствует (рекомендуется)

    mainEntityOfPage: отсутствует (рекомендуется)

    Ответить
    • Виталий Кириллов:

      Алексей, пока ответить нечего, разбираюсь.

      Ответить
  100. дима:

    При проверке структурированных данных возникает сообщение:

    Необходимо указать значение для поля logo.
    Требуется:
    Статьи об ускоренных мобильных страницах(Что это?)

    Ответить
    • Виталий Кириллов:

      Дима, вышло обновление микроразметки, пока разбираюсь.

      Ответить
  101. Егор:

    Здравствуйте Виталий. Что с разметкой творится? Они достали короче. Я уже не знаю как исправлять. Неделю назад все ровно было, а теперь ошибки повылазили. У вас посмотрел, абсолютно такие же ошибки. В Google все неровно стало. В Яндексе пока не обновилась разметка.

    Ответить
    • Виталий Кириллов:

      Здравствуйте Егор! И не говори, задолбали не то слово. Вышло обновление schema.org от 9 декабря, да еще WordPress добавил масло в огонь, изменив урлы изображений. В общем теперь есть чем заняться, пока разбираюсь.

      Ответить
  102. Валентин:

    Виталий, здравствуйте, у вас вируса нет на блоге? А то заходя к вам из поиска мне автоматом скачался какой-то файл, я его удалил сразу, проверьте.

    Ответить
    • Виталий Кириллов:

      Здравствуйте Валентин! Спасибо за предупреждение. Сделал тщательную проверку, пока ничего не обнаружил, но если вдруг такое повториться, вы мне обязательно дайте знать.

      Ответить
  103. Виталий Кириллов:

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

    Ответить
    • Алексей:

      здравствуйте Виталий а не подскажите разметку для гугла что у вас получилось У меня сайт только под гугл в яндексе под фильтром

      Ответить
      • Виталий Кириллов:

        Здравствуйте Алексей! Я делал разметку для библиотеки itemscope itemtype="http://schema.org/Article", Вы какую используете?

        Ответить
        • Алексей:

          такуюже

          Ответить
          • Виталий Кириллов:

            Хорошо Алексей, начинаю писать статью, так как в рамках комментария всего не расскажешь, может еще кому пригодится.

            Ответить
            • Алексей:

              Доброе время суток Виталий! Как скоро можно будет ее прочесть?

              Ответить
              • Виталий Кириллов:

                Уже можно прочесть, вы бы на обновления что ли подписались.

                Ответить
                • Алексей:

                  Огромное спасибо за ваш труд! На обновления вроде подписывался Ещё запишусь

                  Ответить
  104. Егор:

    Здравствуйте. Ну у кого доменное имя US, те пусть и меняют.

    Ответить
  105. Сергей:

    У меня вопрос относительно микроразметки к комментариям. У меня в файле comments.php вместо , стоит и потому валидатор ругается.

    Скажите как мне внедрить разметки в комментарии

    Ответить
  106. Максим:

    Добрый день!
    А что делать если header.php нет строки о description?

    Ответить
    • Виталий Кириллов:

      Так можно создать.

      Ответить
      • Максим:

        а не подскажете как?) я дилетант
        /**/ если вставить что то подобное, ничего не испорчу?
        Я просто не могу понять, если можно в консоли вордпресс добавить опсиание сайта, т.е. description, то почему нет инфы о нем в шаблоне

        Ответить
        • Максим:

          <h2><?php bloginfo('description'); ?></h2>

          Ответить
          • Виталий Кириллов:

            Инфа с seo плагина выводится в исходный код, а тут идет речь о видимом описании сайта. Вы выбрали нужную функцию! Может что-нибудь съехать, но это поправить можно, и не обязательно в h2 оборачивать, можно просто в тег p.

            Ответить
  107. Максим:

    По поводу микроразметки картинок: для отдельной статьи все ок, валидатор не ругается
    Но когда запихиваешь главную страницу в валидатор на проверку, то появляется ошибка:

    microdata
    ОШИБКА: невозможно определить принадлежность данных полей. Возможны две причины: эти поля некорректно размещены, либо указан лишний атрибут itemprop
    itemType =
    image
    href = http://localhost/blog/wp-content/uploads/2016/01/Image0.jpg
    text = Image0

    как быть?)

    Ответить
    • Виталий Кириллов:

      Как по мне, так для главной достаточно разметки в шапке.

      Ответить
      • Александр:

        Да я знаю. У меня так и было сделано, но после обновления гуглом микроразметки. Почему то именно на кол-во комментариев стал ругатся гугл и яндекс. Как я понял это потому что комменатарии у меня существует отдельно. Как мне все это объеденить?

        Ответить
  108. Александр:

    Отличная статья, мне кое что из нее очень помогло, но вот есть одно но… Код для разметки комментариев вставляю в файл функций после закрывающего тега, обновляю страницу блога и выдает ошибку 500, вставляю по другому тоже самое. Очень жаль что этот хак для комментов не подошел

    Ответить
  109. артем:

    Добрый день, Виталий!
    Микроразметку удалось внедрить практически полностью. Единственно, не совсем понял, как в моем случае разметить шапку сайта — в файле header.php у меня нет тегов h1 и h2, поэтому не понятно, где надо указать элементы itemprop=»headline» и itemprop=»description». при этом валидатор микроразметки яндекса и гугла ошибок не выявляет. подскажите, пожалуйста, что необходимо исправить в шаблоне (файле header.php)?

    Ответить
    • Виталий Кириллов:

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

      Ответить
  110. Артём:

    Что мне выбрать подскажи пожалуйста, какой словарь взять? Сайт в адресе блога.

    Ответить
    • Виталий Кириллов:

      Лучше использовать библиотеку schema.org/Article. Вот статья.

      Ответить
  111. Владислав:

    После внедрения кода в functions.php возникла ошибка:
    article
    ПРЕДУПРЕЖДЕНИЕ: поле resultPhoto не определено в спецификации http://schema.org/Article

    Причем на странице: abisab.com/wifi-nastroyka/kak-uznat-parol-ot-svoey-wifi-vayfay-seti нет ошибки, а на странице: abisab.com/zhelezo/kompyuter-ili-noutbuk-ne-vidit-fleshku есть эта ошибка.

    Подскажите почему может возникать эта причина?

    Ответить
    • Виталий Кириллов:

      Поле resultPhoto не определено в спецификации http://schema.org/Article потому, что оно относится к спецификации http://schema.org/Recipe.

      Ответить
  112. Владислав:

    Прошу ответить в личку. Я поставил микроразметку, при комментировании появляется дополнительно микроразметка vcard в коде темы ее нет (вот страница для примера:abisab.com/kompyuter/kak-izmenit-chastotu-monitora), подскажите почему у меня так получается. Заранее очень признателен.

    Ответить
  113. Владислав:

    Благодарю Вас за качественный урок по микроразметке, по сути благодаря Вам могу идти на фриланс и зарабатывать… Микроразметку поставил на сайт, теперь Гугл и Яндекс дружат 😉

    Ответить
  114. Александр:

    Доброго времени суток!
    Спасибо за полезную информацию на блоге!
    Подскажите пожалуйста, как в resultphoto вывести не первую фотографию в записи а последнюю или ту которая в миниатюре записи. Просто у меня во всех записях первое фото — это ингридиенты а последнее это готовое блюдо.
    Заранее большое спасибо!

    Ответить
    • Виталий Кириллов:

      Это сложно! Скорее всего в рецептах у Вас разное количество изображений и чтобы получить последнее… даже не знаю…

      Ответить
      • Александр:

        К каждой записи идет миниатюра, может ее можно вывести как resultphoto?

        Ответить
        • Виталий Кириллов:

          Думаю можно.

          Ответить
  115. Александр:

    Осталось узнать как 🙂
    Думаю что в этой части Вашего кода:
    return preg_replace(array(‘{img itemprop=»image»}’), array(‘<img itemprop="resultPhoto"'),$content, 1);
    Нужно вместо '{img itemprop="image"}' вызвать миниатюру записи. Не могу найти и понять какую функцию вставить.
    Есть идеи?

    Ответить
    • Виталий Кириллов:

      Александр, дело в том, что миниатюры выводятся не в теле поста и под библиотеку http://schema.org/Recipe они не подпадут и будет ошибка, так что этот номер не пройдет.

      Ответить
  116. Александр:

    Спасибо за ответ. Значит буду ставить фото с готовым блюдо первым в записи.

    Ответить
  117. Александр:

    Добрый день!
    Есть еще один вопрос:
    при выводе recipeInstructions по вашему алгоритму у меня выводит первую фразу в записи а не как у Вас описание после фразы «Рецепт мясного рулета с яйцом». Подскажите как сделать так чтоб recipeInstructions брал нужный текст а не первые фразы записи? У меня например нужно брать текст после фразы «Ход работы».

    Ответить
    • Виталий Кириллов:

      Заключить «Ход работы» в теги h3 и в файл functions.php вставьте следующее:

      function mayak_text_description($content){
      return $content. '</span>';}
      function mayak_recipeInstructions($the_content) {
      global $post;
      $the_content=preg_replace('#<h3(.*?)</h3>#','<h3\1</h3><span itemprop="recipeInstructions">',$the_content);
      return $the_content;}
      add_filter('the_content', 'mayak_recipeInstructions');
      add_filter('the_content', 'mayak_text_description');
      Ответить
      • Александр:

        Большое спасибо!!! Все получилось!
        Пришла идея по поводу присвоения последней в записи картинке resultphoto, что если воспользоваться аналогичным скриптом и присваивать resultphoto картинке которая идет после фразы, например, готовое блюдо:
        Можно так сделать?

        Ответить
  118. Владислав:

    Не могу вывести разметку комментариев, посмотрите пожалуйста код страницы: abisab.com/kompyuter/propal-znachok-gromkosti-v-tree-neobhodimo-perezapustit-provodnik

    Ответить
    • Владислав:

      Микроразметка не видна именно в Яндексе, кэш чистил…

      Ответить
      • Владислав:

        Попробовал вставить отдельно код комментариев в инструмент микроразметки Яндекса, та все в порядке — все элементы отображаются, но как только вставляю адрес страницы, микроразметка комментариев не читается…

        И еще один момент: В инструменте микроразметки Google в itemprop=»text» также в это поле включаются все комментарии, подскажите почему так происходит?

        Ответить
    • Виталий Кириллов:

      Область комментариев попадает под действие библиотеки Article?

      Ответить
      • Владислав:

        Да , попадает, я взял full container.

        Ответить
        • Виталий Кириллов:

          Попробуйте подключение библиотеки Comment по перемещать.

          Ответить
          • Владислав:

            Там максимум два места пробовал и туда и туда, не отображается в Яндексе и все тут…

            Ответить
  119. АЛександр:

    Подскажите пожалуйста в чём может быть проблема, проверил сайт в валидаторе микроразметки от Яндекса и увидел следующую ошибку:
    microdata
    ОШИБКА: невозможно определить принадлежность данных полей. Возможны две причины: эти поля некорректно размещены, либо указан лишний атрибут itemprop
    itemType =
    description = Добро пожаловать в интернет-магазин «Sofiya Shop»! У нас представлен большой выбор нижнего белья, детской одежды и постельных принадлежностей.
    keywords = Интернет магазин нижнего белья София шоп, нижнее белье интернет магазин, купить нижнее белье в интернет магазине, нижнее белье интернет магазин одесса
    То есть, нет микроразметки на метатегах? Использую плагин all in seo pack на движке вордпрес, стоит галочка в настройках “Использовать разметку Schema.org”
    Можно ли решить такую проблему, или стоит просто выключить в настройках плагина поддержку микроразметки?

    Ответить
    • Виталий Кириллов:

      Здравствуйте Александр!
      Плагин All in One SEO Pack не годится для микроразметки и галочку надо снимать.

      Ответить
      • АЛександр:

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

        Ответить
  120. Евгений:

    Здравствуйте!
    Имеется вопрос по поводу списков ингредиентов:
    Ваша функция добавляет itemprop="ingredients в любой LI стандартного списка UL или OL.

    У меня же например ингредиенты находятся в таблице:
    <table class="bordered"><td itemprop="ingredients">Томатный сок</td></table>
    А приготовление (recipeInstructions) находятся в списке <ol class="recipe-ol">

    Как реализовать вашу функцию допустим ТОЛЬКО для списка <ol class="recipe-ol"> и таблицы ингредиентов <table class="bordered"><td itemprop="ingredients"> ?

    Заранее благодарю за помощь!

    Ответить
  121. Сергей:

    Виталий, доброго времени суток! Все получилось сделать оперативно благодаря вашей статье.
    Но возникло пару вопросов:

    1. С помощью функции, которая приписывает всем тегам li разметку ингридиентов, у меня также и под ингридиенты попали шаги рецепта, то есть грубо говоря у меня ингридиенты в виде маркированного списка, а шаги приготовления рецепта в виде нумерованного и ко всему этому добавилось разметка ingredients. Это нормально считается или я что-то не так сделал?

    2. В валидаторе вылазят такие вот предупреждения:

    ПРЕДУПРЕЖДЕНИЕ: поле calories не определено в спецификации http://schema.org/Recipe
    ПРЕДУПРЕЖДЕНИЕ: поле fatContent не определено в спецификации http://schema.org/Recipe
    ПРЕДУПРЕЖДЕНИЕ: поле carbohydrateContent не определено в спецификации http://schema.org/Recipe

    Хотелось бы услышать ваше мнение, нужно ли использовать разметку калорий, жиров и углеводов в рецептах? А то валидаторы и яндекса и гугла ее не признают.

    Заранее огромное спасибо за ответы!

    Ответить
    • Виталий Кириллов:

      Здравствуйте Сергей!
      1. Придется убрать элементы списка из шагов приготовления.
      2. Если эти элементы не признаются ПС, тогда зачем их использовать…

      Ответить
  122. Богдан:

    Здравствуйте!
    Только начал заниматься изучением микроразметки. И сначала установил на сайт плагин Schema wordpress.org/plugins/schema/
    Вроде хороший плагин. В гугле всё отлично, но в Яндексе выдает такую ошибку на странице поста:

    ОШИБКА: поле http://schema.org/ArticleSection не определено в спецификации http://schema.org/BlogPosting. Возможно вы имели ввиду http://schema.org/articleSection

    Связано ли ето с плагином, или с чем то ещё.
    Спасибо!

    Ответить
    • Виталий Кириллов:

      Здравствуйте Богдан!
      Дело в разном понимании некоторых элементом мироразметки в Яндексе и Гугле.

      Ответить
      • Богдан:

        Я так понимаю, ошибка не критична?

        Ответить
        • Виталий Кириллов:

          Ошибка, есть ошибка.

          Ответить
  123. Dmitry:

    Спасибо за статью. Может подскажете, куда мне вставить 'callback=mayak_comment'

    Функция комментария у меня так вызывается
    <div class="comment-list">
    <?php wp_list_comments( array( 'style' => 'div', 'avatar_size' => 48 ) ); ?>
    </div>

    Ответить
    • Виталий Кириллов:

      Вот там надо вставлять:

      <div class="comment-list">
      <?php wp_list_comments( array('callback' => 'mayak_comment', 'style' => 'div', 'avatar_size' => 48 ) ); ?>
      </div>
      Ответить
      • Dmitry:

        Спасибо!
        С этим все ОК теперь!

        Но yandex все равно чет гонит. Google — все говорит ОК!

        vcard
        ПРЕДУПРЕЖДЕНИЕ: Не выполнено обязательное условие для структурированных сниппетов Яндекс.Справочника: кажется, ваша разметка hCard описывает не организацию (поля fn и org не совпадают). В данный момент такая разметка не поддерживается Яндексом
        fn = Housewife
        n = Housewife
        url = http://www.naprobu.menu/author/housewife

        Вот. И
        microdata
        ОШИБКА: невозможно определить принадлежность данных полей. Возможны две причины: эти поля некорректно размещены, либо указан лишний атрибут itemprop
        itemType =
        comment
        comment
        itemType = http://schema.org/Comment
        creator = Dmitry Glazkov:
        datepublished = 2016-08-10
        text = Это невероятная вкусняха!
        (но в google ошибки не видит)

        Ответить
        • Виталий Кириллов:

          Яндекс и Гугл по разному смотрят на микроразметку.

          Ищите, где у Вас стоит класс «fn», из-за него первая ошибка. Класс надо удалить.
          Вторая ошибка появляется из-за некорректного указания зоны действия библиотеки http://schema.org/Comment. Тут надо с каждым конкретным случаем разбираться, ситуации разные бывают.

          Ответить
  124. Алексей:

    Микроразметка в шаблоне должна быть или удобнее добавлять на стадии кодирования?

    Ответить
    • Виталий Кириллов:

      Микроразметка и так в шаблоне делается. Не понял вашего вопроса.

      Ответить
  125. Виталий:

    Подскажите, в чем может быть проблема? На сайте есть разметка schema.org/Product.
    Валидатор гугла говорит что ошибок нет, но в вебмастере на каждой странице товара ошибка «Отсутствует минимальная или максимальная оценка». Разметку рейтинга не использую

    Ответить
    • Виталий Кириллов:

      Видимо какй-то «хвост» микроразметки в рейтинге все же есть…

      Ответить
      • Виталий:

        Есть классы rating и review. Неужели гугл их находит без указания сущности (

        Ответить
  126. Марина:

    В какой-то момент в схеме Recipe заменили ingredients на recipeIngredient. Теперь валидатор микроразметки выдает ошибку. Подскажите: надо просто заменить ingredients на recipeIngredient, чтобы все опять заработало?

    Ответить
    • Виталий Кириллов:

      Странно, Гугл ошибку на ingredients не выдает, только Яндекс ругается, зато в Гугле куча других предупреждений. В общем опять микроразметку поменяли, надоели уже!

      Ответить
  127. Сергей:

    А как можно вставить такую разметку на сайт с рецептами в blogger?
    И можно ли это вообще сделать?

    Ответить
  128. Александр:

    Добрый вечер! Проблема с микроразметкой комментариев. Делаю все по Вашей схеме, но ничего не происходит. в чем может быть проблема?

    Ответить
    • Виталий Кириллов:

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

      Ответить
      • Александр:

        Да есть такая функция. Что-то можно с ней сделать?
        // Rowling comment function
        if ( ! function_exists( 'rowling_comment' ) ) :

        function rowling_comment( $comment, $args, $depth ) {
        $GLOBALS['comment'] = $comment;
        switch ( $comment->comment_type ) :
        case 'pingback' :
        case 'trackback' :
        ?>

        <li <?php comment_class(); ?> id="comment-<?php comment_ID(); ?>">

        <?php __( 'Pingback:', 'rowling' ); ?> <?php comment_author_link(); ?> <?php edit_comment_link( __( 'Edit', 'rowling' ), '<span class="edit-link">', '</span>' ); ?>

        </li>
        <?php
        break;
        default :
        global $post;
        ?>
        <li <?php comment_class(); ?> id="li-comment-<?php comment_ID(); ?>">

        <div id="comment-<?php comment_ID(); ?>" class="comment">

        <?php echo get_avatar( $comment, 160 ); ?>

        <?php if ( $comment->user_id === $post->post_author ) : ?>

        <a class="comment-author-icon" data-link="<?php echo esc_url( get_comment_link( $comment->comment_ID ) ); ?>" title="<?php _e('Comment by post author','rowling'); ?>"><div class="fa fw fa-user"></div></a>

        <?php endif; ?>

        <div class="comment-inner">

        <div class="comment-header">

        <h4><?php echo get_comment_author_link(); ?></h4>

        </div> <!— /comment-header —>

        <div class="comment-content post-content">

        <?php comment_text(); ?>

        </div><!— /comment-content —>

        <div class="comment-meta">

        <div class="fleft">
        <div class="fa fw fa-clock-o"></div><a class="comment-date-link" data-link="<?php echo esc_url( get_comment_link( $comment->comment_ID ) ); ?>" title="<?php echo get_comment_date() . ' at ' . get_comment_time(); ?>"><?php echo get_comment_date(get_option('date_format')); ?></a>
        <?php edit_comment_link( __( 'Edit', 'rowling' ), '<div class="fa fw fa-wrench"></div>', '' ); ?>
        </div>

        <?php if ( '0' == $comment->comment_approved ) : ?>

        <div class="comment-awaiting-moderation fright">
        <div class="fa fw fa-exclamation-circle"></div><?php _e( 'Awaiting moderation', 'rowling' ); ?>
        </div>

        <?php else : ?>

        <?php
        comment_reply_link( array(
        'reply_text' => __('Ответить','rowling'),
        'depth' => $depth,
        'max_depth' => $args['max_depth'],
        'before' => '<div class="fright"><div class="fa fw fa-reply"></div>',
        'after' => '</div>'
        )
        );
        ?>

        <?php endif; ?>

        <div class="clear"></div>

        </div> <!— /comment-meta —>

        </div> <!— /comment-inner —>

        </div><!— /comment-## —>

        <?php
        break;
        endswitch;
        }
        endif;

        Ответить
        • Виталий Кириллов:

          Надо разметить ее по примеру моей функции.

          Ответить
          • Александр:

            Это как? Что разместить? Вашу функцию или та что уже есть? Или как-то нужно отредактировать существующию функцию?

            Ответить
            • Виталий Кириллов:

              Не разместить, а разметить) Да, нужно отредактировать существующую функцию и вставить в нее элементы микроразметки. Если вы подключите мою функцию, то слетят все стили.

              Ответить
              • Александр:

                Это для меня тяжеловато) А можно просто еще вставить одну функцию и прописать ее?

                Ответить
              • Александр:

                Вроде поучилось. взял элементы микроразметки из Вашей функции. Вот что получилось
                https://search.google.com/structured-data/testing-tool#url=http%3A%2F%2Ftest1.apple-pnz.com%2Fraznoe%2Fpress%2Fapple-pnz-pokupaet-tehniku-apple-menyaet-apple-prodaet-apple.html

                Не могли бы Вы проверить правильно ли я все сделал?
                Еще один вопрос, не могу у себя в шаблоне найти функцию вывода количества комментариев. Может есть какая другая функция?

                Ответить
                • Виталий Кириллов:

                  В Гугле все нормально, проверьте еще в Яндексе.

                  Ответить
                  • Александр:

                    Все нормально! Спасибо! не могу у себя в шаблоне найти функцию вывода количества комментариев. Может есть какая другая функция?

                    Ответить
                    • Виталий Кириллов:

                      Так просто вставьте эту функцию ели ее нет.

  129. Василий:

    Здравствуйте! А как разметить, чтобы не первое, а последнее изображение попадало в сниппет?

    function mayak_result_image($content) {
    return preg_replace(array(‘{<img itemprop="image"}'), array('<img itemprop="resultPhoto"'),$content, 1);
    }
    add_filter('the_content', 'mayak_result_image');

    Ответить

Оставить комментарий

Внимание комментатор! Прежде чем вставить: HTML, JavaScript или PHP код в свой комментарий, преобразуй его в html сущность!

Subscribe without commenting

» Подписаться на комментарии по RSS