• Автор:

    Flesha
  • Добавлено:

    янв 16, 2013
  • Комментариев:

    0
  • Просмотров:

    3 328

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

Микроразметка рейтинга новостей в 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="https://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="https://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, хороший трафик, рост позиций, горы бабла…вы такие лежите на гамаке, попиваете коктейль и смотрите на пальмы… Мечтать не вредно, правда?

С уважением, Александр Алаев
Ссылка на статью: alaev.info dle
Вернуться
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.