Назад

Реализация истории просмотренных товаров в 1С-Битрикс

Главная
Блог
Реализация истории просмотренных товаров в 1С-Битрикс

История просмотренных товаров — важный элемент персонализации интернет-магазина. Она повышает вовлеченность пользователей, увеличивает конверсию и улучшает поведенческие метрики. В этой статье разберем, как правильно реализовать этот функционал в 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 для ускорения загрузки.

Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи