История просмотренных товаров — важный элемент персонализации интернет-магазина. Она повышает вовлеченность пользователей, увеличивает конверсию и улучшает поведенческие метрики. В этой статье разберем, как правильно реализовать этот функционал в 1С-Битрикс, оптимизировать его для SEO и повысить производительность.
Преимущества истории просмотренных товаров
Улучшение пользовательского опыта – покупатели могут быстро вернуться к интересующим товарам.
Рост конверсии – повторный показ стимулирует покупку.
Снижение процента отказов – увеличивает время на сайте.
SEO-польза – снижает дубли контента (если блок скрыт от индексации) и улучшает внутреннюю перелинковку.
SEO-рекомендация:
Добавьте в блок микроразметку Schema.org (Product, ItemList) для улучшения отображения в поисковой выдаче.
Пошаговая реализация в Битрикс
1. Получение ID просмотренных товаров
Используем стандартный API Битрикс для работы с историей просмотров.
Код с кешированием и поддержкой неавторизованных пользователей
<?php
use Bitrix\Main\Data\Cache;
// Получаем ID пользователя (FUSER_ID)
$basketUserId = (int)CSaleBasket::GetBasketUserID(false);
// Если пользователь неавторизован, используем cookies
if (!$USER->IsAuthorized()) {
$arViewed = json_decode($_COOKIE['VIEWED_PRODUCTS'] ?? '[]', true) ?: [];
} else {
// Кешируем запрос на 1 час
$cache = Cache::createInstance();
$cacheKey = 'viewed_products_' . $basketUserId;
if ($cache->initCache(3600, $cacheKey, '/viewed/')) {
$arViewed = $cache->getVars();
} elseif ($cache->startDataCache()) {
$arViewed = [];
if ($basketUserId > 0) {
$viewedIterator = \Bitrix\Catalog\CatalogViewedProductTable::getList([
'select' => ['ELEMENT_ID'],
'filter' => ['=FUSER_ID' => $basketUserId, '=SITE_ID' => SITE_ID],
'order' => ['DATE_VISIT' => 'DESC'],
'limit' => 12 // Оптимальное количество для вывода
]);
while ($item = $viewedIterator->fetch()) {
$arViewed[] = $item['ELEMENT_ID'];
}
}
$cache->endDataCache($arViewed);
}
}
?>2. Получение данных о товарах
Добавляем фильтр по наличию и оптимизируем запрос.
Оптимизированный код с поддержкой SEO-полей
<?
if (!empty($arViewed) && CModule::IncludeModule("iblock")) {
$arItems = [];
$res = CIBlockElement::GetList(
["ID" => "ASC"],
[
"ID" => $arViewed,
"ACTIVE" => "Y",
"CATALOG_AVAILABLE" => "Y", // Только товары в наличии
"CHECK_PERMISSIONS" => "Y" // Проверка прав доступа
],
false,
["nPageSize" => 12],
[
"ID",
"NAME",
"DETAIL_PAGE_URL",
"PREVIEW_PICTURE",
"CATALOG_PRICE_1",
"PROPERTY_ARTICLE", // Доп. SEO-свойства
"IPROPERTY_VALUES" // Мета-теги
]
);
while ($arItem = $res->GetNext()) {
$arItem["PICTURE_SRC"] = CFile::GetPath($arItem["PREVIEW_PICTURE"]);
$arItems[] = $arItem;
}
}
?>3. Вывод товаров в шаблоне (SEO-оптимизированный)
Добавляем микроразметку и lazy loading.
<?if (!empty($arItems)):?>
<section class="viewed-products" aria-label="Ранее просмотренные товары">
<h2>Вы смотрели ранее</h2>
<div class="product-list" itemscope itemtype="http://schema.org/ItemList">
<?foreach ($arItems as $item):?>
<div class="product-card" itemprop="itemListElement" itemscope itemtype="http://schema.org/Product">
<a href="<?=$item['DETAIL_PAGE_URL']?>" itemprop="url">
<img
src="<?=$item['PICTURE_SRC']?>"
alt="<?=htmlspecialchars($item['NAME'])?>"
loading="lazy"
itemprop="image"
>
<h3 itemprop="name"><?=$item['NAME']?></h3>
<?if ($item['CATALOG_PRICE_1'] > 0):?>
<div itemprop="offers" itemscope itemtype="http://schema.org/Offer">
<meta itemprop="price" content="<?=$item['CATALOG_PRICE_1']?>">
<meta itemprop="priceCurrency" content="RUB">
<span class="price">
<?=number_format($item['CATALOG_PRICE_1'], 0, '', ' ')?> ₽
</span>
</div>
<?endif;?>
</a>
</div>
<?endforeach;?>
</div>
</section>
<?endif;?>SEO-оптимизация и улучшения
1. Ускорение загрузки
-
Lazy loading (
loading="lazy") для изображений. -
Кеширование запросов (как в примере выше).
-
Оптимизированный SQL (используем
CIBlockElement::GetListFastдля больших каталогов).
2. Микроразметка Schema.org
-
Улучшает отображение в поисковой выдаче.
-
Помогает поисковым системам понимать структуру блока.
3. Адаптивность и доступность
-
Mobile-friendly (резиновая верстка).
-
ARIA-атрибуты (
aria-label) для улучшения доступности.
4. Дополнительные фичи
- AJAX-сохранение просмотров (без перезагрузки страницы).
- Рекомендации на основе истории (интеграция с CRM).
- Аналитика (отслеживание кликов через Яндекс.Метрику).
Заключение
Реализация истории просмотренных товаров в 1С-Битрикс улучшает UX и повышает продажи. Добавление кеширования, микроразметки и lazy loading делает блок быстрым и SEO-дружелюбным.
Дальнейшее развитие:
-
Интеграция с Bitrix Machine Learning для умных рекомендаций.
-
Добавление кеширования в Redis для высоконагруженных сайтов.
-
Использование HTTP/2 Server Push для ускорения загрузки.