Добавление в шаблон микроразметки schema.org

Тема в разделе "Общие вопросы", создана пользователем Zlata Jesen, 2 ноя 2015.

  1. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    97

    Собираюсь добавить в шаблон типовых страниц микроразметку schema.org, но не знаю, как правильнее увязать её с PHP.
    Подскажите правильную вставку тегов на основе картинок (например) а дальше я уж сама разберусь, и статью для остальных смогу написать.

    за картинки в шаблоне товара отвечает, похоже, вот этот код:

    PHP:
    <ul class="thumbnails">
                <?php if ($thumb) { ?>
                <li><a class="thumbnail" href="<?php echo $popup?>" title="<?php echo $heading_title?>"><img src="<?php echo $thumb?>" title="<?php echo $heading_title?>" alt="<?php echo $heading_title?>" /></a></li>
                <?php ?>
                <?php if ($images) { ?>
                <?php foreach ($images as $image) { ?>
                <li class="image-additional"><a class="thumbnail" href="<?php echo $image['popup']; ?>" title="<?php echo $heading_title?>"> <img src="<?php echo $image['thumb']; ?>" title="<?php echo $heading_title?>" alt="<?php echo $heading_title?>" /></a></li>
                <?php ?>
                <?php ?>
              </ul>
    Понятно, что все параметры, предлагаемые schema.org разметить мы не сможем, ибо в движке нет соответствующих полей для ввода, но хоть те, что есть?
    А есть у нас... немного... ссылка на файл... то есть contentUrl (https://yandex.ru/support/webmaster/supported-schemas/image.xml) и название картинки (name). Понятно, что в показанном выше коде за адрес картинки отвечает... ммм... вот этот кусочек:

    HTML:
    <img src="<?php echo $image['thumb']; ?>"
    Нам нужно добавить что-то по образцу...

    HTML:
    <div itemscope itemtype="http://schema.org/ImageObject">
    <h2 itemprop="name">Винни-Пух</h2>
    <img src="vinni.jpg" itemprop="contentUrl" />
    <span itemprop="description">Винни-Пух залезает на дерево.</span>
    </div>
    Попробую самостоятельно, если ошибусь, пожалуйста, поправьте?

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

    <ul class="thumbnails">
                <?php if ($thumb) { ?>
                <li><a class="thumbnail" href="<?php echo $popup?>" title="<?php echo $heading_title?>"><img src="<?php echo $thumb?>" itemprop="contentUrl"  title="<?php echo $heading_title?>" alt="<?php echo $heading_title?>" /></a></li>
                <?php ?>
                <?php if ($images) { ?>
                <?php foreach ($images as $image) { ?>
                <li class="image-additional"><a class="thumbnail" href="<?php echo $image['popup']; ?>" title="<?php echo $heading_title?>"> <img src="<?php echo $image['thumb']; ?>" itemprop="contentUrl" title="<?php echo $heading_title?>" alt="<?php echo $heading_title?>" /></a></li>
                <?php ?>
                <?php ?>
              </ul>

    </div>
    Div и contentUrl добавила... А есть возможность title указать в разметке, как name?
    Боюсь, что так будет неправильно:

    PHP:
    <a class="thumbnail" href="<?php echo $popup?>" title="<?php echo <span itemprop="name">$heading_title;</span>?>">
     
    Последнее редактирование: 23 ноя 2015
    Сергей2017 и RoS нравится это.
  2. Vlad

    Vlad Эксперт

    Сообщения:
    3.902
    Симпатии:
    938
    нужно не в пхп теги вставлять, а тег пхп вставлять )) (словесная белиберда получилась)

    Пример
    PHP:
    <h2 itemprop="name"><?php echo $heading_title?></h2>
    и для изображения itemprop="name" кажется не нужен.. так как изображеия у вас же не именуются никак... только страница.
     
  3. tsap

    tsap Продвинутый пользователь

    Сообщения:
    230
    Симпатии:
    130
    насколько я понимаю, то для картинок такого свойства не существует itemprop="name"
    есть caption и thumbnail

    PHP:
    <div itemscope itemtype="http://schema.org/ImageObject" class="<?php echo $class?>">
              <?php if ($thumb || $images) { ?>
              <ul class="thumbnails">
                <?php if ($thumb) { ?>
                <li><a class="thumbnail" href="<?php echo $popup?>" title="<?php echo $heading_title?>"><img itemprop="thumbnail" src="<?php echo $thumb?>" title="<?php echo $heading_title?>" alt="<?php echo $heading_title?>" /></a></li>
                <?php ?>
                <?php if ($images) { ?>
                <?php foreach ($images as $image) { ?>
                <li class="image-additional"><a class="thumbnail" href="<?php echo $image['popup']; ?>" title="<?php echo $heading_title?>"> <img itemprop="thumbnail" src="<?php echo $image['thumb']; ?>" title="<?php echo $heading_title?>" alt="<?php echo $heading_title?>" /></a></li>
                <?php ?>
                <?php ?>
              </ul>
              <?php ?>
            </div>
     
  4. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    97
    Я не специалист, брала из справки Яндекса:
     
  5. tsap

    tsap Продвинутый пользователь

    Сообщения:
    230
    Симпатии:
    130
    Zlata Jesen нравится это.
  6. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    97
    По поводу разметки рейтинга проблемка.
    Делала так:

    В шаблоне продукта заменила

    PHP:
    <?php if ($review_status) { ?>
     <div class="rating">
     <p>
     <?php for ($i 1$i <= 5$i++) { ?>
     <?php if ($rating $i) { ?>
     <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-1x"></i></span>
     <?php } else { ?>
     <span class="fa fa-stack"><i class="fa fa-star fa-stack-1x"></i><i class="fa fa-star-o fa-stack-1x"></i></span>
     <?php ?>
     <?php ?>
     <a href="" onclick="$('a[href=\'#tab-review\']').trigger('click'); return false;"><?php echo $reviews?></a> / <a href="" onclick="$('a[href=\'#tab-review\']').trigger('click'); return false;"><?php echo $text_write?></a></p>
     <hr>
    На

    PHP:
    <?php if ($review_status) { ?>
              <div class="rating" itemprop = "aggregateRating" itemscope itemtype = "http://schema.org/AggregateRating" class="review">
                <p>
                  <?php for ($i 1$i <= 5$i++) { ?>
                  <?php if ($rating $i) { ?>
                  <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-1x"></i></span>
                  <?php } else { ?>
                  <span class="fa fa-stack"><i class="fa fa-star fa-stack-1x"></i><i class="fa fa-star-o fa-stack-1x"></i></span>
                  <?php ?>
                  <?php ?>
                  <a href="" onclick="$('a[href=\'#tab-review\']').trigger('click'); return false;"><?php echo $reviews?></a> / <a href="" onclick="$('a[href=\'#tab-review\']').trigger('click'); return false;"><?php echo $text_write?></a></p>
                  <meta itemprop = "ratingValue" content="<?php echo $rating?>">
                  <meta itemprop = "reviewCount" content="<?php echo $review_count?>">
                <hr>
    В файле

    catalog\controller\product\product.php

    добавила строку

    PHP:
     $data['review_count'] = (int)$product_info['reviews']; 
    после

    PHP:
     $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']); 
    (решение подсказали). Есть еще вариант первый код заменить на

    PHP:
         <?php if ($review_status) { ?>
              <?php if ($rating 0) { ?>
              <div class="rating" itemprop = "aggregateRating" itemscope itemtype = "http://schema.org/AggregateRating" class="review">
              <?php } else { ?>
              <div class="rating" class="review">
              <?php ?>
                <p>
                  <?php for ($i 1$i <= 5$i++) { ?>
                  <?php if ($rating $i) { ?>
                  <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-1x"></i></span>
                  <?php } else { ?>
                  <span class="fa fa-stack"><i class="fa fa-star fa-stack-1x"></i><i class="fa fa-star-o fa-stack-1x"></i></span>
                  <?php ?>
                  <?php ?>
                  <a href="" onclick="$('a[href=\'#tab-review\']').trigger('click'); return false;"><?php echo $reviews?></a> / <a href="" onclick="$('a[href=\'#tab-review\']').trigger('click'); return false;"><?php echo $text_write?></a>
                </p>
                  <?php if ($rating 0) { ?><meta itemprop = "ratingValue" content="<?php echo $rating?>"><?php ?>
                  <?php if ($review_count 0) { ?><meta itemprop = "reviewCount" content="<?php echo $review_count?>"><?php ?>
                <hr>
    Но проблема в том, что валидатор Google Developers ругается в случае товаров БЕЗ рейтинга, ему надо. чтобы значения были больше 0.

    google-developers.jpg

    тогда как Яндекс-валидатор молчит и успешно рапортует "0 из 0".

    Может у кого есть предложения, как обойти эту проблему?
    Результат - звездочки в сниппете, очень здорово смотрится!
     
    RoS нравится это.
  7. Ален

    Ален Эксперт

    Сообщения:
    2.052
    Симпатии:
    630
    ему скорей всего нужен именно 0 чтобы было написано.
     
  8. tsap

    tsap Продвинутый пользователь

    Сообщения:
    230
    Симпатии:
    130
    сам озадачил сам и отвечу
    правильно писать так:
    PHP:
              <div class="rating" itemprop = "aggregateRating" itemscope itemtype = "http://schema.org/AggregateRating" class="review">
                <p>
                  <?php for ($i 1$i <= 5$i++) { ?>
                  <?php if ($rating $i) { ?>
                  <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-1x"></i></span>
                  <?php } else { ?>
                  <span class="fa fa-stack"><i class="fa fa-star fa-stack-1x"></i><i class="fa fa-star-o fa-stack-1x"></i></span>
                  <?php ?>
                  <?php ?>
                  <a href="" onclick="$('a[href=\'#tab-review\']').trigger('click'); return false;"><?php echo $reviews?></a> / <a href="" onclick="$('a[href=\'#tab-review\']').trigger('click'); return false;"><?php echo $text_write?></a>
                </p>
                  <meta itemprop = "ratingValue" content="<?php echo $rating?>">
                  <meta itemprop = "worstRating" content="0">
                  <meta itemprop = "bestRating" content="5">
                  <meta itemprop = "reviewCount" content="<?php echo $review_count?>">
                <hr>
    поясняю
    нужно указать границы рейтинга
    worstRating - самая низкая оценка (если ее не указать, то по умолчанию устанавливается значение 1)
    bestRating - самая высокая оценка (если ее не указать, то по умолчанию устанавливается значение 5)
    вот что получается:
    <meta itemprop = "ratingValue" content="<?php echo $rating; ?>"> - это текущая оценка товара
    <meta itemprop = "worstRating" content="0"> - это нижняя граница рейтинга, у нас равный 0
    <meta itemprop = "bestRating" content="5"> - это верхняя граница рейтинга, у нас равный 5

    ps. нужно внимательно читать документацию
     
    RoS и Zlata Jesen нравится это.
  9. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    97
    А беспокоиться о чем, оказалось, есть.

    Сменила вариант
    Код:
     <li itemprop="offers" itemscope itemtype="http://schema.org/Offer">
                  <h2 itemprop="price"><div itemprop="priceCurrency" content="RUB"><?php echo $price; ?></div></h2></li>
    на

    Код:
     <li itemprop="offers" itemscope itemtype="http://schema.org/Offer">
                 
                  <h2 itemprop="price"><?php echo $price; ?></h2>
                  <meta itemprop="priceCurrency" content="RUB"></meta>
                 
                </li>
    Понаблюдаю. У Яши-то проблем и с тем не было, а вот Гугл выдавал цену в сниппете, только если был рейтинг... Если все будет удачно (появятся изменения в сниппетах), отпишусь, если нет, то лучше не менять.
     
    RoS нравится это.
  10. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    97
    Так.. Кажется, виновата НЕ разметка. Или я чего-то не знаю, не понимаю. Не могу найти ответа который день: даже в правильно размеченных микроразметкой товарах гугл не всегда выводит цену в сниппетах, но когда именно он ее выводит - не ясно.
    Я сама приводила для примера скриншот:
    24-11-2015 12-40-35.jpg
    теперь же данный сниппет выглядит уже так:
    n2YaLdJcjO0ox2.jpg
    Куда делась цена?
    На англоязычном гугле в статье про расширенные сниппеты пишут:
    то есть правильно размеченное содержание не всегда может вызвать расширенный сниппет... А я тут бьюсь, грешу на разметку...
    Дико интересует вопрос, ПОЧЕМУ у одного магазина расширенный снипппет выводится, а у другого - нет? Буду рада любым предположениям.
     
  11. Vlad

    Vlad Эксперт

    Сообщения:
    3.902
    Симпатии:
    938
    а вы зайдите на страницу ;)
     
    Zlata Jesen нравится это.
  12. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    97
    О, да, мой косяк, не поглядела.
    Но вот в том же магазине другой товар и самый релевантный запросу товар - без сниппета!
    [​IMG]
    А какой-то тепловентилятор с расширенным... Тут чем объяснить?
     
  13. Ravilr

    Ravilr Специалист

    Сообщения:
    3.055
    Симпатии:
    851
    возможно товар совсем новый.
     
  14. Marianna

    Marianna Пользователь

    Сообщения:
    53
    Симпатии:
    2
    так как все таки правильно сделать вывод картинки производителя, на странице manufacturer_info
    <img itemprop="thumbnail" src="<?php echo $thumb; ?>" alt="<?php echo $heading_title; ?>" title="<?php echo $heading_title; ?>" class="img-thumbnail" />

    вот так?
     
  15. tsap

    tsap Продвинутый пользователь

    Сообщения:
    230
    Симпатии:
    130
    Zlata Jesen, товар новый еще, да и воще не понятно как гугл эту разметку индексирует
    при наличии 500 товаров, гугл проиндексировал разметку только у 127
    почему дальше не индексирует, вопрос...
     
    Zlata Jesen нравится это.
  16. Marianna

    Marianna Пользователь

    Сообщения:
    53
    Симпатии:
    2
    в какой промежуток времени был добавлен товар? новый он не сразу может проиндексировать
     
  17. tsap

    tsap Продвинутый пользователь

    Сообщения:
    230
    Симпатии:
    130
    точно не знаю, около месяца назад, последний
     
  18. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    97
    У меня другая ситуация, проиндексировал практически все (кроме товаров, где описания с гулькин нос), но цены сначала были в поиске, а теперь пропали, хотя ошибок не показывает. В консоли были пустые поля "бренд" и "модель", теперь добавила, погляжу, что будет...
     
  19. roman_1790

    roman_1790 Новичок

    Сообщения:
    19
    Симпатии:
    0
    Подскажите пожалуйста, может Вы знаете. Почему-то после установки мета тегов twitter cards, гугл стал показывать ошибку в хлебных крошках в продукте и в категориях. Использую разметку хлебных крошек xmlns:v="http://rdf.data-vocabulary.org". Может это не совместимо с twitter cards или ещё чего, не могу понять как исправить ошибку. В описании ошибки написано: – недопустимый тип целевого объекта для свойства http://rdf.data-vocabulary.org/#url. Без имени-2.jpg
     
  20. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    97
    а валидацию данных метатегов в валидаторе твиттера прошли успешно? Без ошибок? Ну и вообще бы лучше код глянуть... хотя вариант несовместимости тоже возможен, я пока заметок на эту тему не видела...
    ---------------------
    Вниманию тех, кто размечал рейтинг по моим постам, поправьте код в шаблоне продукта. Подробнее тут.