Product Recommendation System for 1С-Bitrix

You are losing up to 30% of revenue if your 1С-Bitrix online store lacks personalized recommendations. A buyer comes for a specific product but sees no related items, receives no suggestions based on their interests—and leaves for a competitor. We solve this problem by implementing recommendation sy

Our competencies:

Frequently Asked Questions

You are losing up to 30% of revenue if your 1С-Bitrix online store lacks personalized recommendations. A buyer comes for a specific product but sees no related items, receives no suggestions based on their interests—and leaves for a competitor. We solve this problem by implementing recommendation systems that increase the average order value by 15–25% and conversion to purchase. 10+ years of experience, certified specialists, guaranteed results.

Why Personalization Works So Well

Personalized recommendations work because they reduce cognitive load on the buyer. Instead of browsing hundreds of products, they see only relevant options. Algorithms analyze user behavior—views, cart additions, purchases—and select items likely to interest them. Compare: in our practice, collaborative filtering yields 30% higher CTR than content-based when there are 1000+ actions per product. McKinsey research shows that personalization increases revenue by 10-30%.

How Recommendation Algorithms Boost Conversion

The choice of algorithm determines recommendation accuracy. Let's look at the main approaches.

Content-based filtering—we recommend products similar to the viewed one by attributes: category, price, tags. Works without history, suitable for new users.

function getContentBasedRecommendations(int $productId, int $limit = 10): array { $product = \CIBlockElement::GetByID($productId)->GetNext(); $iblockId = $product['IBLOCK_ID']; $price = \CPrice::GetBasePrice($productId)['PRICE']; $sectionId = $product['IBLOCK_SECTION_ID']; // Товары из той же категории в ценовом диапазоне ±30% $result = \CIBlockElement::GetList( ['RAND' => 'ASC'], [ 'IBLOCK_ID' => $iblockId, 'IBLOCK_SECTION_ID' => $sectionId, '!ID' => $productId, '>=CATALOG_PRICE_1' => $price * 0.7, '<=CATALOG_PRICE_1' => $price * 1.3, 'ACTIVE' => 'Y', ], false, ['nPageSize' => $limit], ['ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_PICTURE'] ); $items = []; while ($item = $result->GetNext()) { $items[] = $item; } return $items; } 

The algorithm is simple to implement and works instantly, but does not consider individual user tastes.

Collaborative filtering—"users who viewed this product also viewed..." Requires accumulated view and purchase history, but provides more personalized recommendations. We collect data from:

  • b_sale_basket and b_sale_order—real purchases.
  • Custom table custom_product_views—product page views.
  • b_sale_fuser—guest users.

Collaborative filtering performance is 30% higher than content-based in terms of CTR when there are 1000+ actions per product.

Matrix factorization (ALS/SVD)—advanced algorithm, requires libraries (Python: implicit, surprise). We offload recommendation calculation to a separate Python microservice, results are stored in Redis/PostgreSQL, Bitrix only reads them. This approach gives up to 12% CTR increase on large catalogs.

Collecting Behavioral Data

// Трекинг просмотра товара // Вызывается в шаблоне компонента catalog.element $userId = $USER->GetID() ?: 0; $fuserId = (int)\Bitrix\Sale\Fuser::getId(); $db->query(" INSERT INTO custom_product_views (product_id, user_id, fuser_id, viewed_at) VALUES (?, ?, ?, NOW()) ON DUPLICATE KEY UPDATE view_count = view_count + 1, viewed_at = NOW() ", [$productId, $userId, $fuserId]); 
CREATE TABLE custom_product_views ( id SERIAL PRIMARY KEY, product_id INT NOT NULL, user_id INT DEFAULT 0, fuser_id INT NOT NULL, view_count INT DEFAULT 1, viewed_at DATETIME, UNIQUE KEY uk_product_fuser (product_id, fuser_id), INDEX idx_fuser (fuser_id), INDEX idx_product (product_id) ); 

Calculating "Users Also Viewed"

-- Товары, которые чаще всего смотрят вместе с товаром $productId SELECT v2.product_id, COUNT(DISTINCT v2.fuser_id) AS co_views FROM custom_product_views v1 JOIN custom_product_views v2 ON v1.fuser_id = v2.fuser_id AND v2.product_id != v1.product_id AND v2.viewed_at BETWEEN DATE_SUB(v1.viewed_at, INTERVAL 1 HOUR) AND DATE_ADD(v1.viewed_at, INTERVAL 1 HOUR) WHERE v1.product_id = :productId GROUP BY v2.product_id ORDER BY co_views DESC LIMIT 20; 

Results are cached in Redis for 6–24 hours. They are recalculated by a Bitrix agent nightly for all popular products.

Personalization for Authorized Users

For authorized users, we look at view history over the last 30 days:

function getPersonalizedRecommendations(int $userId, int $limit = 12): array { // Последние просмотренные категории пользователя $recentCategories = getRecentUserCategories($userId, 5); // Товары из этих категорий, которые он ещё не смотрел return \CIBlockElement::GetList( ['CATALOG_PRICE_1' => 'ASC'], [ 'IBLOCK_ID' => CATALOG_IBLOCK_ID, 'IBLOCK_SECTION_ID' => $recentCategories, '!ID' => getViewedProductIds($userId), 'ACTIVE' => 'Y', ], false, ['nPageSize' => $limit], ['ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_PICTURE'] ); } 

Administrative Management of Recommendations

The system allows:

  • Viewing click statistics on recommendations (CTR per algorithm).
  • Adding manual recommendations (pinned) for specific products.
  • Excluding products from recommendations (sold out, seasonal).
  • A/B testing algorithms: half of users see content-based, half collaborative.

Approach Comparison: Time and Effect

Algorithm Implementation Time Data Coverage CTR (average)
Content-based 2–3 days No history 3–5%
Collaborative (SQL) 3–5 days 1000+ actions 6–9%
SVD microservice 5–7 days 10000+ actions 8–12%

Timeline

Component Duration
Collect views and purchase data 2–3 days
Content-based recommendations 2–3 days
Collaborative filtering (SQL approach) 3–5 days
Caching + recalculation agent 1–2 days
Personalization for authorized users 2–3 days
Admin panel + A/B test 3–4 days
Testing 2–3 days

Total: 2.5–3.5 weeks for a full system. Content-based recommendations without personalization—1 week.

What's Included in the Work

  • Documentation of recommendation API and data schema.
  • Access to recommendation admin panel.
  • Staff training (administration, A/B tests).
  • 2 months of support after launch (bug fixes, fine-tuning).

Our Implementation Process: Step-by-Step

  1. Data analysis—assess catalog size, view and purchase history, identify target pages for recommendation placement.
  2. Algorithm selection—based on analysis, choose content-based, collaborative, or hybrid approach. For small stores, content-based often suffices; for large ones, collaborative filtering with collaborative filtering.
  3. Data collection integration—implement tracking of views and purchases via custom tables and Bitrix events.
  4. Development of recommendation blocks—create components for output on catalog, product card, and cart.
  5. Caching and agents—set up Redis for fast access and Bitrix agents for nightly recalculation.
  6. A/B testing—launch testing of different algorithms to gather statistics.
  7. Deployment and training—deploy to production, train staff on admin panel usage.
Typical Implementation Mistakes
  • Insufficient data for collaborative filtering—if you have less than 1000 actions per product, collaborative filtering will perform worse than content-based. Start with a simple approach and accumulate history.
  • Ignoring caching—without Redis or similar fast storage, database queries can slow down the page. We use Bitrix tagged caching.
  • Incorrect co-view window—in "also viewed" calculations, it's important to limit the time interval (e.g., 1 hour), otherwise random products will appear.

Order development of a recommendation system and increase sales. Our team has implemented recommendation systems for 20+ online stores on Bitrix. We will evaluate your project in one working day. Get a consultation—contact us for cost and timeline estimates.