Главная » Хаки DLE » Микроразметка рейтинга новостей в DLE для Google

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

  • Хаки DLE

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

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

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

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


*(Далее от автора) — мой блог работает на WordPress, а разметка фейковая, я привожу его тут просто в качестве примера работы разметки.

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

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

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

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

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

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

Приступим, открываем файл /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

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

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

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

Автор: Александр Алаев aka АлаичЪ (alaev.info)

источник: alaev.info

Ключевые слова по теме Микроразметка рейтинга новостей в DLE для Google: микроразметка рейтинга новостей, оптимизция DLE, микроразметка для Google, сниппет, Алаев, АлаичЪ