Просто хочу поделиться.
В конечном счете микроразметка JSON выглядит так на моем сайте:
<script type="application/ld+json">
{
"@context": "http://schema.org/",
"@type": "NewsArticle",
"headline": "Елисеев выиграл спринт на летнем чемпионате России",
"author": "Николай Довженко",
"image": "http://wcbiathlon.ru/images/phh-b/disp/eliseev-1.jpg",
"description": "Матвей Елисеев выиграл мужскую спринтерскую гонку на чемпионате России по летнему биатлону. Представитель Москвы не допустил ни одного промаха и...",
"publisher" : {
"@type" : "Organization",
"name" : "Wcbiathlon",
"logo" : "http://wcbiathlon.ru/templates/rt_solarsentinel_j15/images/header/blue/header-bg400.jpg"
},
"url": "http://wcbiathlon.ru/news/5510-mspr-rusl.html",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://wcbiathlon.ru/news/5510-mspr-rusl.html"
},
"datePublished": "2017-09-23"
}
</script>
Вставить в head у меня не получилось, да это и не нужно.
Заходим в /com_content/article/default.php. Или с корня сайта, или в папке вашего шаблона.
Вставляем вот такой php код
<?php
$doc = new DOMDocument();
$doc->loadHTML($this->article->introtext);
$xpath = new DOMXPath($doc);
$src = $xpath->evaluate("string(//img/@src)"); # "/images/image.jpg"
$timage= 'http://wcbiathlon.ru/images/phh-b/1314/logo/header.jpg';
if($src!="")
{
if(strpos($src,"http://wcbiathlon.ru/")===false)
$src="http://wcbiathlon.ru/".$src;
$timage=$src;
}
$k = trim(preg_replace('/\s\s+/', ' ', strip_tags($this->article->introtext)));
$k1=explode(" ",$k);
$k1=array_slice($k1,0,20);
$k=implode(" ",$k1)."...";
$doc =& JFactory::getDocument();
?>
По умолчанию берется первая картинка, вставленная через обычный редактор.
Если картинок в материале нет, то должна быть дефолтная, для этого есть строка:
$timage= '
http://wcbiathlon.ru/images/phh-b/1314/logo/header.jpg';И теперь весь JSON вставляется таким образом: (в этом же файле)
<script type="application/ld+json">
{
"@context": "http://schema.org/",
"@type": "NewsArticle",
"headline": "<?php echo $this->article->title ?>",
"author": "<?php echo $this->article->author ?>",
"image": "<?php echo $timage ?>",
"description": "<?php echo $k ?>",
"publisher" : {
"@type" : "Organization",
"name" : "Имя вашей организации",
"logo" : "ссылка на логотип"
},
"url": "<?php echo JURI::current()?>",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "<?php echo JURI::current()?>"
},
"datePublished": "<?php echo JHTML::_('date', $this->article->created, JText::_('DATE_FORMAT_JS1')); ?>"
}
</script>
Также нужно подкорректировать дату, чтобы она выводилась год-месяц-число.
Для этого идем в /language/ru-RU/ru-RU.ini
И правим там строчку
DATE_FORMAT_JS1
На DATE_FORMAT_JS1=%Y-%m-%d
Проходит валидацию, хоть и выдает 2 предупреждения.
Можно еще добавить:
"dateModified" : "<?php echo JHTML::_('date', $this->article->modified, JText::_('DATE_FORMAT_JS1')); ?>"
Но если материал никогда не изменялся, то почему то выдает дату 1999-11-30. Не знаю чем это чревато, поэтому решил просто не добавлять.
P.S. Если хотите, чтобы ваши материалы красиво выводились и в социальных сетях, то добавьте внутрь php кода еще вот это:
$doc->addCustomTag( '
<meta property="og:title" content="'.$this->escape($this->article->title).'"/>
<meta property="og:url" content="'.JURI::current().'"/>
<meta property="og:image" content="'.$timage.'"/>
<meta property="og:site_name" content="site.ru"/>
<meta property="og:description" content="'.$k.'"/>
');