Редактор темы

Микроразметка на тематику кино по версии schema.org

MaHarder

Местный
Регистрация
9 Июн 2015
Сообщения
1.054
Рейтинг реакций
288
Баллы
83
Возраст
34
Адрес
Xanten
1/3
Автор темы
1452975568_e9occlwoko8ruhkq_ogr5ixxxl4j3hpexhjnof_p3ymrypkwj94qgrtdb3sbc6ky.jpg
Schema.org
Schema.org — это стандарт семантической разметки данных в сети, объявленный поисковыми системами Google, Bing и Yahoo! летом 2011 года.
Цель семантической разметки – сделать интернет более понятным, структурированным и облегчить поисковым системам и специальным программам извлечение и обработку информации для удобного её представления в результатах поиска.
Разметка происходит непосредственно в HTML-коде страниц с помощью специальных атрибутов и не требует создания отдельных экспортных файлов.

Зачем нужна микроразметка
Используя семантическую разметку, вы можете улучшить представление сниппета вашего сайта в результатах поиска.
Сравните сниппеты в поисковой выдаче для страницы сайта, участвующего в партнерской программе Яндекс.Словарей – неразмеченного и размеченного семантической версткой.
  • Сайт не использует семантическую разметку:
1452971803_gxekvu4rjhocd416vus953rg7e4.png
  • Сайт использует семантическую разметку:
1452971775_vhlbtijrohgugrdesyeh_jll0t4.png
Стандарт представляет из себя набор классов, описывающих всевозможные сущности и их свойства. Сейчас их уже несколько сотен. Постоянно идет работа по улучшению стандарта, добавляются новые свойства, уточнятся существующие.
Познакомиться с описанием стандарта можно на официальном сайте в разделе документация.
Также существует неофициальный и пока неполный перевод стандарта на русский язык на сайте: http://ruschema.org/.

От себя добавлю, разметка помогает пользователям ищущим информацию быстро найти нужную ему. Удобно, быстро и доступно 😉
Итак, давайте начнём. Начнём с самого начала, для полной разметки, вы должны создать огромное кол-во доп. полей для правильного вывода информации. Нужно (!) создать следующие поля со следующими названиями (одно поле с функцией "Использовать при желании (можно оставить поле пуcтым)" и "Использовать значения полей как перекрестные гиперссылки "):
contributor или countryOfOrigin (лучше первое) - Страна
copyrightyear - Год
genre - Жанр (если у вас категории являются жанром, то пропускаем)
director - Режиссёр
creator - Сценарист
musicBy - Композитор
editor - Монтаж
producer - Продюсер
provider - Оператор
translator - Перевод / озвучание
actor - Актёры

Эти поля должны называться ИМЕННО ТАК! Никак иначе!!! Не обязательно использовать все поля, но если будете - то только такие! Однако, нам понадобятся другие поля. Поля для: ID с кинопоиска, постера, русского названия, оригинального названия, ссылки(!) для трейлера, ссылки для видео (покажу как реализовать вывод плеера на отдельной странице), продолжительности самого фильма (в формате ЧЧ:ММ:СС). Поле короткой и полной новости будет использовано для описания.

На этой стадии вы должны определиться что вы хотите видеть у себя на сайте.

============================

Начнём с простого. Создаём поля. Далее идём к шаблонам. Открываем fullstory.tpl. В самое начало ставим
Код:
<div itemscope itemtype="http://schema.org/Movie">
<meta itemprop="dateCreated" content="{date=Y-m-d}">
    <meta itemprop="inLanguage" content="ru">
    <meta itemprop="isFamilyFriendly" content="[if xfvalue_age>=16]false[/if][if xfvalue_age<=15]True[/if]">
    [xfgiven_trailer]<link itemprop="trailer" value="[xfvalue_trailer]">[/xfgiven_trailer]
    [xfgiven_video]<link itemprop="video" value="{print-link}">[/xfgiven_video]
а в конец
Код:
</div>
А тут
Код:
<meta itemprop="isFamilyFriendly" content="[if xfvalue_age>=16]false[/if][if xfvalue_age<=15]True[/if]">
я использовал это. Если вы не можете себе этого позволить, то меняем на это
Код:
<meta itemprop="isFamilyFriendly" content="[catlist=X]false[/catlist][not-catlist=X]True[/not-catlist]">
Х меняем на ID категории, которая предназначена для "взрослых" (к.п. Жанр "Эротика"). А если и это вас не устраивает, то вот:
Код:
<meta itemprop="isFamilyFriendly" content="True">

Код:
[xfgiven_trailer]<link itemprop="trailer" value="[xfvalue_trailer]">[/xfgiven_trailer]
[xfgiven_video]<link itemprop="video" value="{print-link}">[/xfgiven_video]
trailer - это название поля, куда вводится ссылка на трейлер. Меняем на своё.
video - это название поля, куда вводится ссылка на видео. Меняем на своё.
{print-link} - об этом ниже

Далее, желательно тег {title} обернуть ссылкой на новость, примерно так:
Код:
<a itemprop="url" href="{full-link}">{title}</a>
itemprop="url" - этот тег нужен для разметки, который указывает на страницу записи.
Далее. Прописываем доп. поля. Пример:
Русское название
Код:
<span itemprop="name">[xfvalue_name]</span>
Оригинальное название
Код:
<span itemprop="alternateName">[xfvalue_nameo]</span>
Продолжительность
Код:
<span itemprop="duration">[xfvalue_time]</span>
ID с кинопоиска
Код:
<noindex><a href="http://www.kinopoisk.ru/level/1/film/{kp_id}/" target="_blank" itemprop="sameAs"><img class="kp" title="Страница на KinoPoisk.ru (откроется в новом окне)" alt="Страница на KinoPoisk.ru (откроется в новом окне)" src="http://cnd.kinospace.org/ratingkpimdb/rating.php?kp_id={kp_id}&style=1&style_type=png&expect=43200"></a></noindex>
Тут использовал этот мод: http://zerocoolpro.biz/forum/threads/parser-kinopoisk-pkinopoisk-v3-3-0-otkrytyj-kod-skachat.392/
{kp_id} - меняем на ваше поле!!!
Постер
Код:
<img itemprop="image" src="{image-1}" title="{title}">
Описание
Код:
<div itemprop="description">{full-story}</div>
Поля меняем на свои

Дальше (опционально), если вы используете вывод кол-во комментариев, то оборачиваем {comments-num} в
Код:
<span itemprop="commentCount">{comments-num}</span>

============================

Открываем comments.tpl
{comment} меняем на
Код:
<span itemprop="comment">{comment}</span>

============================

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

Если вы используете категории движка как жанры, то следуем этим пунктам
ищем
Код:
if( $config['allow_alt_url'] ) $my_cat_link[] = "<a
и
Код:
else $my_cat_link[] = "<a
после добавляем
Код:
itemprop=\"genre\"

Далее ищем дважды
Код:
if( $config['allow_alt_url'] ) $value3[] = "<a
и
Код:
else $value3[] = "<a
после добавляем
Код:
 itemprop=\"" . urlencode( $preg_safe_name ) . "\"
после этого все значения доп. полей, которые имеют включенную функцию перекрёстных ссылок будут выводится в микроразметке как надо.
Теперь, если вы хотите выводить плеер на отдельной странице, нужно понять, что от функции "Печать страницы" нужно будет отказаться, ибо мы будем замещать её.

ищем
Код:
if ($config['allow_search_print']) {

            $tpl->set( '[print-link]', "<a href=\"" . $print_link . "\">" );
            $tpl->set( '[/print-link]', "</a>" );

        } else {

            $tpl->set( '[print-link]', "<a href=\"" . $print_link . "\" rel=\"nofollow\">" );
            $tpl->set( '[/print-link]', "</a>" );

        }
и меняем на
Код:
if ($config['allow_search_print']) {

            $tpl->set( '{print-link}', $print_link  );

        } else {

            $tpl->set( '{print-link}', $print_link  );

        }

============================

Открываем print.tpl

Меняем всё на
Код:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv=Content-Type>
<title>Плеер к {title}</title>
<style>
iframe {
  width: 100%;
  height: 100%;
  display: block;
  margin: 0;
  padding: 0;
  position: absolute;
  top: 0;
  left: 0;
}
</style>
<script type="text/javascript" src="http://сайт/engine/classes/js/jquery.js"></script>
<script type="text/javascript" src="http://сайт/engine/classes/js/jqueryui.js"></script>
<script type="text/javascript" src="http://сайт/engine/classes/js/dle_js.js"></script>
</head>
<body bgcolor="#ffffff" text="#000000">
Вывод плеера, смотрите документацию к плееру или моду
</body>
</html>

============================

Теперь, давайте дадим разметку видеофайлу. Открываем fullstory.tpl.
и после
Код:
<div itemscope itemtype="http://schema.org/Movie">
ставим
Код:
<div itemprop="video" itemscope itemtype="http://schema.org/VideoObject">
    <link itemprop="thumbnail" content="{image-1}" />
    <img itemprop="thumbnailUrl" src="{image-1}" title="{title}" style="display:none;">
    <meta itemprop="description" content="{full-story}" />
    <meta itemprop="name" content="{title}" />
    <meta itemprop="uploadDate" content="{date=Y-m-d}T{date=G:i:s}" />
    <meta itemprop="datePublished" content="{date=Y-m-d}">
    <link itemprop="url" href="{print-link}" />
    <meta itemprop="isFamilyFriendly" content="[if xfvalue_age>=16]false[/if][if xfvalue_age<=15]True[/if]">
    <meta itemprop="duration" content="[xfvalue_time]" />
</div>
Код:
{image-1},[xfvalue_time]
меняем на своё
Код:
<meta itemprop="isFamilyFriendly" content="[if xfvalue_age>=16]false[/if][if xfvalue_age<=15]True[/if]">
аналогия сверху

============================================

Если у вас трейлер подключался при помощи тега video, то открываем engine/classes/parse.classes.php и заменяем функцию
Код:
function build_video( $matches=array() ) {

...

    }

на
Код:
function build_video( $matches=array() ) {
        global $config;

        $url = $matches[1];

        if (!count($this->video_config)) {

            include (ENGINE_DIR . '/data/videoconfig.php');
            $this->video_config = $video_config;

        }

        $get_size = array();
        $sizes = array();

        $get_size = explode( ",", trim( $url ) );

        if (count($get_size) > 1 AND ( stripos ( $get_size[0], "http" ) === false OR stripos ( $get_size[0], "rtmp:" ) === false ) )  {

            $sizes = explode( "x", trim( $get_size[0] ) );

            if (count($sizes) == 2) {

                $width = intval($sizes[0]) > 0 ? intval($sizes[0]) : $this->video_config['width'];
                $height = intval($sizes[1]) > 0 ? intval($sizes[1]) : $this->video_config['height'];

                if (substr ( $sizes[0], - 1, 1 ) == '%') $width = $width."%";
                if (substr ( $sizes[1], - 1, 1 ) == '%') $height = $height."%";

            } else {

                $width = $this->video_config['width'];
                $height = $this->video_config['height'];


            }

        } else {

            $width = $this->video_config['width'];
            $height = $this->video_config['height'];

        }

        if (count($get_size) == 3)  $url = $get_size[1].",".$get_size[2];
        elseif (count($get_size) == 2 AND count($sizes) == 2) $url = $get_size[1];

        $option = explode( "|", trim( $url ) );

        $url = $this->clear_url( $option[0] );

        $type = explode( ".", $url );
        $type = strtolower( end( $type ) );

        if( preg_match( "/[?&;<\[\]]/", $url ) ) {

            return "[video=" . $url . "]";

        }

        if( $option[1] != "" ) {

            $option[1] = htmlspecialchars( strip_tags( stripslashes( $option[1] ) ), ENT_QUOTES, $config['charset'] );
            $decode_url = $url . "|" . $option[1];

        } else
            $decode_url = $url;


        if ( count($sizes) == 2 ) $decode_url = $width."x".$height.",".$decode_url;

        if ( stripos ( $url, "rtmp:" ) === false ) $detect_rtmp = false; else $detect_rtmp = true;

        if( $type == "flv" OR $type == "f4v" OR $type == "mp4" OR $type == "m4v" OR $type == "m4a" OR $type == "mov" OR $detect_rtmp) {

            if( $this->video_config['flv_watermark'] ) $watermark = "&amp;showWatermark=true&amp;watermarkPosition={$this->video_config['flv_watermark_pos']}&amp;watermarkMargin=0&amp;watermarkAlpha={$this->video_config['flv_watermark_al']}&amp;watermarkImageUrl={THEME}/dleimages/flv_watermark.png";
            else $watermark = "&amp;showWatermark=false";

            if( $option[1] != "" ) {

                $preview = "&amp;showPreviewImage=true&amp;previewImageUrl=".$option[1];

            } else {
           
                $preview = "&amp;showPreviewImage=true&amp;previewImageUrl={THEME}/dleimages/videopreview.jpg";
           
            }

            $id_player = md5( microtime() );

            $list = explode( ",", $url );
            $url = trim($list[0]);

            if (count($list) > 1 ){

                $url_hd = trim($list[1]);

            } else {

                $url_hd = '';
            }

            if ( $detect_rtmp ) {

                $video_url = "&amp;rtmpURI=".$url."&amp;videoUrl=".$url_hd;

            } else {

                $video_url = "&amp;videoUrl=".$url."&amp;videoHDUrl=".$url_hd;

            }

            if( $type == "mp4" OR $type == "m4v" OR $type == "m4a" OR $type == "mov" ) {

                if( $option[1] != "" ) {

                    $preview = $option[1];

                } else {

                    $preview = "";
                }
           
                if( $this->video_config['preload'] ) $preload = "metadata";
                else $preload = "none";
       
                return "<!--dle_video_begin:{$decode_url}--><video itemprop=\"trailer\" itemscope itemtype=\"http://schema.org/VideoObject\" width=\"{$width}\" height=\"{$height}\" preload=\"{$preload}\" poster=\"{$preview}\" controls=\"controls\">
                        <source itemprop=\"url\" type=\"video/mp4\" src=\"{$url}\"></source>
                        <link itemprop=\"thumbnail\" href=\"{$preview}\" />
                        <meta itemprop=\"description\" content=\"Трейлер к фильму\" />
                        <meta itemprop=\"name\" content=\"Трейлер к фильму\" />
                        </video><!--dle_video_end-->";

            } else {

                        return "<!--dle_video_begin:{$decode_url}--><object itemprop=\"trailer\" itemscope itemtype=\"http://schema.org/VideoObject\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0\" width=\"{$width}\" height=\"{$height}\" id=\"Player-{$id_player}\">
                            <param name=\"movie\" value=\"" . $config['http_home_url'] . "engine/classes/flashplayer/media_player_v3.swf?stageW={$width}&amp;stageH={$height}&amp;contentType=video{$video_url}{$watermark}{$preview}&amp;isYouTube=false&amp;rollOverAlpha=0.5&amp;contentBgAlpha=0.8&amp;progressBarColor=0xFFFFFF&amp;defaultVolume=1&amp;fullSizeView=3&amp;showRewind=false&amp;showInfo=false&amp;showFullscreen=true&amp;showScale=true&amp;showSound=true&amp;showTime=true&amp;showCenterPlay=true&amp;autoHideNav=true&amp;autoHideNavTime=3&amp;videoLoop=false&amp;defaultBuffer=3\" />
                            <param name=\"allowFullScreen\" value=\"true\" />
                            <param name=\"scale\" value=\"noscale\" />
                            <param name=\"quality\" value=\"high\" />
                            <param name=\"bgcolor\" value=\"#000000\" />
                            <param name=\"wmode\" value=\"opaque\" />
                            <embed src=\"" . $config['http_home_url'] . "engine/classes/flashplayer/media_player_v3.swf?stageW={$width}&amp;stageH={$height}&amp;contentType=video{$video_url}{$watermark}{$preview}&amp;isYouTube=false&amp;rollOverAlpha=0.5&amp;contentBgAlpha=0.8&amp;progressBarColor=0xFFFFFF&amp;defaultVolume=1&amp;fullSizeView=3&amp;showRewind=false&amp;showInfo=false&amp;showFullscreen=true&amp;showScale=true&amp;showSound=true&amp;showTime=true&amp;showCenterPlay=true&amp;autoHideNav=true&amp;autoHideNavTime=3&amp;videoLoop=false&amp;defaultBuffer=3\" quality=\"high\" bgcolor=\"#000000\" wmode=\"opaque\" allowFullScreen=\"true\" width=\"{$width}\" height=\"{$height}\" align=\"middle\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\"></embed>
                            <link itemprop=\"url\" href=\"{$url}\">
                            <link itemprop=\"thumbnail\" href=\"{$preview}\" />
                            <meta itemprop=\"description\" content=\"Трейлер к фильму\" />
                            <meta itemprop=\"name\" content=\"Трейлер к фильму\" />
                            </object><!--dle_video_end-->";
            }

        } elseif( $type == "avi" OR $type == "divx" OR $type == "mkv" ) {

            $url = htmlspecialchars( trim( $url ) , ENT_QUOTES, $config['charset'] );

            return "<!--dle_video_begin:{$decode_url}--><object classid=\"clsid:67DABFBF-D0AB-41fa-9C46-CC0F21721616\" width=\"{$width}\" height=\"{$height}\" codebase=\"http://go.divx.com/plugin/DivXBrowserPlugin.cab\">
                <param name=\"custommode\" value=\"none\" />
                <param name=\"mode\" value=\"zero\" />
                <param name=\"minVersion\" value=\"2.0.0\" />
                <param name=\"src\" value=\"{$url}\" />
                <param name=\"previewImage\" value=\"{$option[1]}\" />
                <embed itemprop=\"trailer\" type=\"video/divx\" src=\"{$url}\" custommode=\"none\" width=\"{$width}\" height=\"{$height}\" mode=\"zero\" previewImage=\"{$option[1]}\" minVersion=\"2.0.0\" pluginspage=\"http://go.divx.com/plugin/download/\">
                </embed>
                </object><!--dle_video_end-->";

        } else {
       
            return "[video=" . $url . "]";
   
        }

    }
затем перестраиваем публикации и чистим кеш

=============================

Думаю, на этом всё. если, что-то вспомнится - дополню.


P.S. если у вас уже есть поля и вы захотите заменить на вышеупомянутые, то вам следует сначала сделать так.
  1. идём в phpMyAdmin
  2. в таб SQL
  3. вставляем:
    Код:
    UPDATE `dle_post` SET `xfields`=REPLACE(`xfields`,СтароеНазвание','НовоеНазвание');
  4. открываем /engine/data/xfields.txt и меням поля
  5. идём в админку
  6. в управление доп. полями
  7. выбираем любое на редактирование и пересохраняем его
  8. чистим кеш

=========================

Проверить результат можно здесь: Яндекс или Google

Яндекс может выдавать ошибку из-за того, что некоторые теги прописываются маленькими буквами - не волнуйтесь, так и с датой.
=========================

Демонстрация
http://maxim-harder.de/dle/hacks/30-mikrorazmetka-na-tematiku-kino-po-versii-schemaorg.html

=========================

обновил и в архив кинул
 

Вложения

Последнее редактирование:
а разве meta и link по разметке не должны быть в пределах тега head ?
 
Все эти разметки - как покойнику кадило! Толку от них нет совершенно никакого, кроме красивого вида в поиске. Только вот на позиции разметка не влияет никак!
 
такую делаю nowheredev.ru/developments/php/79-metagen-delaem-razmetku-open-graph-v-dle.html
 

Вложения

  • Screenshot_4.png
    Screenshot_4.png
    150,2 КБ · Просмотры: 288
Парни, не майтесь дурью с этими разметками, не поможет никак! Лучше займитесь контентом для сайта, не тратьте свое время на всякую чушь!
 
yuris но ты прям платон. а вот что яндекс пишет
Screenshot_5.png
 
Автор темы
у меня вся разметка там в head
 
@Romantv, объясняю последний раз и бесплатно! 😀 Разметка улучшает вид в поиске, делает его привлекательней для простого юзера и возможно кликабельней(!). НО! Если нужные вам запросы сидят в глубокой жопе, то им разметка не даст "зеленый коридор" из попы в топ и соответственно вся красота от этой разметки в пользу бедных! Согласен, был допустим нужный запрос на 4о-ом месте, благодаря разметке, оказался скажем на 35-ом, что, сильно от этого трафа прибавится? Еще раз говорю, занимайтесь контентом, продвигайте нужные запросы в топ и тогда вам эта хуета и даром не нужна будет!
 
yuris но да,ты прав! а они там дураки,пишут
– Если я использую разметку, мой сайт будет ранжироваться лучше?

Во многих случаях использование разметки делает ваш сайт заметнее в Поиске Яндекса и таким образом привлекает больше целевой аудитории. Яндекс в свою очередь заинтересован в том, чтобы пользователи решали задачи, с которыми они пришли на Поиск. Одна из наших метрик качества так и называется "счастье пользователя". Очевидно, что сайты, повышающие "счастье" будут ранжироваться выше.
 
@Romantv, ну ни как при наличии разметки из задницы не прыгнешь в топ, ну ни как! Понятие "будут ранжироваться выше" не означает, что если ты сидел на 50- месте, то бац, замонстрячил разметку и моментально засел царем в топе! Ранжироваться выше - это на пару позиций, не больше!
 
yuris но да,ты прав! а они там дураки,пишут
– Если я использую разметку, мой сайт будет ранжироваться лучше?

Во многих случаях использование разметки делает ваш сайт заметнее в Поиске Яндекса и таким образом привлекает больше целевой аудитории. Яндекс в свою очередь заинтересован в том, чтобы пользователи решали задачи, с которыми они пришли на Поиск. Одна из наших метрик качества так и называется "счастье пользователя". Очевидно, что сайты, повышающие "счастье" будут ранжироваться выше.
А можно я на своем сайте буду дозы раздавать ? Вроде бы это повышает счастье
 
yuris одна разметка тоже все не решает,комплексно
 
@yuris, на пару позиций на 10-й странице - это одно, но пара позиций на 1-й странице - это весьма ощутимо. К тому же нужно работать на перспективу. Любите своих юзверей и ПСы полюбят вас.
 
@Romantv, да разметка по большей части вообще ничего не решает, контент - вот двигатель прогресса, а все остальное нужно, но не столь важно!
 

Похожие темы Последние темы Популярные темы

Назад
Сверху