Микроразметка рейтинга новостей в DLE для Google по версии schema.org

Описание: Всё что относится к DataLife Engine
Модератор: Aleksandr

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1611
Зарегистрирован: 5 апреля 2013
С нами: 11 лет

#1 Дим » 9 мая 2013, 12:10

Рейтинг DLE.png
Рейтинг DLE.png (2.17 КБ) 8425 просмотров


Микроразметка рейтинга новостей в DLE для Google по версии schema.org
Автор: АлаичЪ

Изображение


Привет, друзья. Сегодня решил спалить очередную тему по модификации нашего любимого движка DLE – будем делать микроразметку рейтинга новостей для расширенного сниппета Google Rich Snippets.

Смотрите, вот нашел пример у Гугла для своего же блога:

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


Эту разметку я внедрял фиг знает как давно и вообще про нее позабыл, но она иногда встречается, как видите. Как и по каким алгоритмам Google выбирает, где показать звездочки, я не знаю, т.к. размечены все посты, а красивый сниппет показывается всего для нескольких постов и они еще постоянно меняются.

Кстати, прошу обратить внимание еще на тот факт, что у меня в сниппете имеются красивые хлебные крошки, но я их никак не размечал, Google их сам определил и встроил в сниппет для всего моего сайта. И что еще интереснее, я видел несколько примеров сайтов, где не были размечены рейтинги-звездочки, но Гугл все равно показывал их в сниппете. Зная все это, становится понятно, что особенно-то манипулировать этими вещами не получится, поисковик все равно сделает по-своему.

Не смотря ни на что мы будем пытаться, кому-то да повезет.

Модификация рейтинга новостей в DLE под микроразметку
Внимание!!! Несколько условий, невыполнение которых приводит к различным проблемам и ошибкам:
— Данные инструкции применимы для DLE версий 9.6 и 9.7. (Для более ранних версий есть пара решений в комментариях, но я за них не ручаюсь).
— Обязательная настройка движка! Настройка групп пользователей -> Гости -> Вкладка «Новости» -> Разрешить выставление рейтинга новостей: Да.
— Вывод рейтинга со страниц категорий рекомендуется убрать, т.е. удалить упоминания рейтинга из шаблона shortstory.tpl.

Приступим, открываем файл /engine/modules/functions.php и находим:

Код: Выделить всё

function ShowRating($id, $rating, $vote_num, $allow = true) {
    global $lang;
 
    
...
 
    return $rated
;
}
 
function userrating
($id) 


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

Выделяем указанный мною код и заменяем его на следующий:

Код: Выделить всё

function ShowRating($id, $rating, $vote_num, $allow = true) {
    global $lang;
 
    if
( $rating AND $vote_num ) $rating = round( ($rating / $vote_num), 0 );
    else $rating = 4;
    $AVERrating = $rating;
    $rating = $rating * 17;
 
    if
( !$allow ) {
 
        $rated 
= <<<HTML
<div class="rating">
        <ul class="unit-rating">
        <li class="current-rating" style="width:
{$rating}px;">{$rating}</li>
        </ul>
</div>
HTML;
 
        return $rated
;
    }
 
    $rated 
= <<<HTML
<div id='ratig-layer-{$id}'><div class="rating">
        <ul itemprop="rating" itemscope itemtype="http://data-vocabulary.org/Rating" class="unit-rating">
        <li itemprop="average" class="current-rating" style="width:
{$rating}px;">{$AVERrating}</li>
        <li><a href="#" title="
{$lang['useless']}" class="r1-unit" onclick="doRate('1', '{$id}'); return false;">1</a></li>
        <li><a href="#" title="
{$lang['poor']}" class="r2-unit" onclick="doRate('2', '{$id}'); return false;">2</a></li>
        <li><a href="#" title="
{$lang['fair']}" class="r3-unit" onclick="doRate('3', '{$id}'); return false;">3</a></li>
        <li><a href="#" title="
{$lang['good']}" class="r4-unit" onclick="doRate('4', '{$id}'); return false;">4</a></li>
        <li itemprop="best"><a href="#" title="
{$lang['excellent']}" class="r5-unit" onclick="doRate('5', '{$id}'); return false;">5</a></li>
        </ul>
</div></div>
HTML;
 
    return $rated
;
}
 
function userrating
($id) 


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

С этим файлом закончили – сохраняем и заливаем на сервер, заменяя прежний.

Открываем файл /engine/modules/show.full.php и находим код:

Код: Выделить всё

        if( $row['allow_rate'] ) { 
 
            $tpl
->set( '{rating}', ShowRating( $row['id'], $row['rating'], $row['vote_num'], $user_group[$member_id['user_group']]['allow_rating'] ) );
            $tpl->set( '{vote-num}', "<span id="vote-num-id-".$row['id']."">".$row['vote_num']."</span>" );
            $tpl->set( '[rating]', "" );
            $tpl->set( '[/rating]', "" );
 
        
} else 


Заменяем код на следующий:

Код: Выделить всё

if ( $row['vote_num'] == 0 ) $row['vote_num'] = 1;
 
        if
( $row['allow_rate'] ) { 
 
            $tpl
->set( '{rating}', ShowRating( $row['id'], $row['rating'], $row['vote_num'], $user_group[$member_id['user_group']]['allow_rating'] ) );
            $tpl->set( '{vote-num}', "<span itemprop="votes" id="vote-num-id-".$row['id']."">".$row['vote_num']."</span>" );
            $tpl->set( '[rating]', "" );
            $tpl->set( '[/rating]', "" );
 
        
} else 


Сохраняем файл, загружаем на сервер, заменяя прежнюю версию файла.

Пришло время рассказать о «хитрости» — она заключается в следующем. Если, например, новость совсем свежая, то для нее вряд ли есть данные о рейтинге, никто просто не успел проголосовать, и тогда количество голосов будет равно 0, а это ошибка, ну, то есть Google скажет, что мы его обманываем и никакого рейтинга у нас пока нет. Так вот, я модифицировал код таким образом, что если у нас 0 голосов, то делается «как будто» есть один голос, и это решает проблему с ошибкой, рейтинг будет одобрен Гуглом.

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

Открываем файл /templates/*название вашей темы*/fullstory.tpl и после {full-story} добавляем код:

Код: Выделить всё

[rating]<div itemscope itemtype="http://data-vocabulary.org/Review-aggregate"><div style="float:left;width:100px;">Рейтинг:</div>{rating}<div style="float:left;width:120px;">(голосов: {vote-num})</div></div>[/rating


Если вдруг это будет криво отображаться в вашем шаблоне, то, извините, не моя вина, изучите уже, наконец, что такое CSS.

Вот как бы и все :) Как все просто делать по инструкции, не правда ли?

Осталось проверить, что все сделано правильно при помощи инструмента проверки структурированных данных Google.

Должны получить что-то подобное:

Изображение

Еще раз смею напомнить, что вероятность появления такого сниппета, как показывает нам инструмент проверки, крайне мала, но она есть!

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

Теперь скрестим пальцы и мечтаем, чтобы микроразметка рейтинга новостей понравилась Google и он ее включил. А там и серьезный рост CTR, хороший трафик, рост позиций, горы бабла…вы такие лежите на гамаке, попиваете коктейль и смотрите на пальмы… Мечтать не вредно, правда?
[center]i love you [s]mxIni[/s] Mysql[/center]


Sprite M
Ст. сержант
Ст. сержант
Аватара
Sprite M
Ст. сержант
Ст. сержант
Сообщения: 83
Зарегистрирован: 5 июня 2013
С нами: 10 лет 10 месяцев

#2 Sprite » 5 июля 2013, 9:47

Кто нибудь пробовал?

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1611
Зарегистрирован: 5 апреля 2013
С нами: 11 лет

#3 Дим » 5 июля 2013, 10:01

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

Микроразметка рейтинга новостей в DLE.jpg
Микроразметка рейтинга новостей в DLE.jpg (27.9 КБ) 8416 просмотров
[center]i love you [s]mxIni[/s] Mysql[/center]

Sprite M
Ст. сержант
Ст. сержант
Аватара
Sprite M
Ст. сержант
Ст. сержант
Сообщения: 83
Зарегистрирован: 5 июня 2013
С нами: 10 лет 10 месяцев

#4 Sprite » 5 июля 2013, 10:32

Ещё скажи что это твой сайт :lol:

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1611
Зарегистрирован: 5 апреля 2013
С нами: 11 лет

#5 Дим » 5 июля 2013, 10:37

Sprite писал(а):Ещё скажи что это твой сайт :lol:

Специально для тебя в чате написал...
[center]i love you [s]mxIni[/s] Mysql[/center]

Sprite M
Ст. сержант
Ст. сержант
Аватара
Sprite M
Ст. сержант
Ст. сержант
Сообщения: 83
Зарегистрирован: 5 июня 2013
С нами: 10 лет 10 месяцев

#6 Sprite » 5 июля 2013, 10:45

:shock: Извеняюсь

Miranda F
Старшина
Старшина
Аватара
Miranda F
Старшина
Старшина
Сообщения: 143
Зарегистрирован: 5 июля 2013
С нами: 10 лет 9 месяцев

#7 Miranda » 6 июля 2013, 12:26

Красиво в поисковике смотрится
Изображение


Вернуться в «DLE»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 2 гостя