Разделы с Новостями и Блогами улучшить под E-E-A-T факторы

Дмитрий добавил(а) 20 дн. назад
В рассмотрении

Текущий вариант bitrix:news предполагает наличие соответствующих полей, таких как отображение количества просмотров, даты создания/изменения, кем создано и рейтинг статьи, но при этом в разделе или при детальном просмотре это нигде не отображается. Для соответствия современным механизмам поиска и ранжирования просто необходима реализация всего этого в шаблоне для отображения пользователям и вывода в Schema для поисковиков.

Ответы (2)

фото
1

Немного дополню: сделать этот вывод самостоятельно не проблема, так же как и добавить соответствующую микроразметку под Article и NewsArticle, но если всё будет с коробки то это облегчит работу большинству админов.

фото
1

<?if(!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();?>
<?$this->setFrameMode(true);?>
<?
// get element
$arItemFilter = CNext::GetCurrentElementFilter($arResult['VARIABLES'], $arParams);

global $APPLICATION, $arRegion;
$APPLICATION->SetAdditionalCSS(SITE_TEMPLATE_PATH.'/css/animation/animate.min.css');

// Установка Schema.Article (начало) 
if($arParams['CACHE_GROUPS'] == 'Y')
{
	$arItemFilter['CHECK_PERMISSIONS'] = 'Y';
	$arItemFilter['GROUPS'] = $GLOBALS["USER"]->GetGroups();
}

$arElement = CNextCache::CIblockElement_GetList(
    array(
        'CACHE' => array(
            'TAG'   => CNextCache::GetIBlockCacheTag($arParams['IBLOCK_ID']),
            'MULTI' => 'N'
        )
    ),
    $arItemFilter,
    false,
    false,
    array(
        'ID', 
        'NAME', 
        'PREVIEW_TEXT', 
		'DETAIL_TEXT',
        'DETAIL_PAGE_URL', 
        'PREVIEW_PICTURE', 
        'DETAIL_PICTURE', 
        'DATE_CREATE',
        'TIMESTAMP_X',
        'META_DESCRIPTION',
		'CREATED_USER_NAME'
    )
);

$arSite = \CSite::GetByID(SITE_ID)->Fetch();

// Формируем полный URL статьи
$articleURL = "https://" . $_SERVER['SERVER_NAME'] . $arElement['DETAIL_PAGE_URL'];

// Приводим даты к формату ISO 8601: YYYY-MM-DDTHH:MM:SS
$datePublished = date("Y-m-d\TH:i:s", strtotime($arElement['DATE_CREATE']));
$dateModified  = date("Y-m-d\TH:i:s", strtotime($arElement['TIMESTAMP_X']));

// Определяем изображение: используем PREVIEW_PICTURE, если нет — DETAIL_PICTURE
if ($arElement['PREVIEW_PICTURE']) {
	$imageURL = "https://" . $_SERVER['SERVER_NAME'] . CFile::GetPath($arElement['PREVIEW_PICTURE']);
} elseif ($arElement['DETAIL_PICTURE']) {
	$imageURL = "https://" . $_SERVER['SERVER_NAME'] . CFile::GetPath($arElement['DETAIL_PICTURE']);
} else {
	$imageURL = "";
}

// Получаем описание: если задан META_DESCRIPTION, иначе очищенный PREVIEW_TEXT
$description = !empty($arElement['META_DESCRIPTION'])
	? $arElement['META_DESCRIPTION']
	: strip_tags($arElement['PREVIEW_TEXT']);

//логотип организации
$logosrc = CNext::ShowLogo();
preg_match('~(?<=src=")[^"]+(?=")~', $logosrc, $arr);
$relativeLogoURL = $arr[0] ?? '';
// Формируем полный URL, добавляя протокол и доменное имя
$logoURL = "https://" . $_SERVER['SERVER_NAME'] . $relativeLogoURL;

//Получаем автора статьи
$author = !empty($arElement['CREATED_USER_NAME']) ? $arElement['CREATED_USER_NAME'] : "";
// Удаляем всё, что находится в круглых скобках, вместе со скобками
$author = preg_replace('/\([^)]*\)/', '', $author);
$author = trim($author);

// Внедрение микроразметки в код страницы
$arSchema = array(
	"@context" => "https://schema.org",
	"@type"    => "Article",
	"mainEntityOfPage" => array(
		"@type" => "WebPage",
		"@id"   => $articleURL
	),
	"headline"     => $arElement['NAME'],
	"image"        => $imageURL,
	"description"  => $description,
	"articleBody"  => strip_tags($arElement['DETAIL_TEXT']),
	"datePublished"=> $datePublished,
	"dateModified" => $dateModified,
	"author"       => array(
		"@type" => "Person",
		"name"  => $author
	),
	"publisher"    => array(
		"@type" => "Organization",
		"name"  => $arSite['NAME'],
		"logo"  => array(
			"@type" => "ImageObject",
			"url"   => $logoURL
		)
	)
);
?>
<script type="application/ld+json">
<?= str_replace("'", "\"", CUtil::PhpToJSObject($arSchema, false, true)); ?>

<!-- Установка Schema.Article (конец) -->
<!-- далее старый код из файла  -->
Расположить в /components/bitrix/news/blog/detail.php


<?php
			// Форматируем даты, автора и количество просмотров
			$dateCreate  = !empty($arResult['DATE_CREATE']) ? FormatDate("d.m.Y", strtotime($arResult['DATE_CREATE'])) : "";
			$dateUpdate  = !empty($arResult['TIMESTAMP_X']) ? FormatDate("d.m.Y", strtotime($arResult['TIMESTAMP_X'])) : "";
			$author = !empty($arResult['CREATED_USER_NAME']) ? $arResult['CREATED_USER_NAME'] : "";
			// Удаляем всё, что находится в круглых скобках, вместе со скобками
			$author = preg_replace('/\([^)]*\)/', '', $author);
			$author = trim($author);
			$showCounter = isset($arResult['SHOW_COUNTER']) ? $arResult['SHOW_COUNTER'] : "0";
		?>
<div class="period-wrapper">
	<div class="period">
		<span class="date">Дата создания: <?= $dateCreate ?>  | 
		Дата изменения: <?= $dateUpdate ?> | 
		Автор: <?= $author ?> | 
		Просмотров: <?= $showCounter ?></span>
	</div>
	<?php if ($arResult['SECTIONS']):
		$arResult['SECTIONS'] = current($arResult['SECTIONS']);
	?>
		<span class="section_name">
			// <?= $arResult['SECTIONS']['NAME'] ?>
		</span>
	<?php endif; ?>
</div>
Расположить в /components/bitrix/news.detail/blog/template.php вместо стандартного кода

Код достаточно простой, без дополнительных проверок и вариативности выборов из расчёта что со статьями никто не косячит и всё заполняется правильно.

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

Комментировать
 
Прикрепить файлы