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

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

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


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

В отличие от прошлого поста, где вероятность срабатывания наших доработок была равна 100%, то в этот раз наши доработки сработают с вероятностью «повезет — не повезет». Доигрались мы с вами, стали злоупотреблять подобной микроразметкой, и Google отрубил для большинства сайтов расширенные сниппеты. Тем не менее, мизерная вероятность включения для вашего сайта подобной красоты все же существует. Так что грех не попытаться!

Смотрите, вот нашел пример у Гугла для своего же блога:
Микроразметка рейтинга новостей в DLE для Google по версии schema.org


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

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

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

Модификация рейтинга новостей в DLE под микроразметку

Итак, нам придется допилить несколько файлов движка, чтобы все заработало так, как мы этого хотим, а так же применим несколько хитростей, но обо всем по порядку…

Приступим, открываем файл /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.
Должны получить что-то подобное:
Микроразметка рейтинга новостей в DLE для Google по версии schema.org


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

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

Теперь скрестим пальцы и мечтаем, чтобы микроразметка рейтинга новостей понравилась Google и он ее включил. А там и серьезный рост CTR, хороший трафик, рост позиций, горы бабла…вы такие лежите на гамаке, попиваете коктейль и смотрите на пальмы… Мечтать не вредно, правда?


Скачивание доступно только для зарегистрированных
НАШИ НОВОСТИ
Опубликовано 04 апрель 2014
Представляю вашему вниманию шаблон онлайн кинотеатра с глубокой настройкой под свои нужны OST-ARENA.RU Читать далее...
Опубликовано 18 март 2014
Представляю вашему вниманию, адаптивный новостной шаблон Reades News. Адаптивный дизайн подразумевает, что шаблон будет одинаково корректно отображаться во всех устройствах. Шаблон отлично подойдет для медийных новостей и не только. Обязательно посмотрите видеозапись работы Читать далее...
Опубликовано 16 март 2014
Дизайн Zerotheme, адаптирован для DLE 10.1 by Yurets. Шаблон zBoomMusic позиционируется как шаблон для музыкального портала или музыкального блога. Вверху шаблона расположен слайдер, под слайдером Топ новостей, далее последние добавленные новости. Читать далее...