Разделы с Новостями и Блогами улучшить под E-E-A-T факторы
В рассмотрении
Текущий вариант bitrix:news предполагает наличие соответствующих полей, таких как отображение количества просмотров, даты создания/изменения, кем создано и рейтинг статьи, но при этом в разделе или при детальном просмотре это нигде не отображается. Для соответствия современным механизмам поиска и ранжирования просто необходима реализация всего этого в шаблоне для отображения пользователям и вывода в Schema для поисковиков.
Понравилась
Немного дополню: сделать этот вывод самостоятельно не проблема, так же как и добавить соответствующую микроразметку под Article и NewsArticle, но если всё будет с коробки то это облегчит работу большинству админов.
Немного дополню: сделать этот вывод самостоятельно не проблема, так же как и добавить соответствующую микроразметку под Article и NewsArticle, но если всё будет с коробки то это облегчит работу большинству админов.
<?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/ оставленный предками, возможно что-то сильно не обновлённое мешает.
<?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/ оставленный предками, возможно что-то сильно не обновлённое мешает.
Комментарии на данной страницы заблокированы!