Микроразметка данных schema.org (вносим изменения в шаблоны)

Тема в разделе "Инструкции и FAQ", создана пользователем Zlata Jesen, 12 ноя 2015.

  1. Zlata Jesen

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

    Сообщения:
    165
    Симпатии:
    98
    Для чего нужна данная микроразметка, можно прочесть здесь, не буду на этом особо останавливаться.
    Особо остановлюсь на бекапе... Перед любым изменением в файлах делаем бекап!

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

    Дополнительно в теме от пользователей полезные сообщения (спасибо им!):
    Разметка отзывов тут
    Разметка категорий здесь
    А разметка статей в этом сообщении

    Разметка товара.

    Скачиваем файл catalog\view\theme\default\template\product\product.tpl (или аналогичный файл Вашей темы) и открыв в редакторе Notepad++ (или другом "правильном", вебмастерском, НЕ дефолтном от Windows!), начинаем колдовать:
    Ищем:

    HTML:
    <div class="container">
    Обозначаем, что в этом блоке будет находится разметка товара:
    HTML:
    <div class="container" itemscope itemtype="http://schema.org/Product">
    Размечаем адрес страницы через ссылку хлебных крошек. Для этого ищем:
    PHP:
    <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
    Заменяем на:
    PHP:
    <li><a itemprop="url" href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
    Размечаем картинку:
    Ищем блок изображений в шаблоне:
    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>
    Обозначаем основное изображение с помощью itemprop="image":
    PHP:
      <ul class="thumbnails">
      <?php if ($thumb) { ?>
      <li><a class="thumbnail" href="<?php echo $popup?>" title="<?php echo $heading_title?>"><img itemprop="image" src="<?php echo $thumb?>" title="<?php echo $heading_title?>" alt="<?php echo $heading_title?>" /></a></li>
    Ищем описание и размечаем как itemprop="description":
    Само описание будет тут:
    PHP:
    <div class="tab-pane active" id="tab-description"><?php echo $description?></div>
    Размечаем:
    PHP:
    <div itemprop="description" class="tab-pane active" id="tab-description"><?php echo $description?></div>
    Далее нам нужно указать название товара. Это просто. Ищем:
    HTML:
    <h1><?php echo $heading_title; ?></h1>
    Заменяем на:
    HTML:
    <h1 itemprop="name"><?php echo $heading_title; ?></h1>
    Следующая цель - обозначить цену itemprop="price": Для этого находим:
    HTML:
    <h2><?php echo $price; ?></h2>
    Мы могли бы просто заменить ее на
    HTML:
    <h2 itemprop="price"><?php echo $price; ?></h2>
    НО:
    1. Не забывайте, что поле price может быть использовано только в схеме offer, поэтому надо обозначить заодно и эту схему, добавляя span c priceCurrency (иначе валидаторы будут писать ошибку).
    2. Валидатор Google (на январь 2017 года) выдает ошибку, уведомляющую, что текста с названием валюты быть не должно. Для магазина с одной валютой придумала такой вариант решения проблемы:
    а) Идем в админку: Система - локализация - валюта, редактировать, Символ справа, Символ слева - убрать все обозначения. Так наша цена будет выводиться БЕЗ названия валюты.
    б) Вносим правки в шаблоне:
    Код:
    <li>
       <h2><?php echo $price; ?></h2>
    </li>
    меняем на:
    Код:
      <li itemprop="offers" itemscope itemtype="http://schema.org/Offer">
                  <h2><span itemprop="price"><span itemprop="priceCurrency" content="RUB"><?php echo $price; ?></span></span>&nbsp;руб.</h2>
                </li>
    Так же придется подправить еще несколько шаблонов, принудительно дописав туда название валюты. У меня это bestseller.tpl, featured.tpl, category.tpl, latest.tpl, у вас могут быть и другие.

    Всё, можно выдохнуть и загрузить файл на сервер по пути своего шаблона:
    catalog\view\theme\ВАШ_ШАБЛОН\template\product\product.tpl
    Проверяем в валидаторах (могли где-то и ошибиться):

    РАЗ
    ДВА

    Для мультивалютного магазина стоит присмотреться к решениям, предложенным далее в теме: здесь
    или в теме обсуждения здесь
    Добавлено 27 января 2016 года:

    На будущее:
    запишите себе где-нибудь или поставьте напоминалку в телефон или сделайте что хотите, но!!!

    Если Вы используете в дизайне дефолтный шаблон, то при обновлении движка файл catalog\view\theme\default\template\product\product.tpl может быть обновлен (перезаписан), и вся Ваша разметка просто исчезнет, поэтому при обновлении движка... что надо сделать? Правильно, угадали! Спасти файл с разметкой, вручную сравнить его с новым файлом и оставив разметку на месте, добавить то, что добавилось в файл вместе с версией...
    Не радуйтесь, если Вы используете не дефолтный, а собственный шаблон, он, конечно, не обновится, но не забывайте о правках в файлах контроллеров и т.п! Сравнивайте! Исправляйте!
    Я это делаю с помощью плагина к Notepad++ под названием Compare, а Вы?

    Добавлено 21 марта 2016 года:

    Обнаружила, что упустила возможность указания модели и бренда. Исправляю упущение. Всё в том же файлике
    catalog\view\theme\ВАШ_ШАБЛОН\template\product\product.tpl
    ищем такой код (версия движка у меня уже 2.1.0.2 (rs.1), если у Вас другая, то код может отличаться):

    PHP:
    <li><?php echo $text_model?> <?php echo $model?></li>

    и меняем на:
    PHP:
    <li><?php echo $text_model?> <span itemprop="model"><?php echo $model?></span></li>

    Как вы могли догадаться, теперь поисковики смогут добавить информацию в поле модели.
    Теперь беремся за бренд.
    Ищем:
    PHP:
     <?php if ($manufacturer) { ?>[/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR]
    [COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000]            <li><?php echo $text_manufacturer?> <a href="<?php echo $manufacturers?>"><?php echo $manufacturer?></a></li>
                <?php ?>

    и меняем на:
    PHP:
          <?php if ($manufacturer) { ?>[/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR]
    [COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000][COLOR=#0000b3][COLOR=#000000]            <li><?php echo $text_manufacturer?> <a href="<?php echo $manufacturers?>">
                <span itemprop="brand"><?php echo $manufacturer?></span>
                </a></li>
                <?php ?>


    Не поленитесь, проверьте визуально и в валидаторах - иногда пропуск одной кавычки может натворить таких дел, что съедет весь шаблон!
     
    Последнее редактирование: 21 янв 2017
    ger073, Alexmen, vikaharkov и 12 другим нравится это.
  2. Zlata Jesen

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

    Сообщения:
    165
    Симпатии:
    98
    Разметка рейтинга
    (за решение ОГРОМНОЕ спасибо @tsap)
    Для начала наглядное отличие сниппета товара от сниппета товара&рейтинга

    24-11-2015 12-40-35.jpg

    Хотите так? Приступим.

    Редактируем catalog\view\theme\default\template\product\product.tpl

    Ищем:

    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">
                <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>
    Идем в catalog\controller\product\product.php
    и после

    PHP:
      $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']);  
    добавляем:

    PHP:
     $data['review_count'] = (int)$product_info['reviews'];  
    Проверяем в валидаторах (см. первый пост) и ждем индексации.
     
    Последнее редактирование: 24 мар 2016
    mr_eas, dimisa, Veliafar и 7 другим нравится это.
  3. Zlata Jesen

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

    Сообщения:
    165
    Симпатии:
    98
    Разметка сведений об организации:

    Код:
      <div itemscope itemtype="http://schema.org/Organization">
      <span itemprop="name">Сюда вставляем название организации</span> © 2011-2015 <br/>
        <div itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
        Адрес:
        <span itemprop="streetAddress">Указываем улицу и номер дома</span>
        <span itemprop="addressLocality">Указываем город</span>, <span itemprop="postalCode">Вписываем почтовый индекс</span>
      </div>
      Телефоны:<span itemprop="telephone">Телефон №1</span>, <span itemprop="telephone">Телефон №2</span>,<br/>
      Электронная почта: <span itemprop="email">Вписываем e-mail</span> <br/>
    </div>
    Данную разметку вставляем в любое место сайта. Проверено, работает, индексируется.
     
    gorg73, mr_eas, dimisa и 5 другим нравится это.
  4. nariman

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

    Сообщения:
    30
    Симпатии:
    3
    Отлично! Продолжайте пожалуйста. Внимательно слежу за темой.
     
    Veliafar нравится это.
  5. Zlata Jesen

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

    Сообщения:
    165
    Симпатии:
    98
    Разметка "хлебных крошек"
    За предложенное решение благодарить @Slait
    Приступим?
    Бекапимся, скачиваем на компьютер наш многострадальный шаблон продукта
    catalog\view\theme\default\template\product\product.tpl
    и редактируем... (не забывайте, делать это надо в "правильном" вебмастерском блокноте, из бесплатных рулит Notepad++)

    Ищем:
    PHP:
      <ul class="breadcrumb">
        <?php foreach ($breadcrumbs as $breadcrumb) { ?>
        <li><a itemprop="url" href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
        <?php ?>
      </ul>
    Учтите, я это ищу на основании уже сделанных изменений! Если Вы не проделывали то, о чем я писала выше, то текста "itemprop="url" у Вас, разумеется, не будет. Проще искать по class="breadcrumb".

    И заменяем на:

    PHP:
    <ul class="breadcrumb" >
            <?php
            $breadcount 
    =count($breadcrumbs)-1;
            foreach (
    $breadcrumbs as $iterator => $breadcrumb) {
            if (
    $iterator != $breadcount) {
            echo 
    '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'.$breadcrumb['href'].'" itemprop="url"><span itemprop="title">'.$breadcrumb['text'].'</span></a></li>';

            } else {
            echo 
    '<li class="end"><span>'.$breadcrumb['text'].'</span></li>';
            }
            } 
    ?>
            </ul>
    Но не спешите радоваться. В валидаторах все будет корректно, если в языковом файле будет не сущность в тегах "i", а текст. О чем это я? А вот о чем. Загляните в файл
    public_html/catalog/language/russian/russian.php
    или

    public_html/catalog/language/ru-ru/ru-ru.php
    (в зависимости от версии движка).


    Что вы там видите в переменной $_['text_home'] ? Наверняка просто

    HTML:
    <i class="fa fa-home"></i>
    Так вот эта "сущность" как title работать не будет. А этот атрибут обязателен и валидатор покажет ошибку. Что делать?
    Замените на:

    HTML:
    <i class="fa fa-home"></i><span class="displayn"> Главная</span>
    или просто на "Главная", если Вам не принципиально наличие "домика", а в CSS добавьте:

    .displayn {display:none;}

    Всё. Теперь можно и в валидаторы.
     
    Последнее редактирование: 29 сен 2016
    ger073, MrTrump, ektos и 4 другим нравится это.
  6. nariman

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

    Сообщения:
    30
    Симпатии:
    3
    странно все сделал как в 1-ом и втором посту, но почему то разметки не видно.
    ссылка на товар с продуктом http://kavdent.ru/fona-x70
     
  7. Slait

    Slait Эксперт

    Сообщения:
    503
    Симпатии:
    454
    Хе хе, вижу ты открыла мой маленький Хак, дополню, Что бы в меню был только домик, я обернул "Главная" в
    Код:
    <span class="displayn">
    и в стилях прописал
    Код:
    .displayn {display:none;}
    Это скроет текст в браузере, но его будет видеть google bot
     
    RoS и Zlata Jesen нравится это.
  8. nariman

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

    Сообщения:
    30
    Симпатии:
    3
    Разметка shema.org отображается в html коде страницы? Могу ли я ее увидеть?
     
  9. Slait

    Slait Эксперт

    Сообщения:
    503
    Симпатии:
    454
  10. nariman

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

    Сообщения:
    30
    Симпатии:
    3
    Странно в таком случае. Вроде как изменил файл product.tpl из папки моей темы. Загрузил обратно на хостинг, а изменения не отображаются.

    файл лежит тут
    /catalog/view/theme/default/template/product/product.tpl

    в настройках магазина применил шаблон по умолчанию. Версия опенкарт Version 2.1.0.1 (rs.2)
     
  11. Slait

    Slait Эксперт

    Сообщения:
    503
    Симпатии:
    454
    Попробуйте обновить модификатор.
    2015-12-12 01-04-29 Скриншот экрана.png
     
    dimisa нравится это.
  12. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    640
    вот только в данном случаи и наличии бутстрап этот хак должен быть просто классом hidden и ничего не надо добавлять в стили ?
     
    optimlab нравится это.
  13. nariman

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

    Сообщения:
    30
    Симпатии:
    3
    Спасибо помогло. Каким образом модификаторы касаются шаблонов контроллера?
     
  14. nariman

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

    Сообщения:
    30
    Симпатии:
    3
    в любое место это куда? На главную? На страницу контактов? В Футер?
     
  15. Zlata Jesen

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

    Сообщения:
    165
    Симпатии:
    98
    Я как-то без внимания, я решила, что это ради шрифта "Главной"))

    Да хоть куда, везде проиндексируется.
    Я запихнула в футер.
     
    dimisa нравится это.
  16. nariman

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

    Сообщения:
    30
    Симпатии:
    3
    Все сделал как в статье. Но в поисковых снипетах информация отображается как и раньше, без цены и рейтинга.
    Может времени прошло мало?
     
  17. Zlata Jesen

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

    Сообщения:
    165
    Симпатии:
    98
    В валидаторах проверяли? Видят? В гугл-консоли что показывает на счет разметки?
     
    dimisa нравится это.
  18. nariman

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

    Сообщения:
    30
    Симпатии:
    3
    гугл консоль правду говорит

    Product
    itemtype:
    http://schema.org/Product
    url:
    http://kavdent.ru/
    url:
    http://kavdent.ru/mercury-3600-verxnjaja-podacha
    description:
    Стоматологическая установка среднего класса имеющая презентабельный внешний вид. Простая в обращении, крайне надежная, удобная как для врача-стоматолога так и для пациента. Широкий выбор комплекта...
    name:
    Mercury 3600 верхняя подача
    offers
    itemtype:
    http://schema.org/Offer
    price:
    3680.00$
    priceCurrency:
    USD
    aggregateRating
    itemtype:
    http://schema.org/AggregateRating
    ratingValue:
    0
    worstRating:
    0
    bestRating:
    5
    reviewCount:
    0
     
  19. Zlata Jesen

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

    Сообщения:
    165
    Симпатии:
    98
    Я имела ввиду количество проиндексированных страниц с разметкой (Структурированные данные). Если есть рост и нет ошибок, то беспокоиться не о чем.
     
  20. Zlata Jesen

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

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