20-07-2017, 14:44
Микроразметка рейтинга новостей в DLE для Google и Yandex

Микроразметка (семантическая разметка) от Schema.org и её роль в продвижении сайта. Это в буквальном смысле «выдуманный» синтаксис HTML атрибутов, созданный с целью чёткого обозначения роли конкретного участка сайта, а также передачи информации для парсеров (поисковых систем, социальных сетей, любых других ботов).
Существует несколько никак не связанных между собой видов микроразметки, привожу их в порядке убывания популярности:
Open Graph;
Schema.org;
Микроформаты;
FOAF;
Data Vocabulary;
Dublin Core;
Good Relations.
Каждый из них был создан различными командами энтузиастов и служит различным целям. Сегодня мы остановимся на микроразметке от Schema.org
Микроразметка появилась в 2011 году. Основная суть использования – расширенные сниппеты в результатах поиска, что дает надежду на повышение релевантности.
Правильно составленная микроразметка страницы даёт некоторые гарантии о более полном и правильном описании этой страницы в поисковой выдаче. Чтобы лучше понять о чём речь, сравните, как выделяется в результатах поиска сайт с рейтингом (благодаря микроразметке) и без рейтинга...

Вариант вывода страницы в поиске Google с микроразметкой

Вариант вывода страницы в поиске Google без микроразметки
Вероятность срабатывания микроразметки в DLE не очень велика, приходится надеяться на «повезет — не повезет». Многие вебмастера стали злоупотреблять подобной микроразметкой, и Google отключил для большинства сайтов расширенные сниппеты. Тем не менее, мизерная вероятность включения для вашего сайта подобной красоты все же существует. Так что грех не попытаться... И так, начнем!
Модификация рейтинга новостей в DLE под микроразметку (устанавливать можно на версиях DLE от 9.6 и до актуальной на сегодняшнее воемя 10.3)
— Обязательная настройка скрипта! Настройка групп пользователей -> Гости -> Вкладка «Новости» -> Разрешить выставление рейтинга новостей: Да.
— Вывод рейтинга со страниц коротких новостей shortstory.tpl рекомендуется убрать...
Открываем файл /engine/modules/functions.php и находим:
function ShowRating($id, $rating, $vote_num, $allow = true) {
global $lang;
if( $rating AND $vote_num ) $rating = round( ($rating / $vote_num), 0 );
else $rating = 0;
$rating = $rating * 20;
if( !$allow ) {
$rated = <<<HTML
<div class="rating">
<ul class="unit-rating">
<li class="current-rating" style="width:{$rating}%;">{$rating}</li>
</ul>
</div>
HTML;
return $rated;
}
$rated = <<<HTML
<div id='ratig-layer-{$id}'><div class="rating">
<ul class="unit-rating">
<li class="current-rating" style="width:{$rating}%;">{$rating}</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><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) {
Заменить на следующий код:
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 {
Открываем файл /Ваш шаблон/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
Должно получиться что-нибудь следующее для полной новости:

Еще раз напомню, что вероятность появления такого сниппета, как показывает нам инструмент проверки крайне мала, но она есть!
Более подробно про данный вариант микроразметки можно прочитать в мануалах Google. Там же приведены все три способа разметки: микроданные, микроформаты и RDFa. В рассмотренном случае я решил использовать микроданные, никакой принципиальной разницы между этими вариантами нет, они работают одинаково.
Теперь скрестим пальцы и мечтаем, чтобы микроразметка рейтинга новостей понравилась Google и он ее включил в результаты поиска. А там и серьезный рост CTR, хороший трафик, рост позиций, горы бабла…
Спасибо за внимание, друзья, пишите комментарии и задавайте вопросы.
Источник: alaev.info