Analyzing the Conversion Funnel of a 1C-Bitrix Online Store
A product card gets 3,000 views daily. 120 add items to cart, 40 reach checkout, 25 complete payment. Where do the other 2,975 disappear? The answer lies in specific funnel steps, and in 1C-Bitrix these steps can be measured, broken down by device and source, then precisely fixed.
Setting Up Goals in Yandex.Metrica
Each funnel step requires its own goal. Type: JavaScript event, not "Page visit." Checkout in Bitrix works via AJAX in the sale.order.ajax component without URL changes—a page-based goal simply won't trigger.
| Funnel Step | Goal ID | Where It Fires |
|---|---|---|
| Catalog view | catalog_view |
Component catalog.section |
| Product view | product_view |
Component catalog.element |
| Add to cart | add_to_cart |
"Add to Cart" button handler |
| Checkout start | checkout_start |
Component sale.order.ajax |
| Order complete | order_complete |
Order confirmation page |
Call: ym(XXXXXXXX, 'reachGoal', 'add_to_cart'). The code is inserted into component templates or via BX.ready() in a global script. For ecommerce data (product ID, price, category), use ym(id, 'ecommerce:send', dataLayer)—this provides detailed breakdown by specific products and sections.
Ecommerce Events for GA4
Google Analytics 4 works via gtag.js or GTM. Standard ecommerce events:
-
view_item_list— catalog view -
view_item— product card -
add_to_cart— add to cart -
begin_checkout— checkout start -
purchase— purchase
Product data (ID, name, price, category) comes from $arResult of catalog components. Output them in data-attributes or JS variables via result_modifier.php—this way markup is independent of the template and survives redesigns.
Where Customers Drop Off: Step-by-Step Breakdown
After 2–3 weeks of data collection, build a funnel in Metrica (Reports -> Conversions) or GA4 (Explore -> Funnel exploration). Healthy benchmarks for online stores and red flags:
Catalog → product card: 30–50%. Below 20%—navigation problem. Check the faceted filter: if catalog.smart.filter renders longer than 400ms, users leave before seeing results. Enable facet indexing in infoblock settings—queries to b_iblock_element_property with multiple JOINs on a catalog of 30,000+ products without indices perform unacceptably.
Product card → cart: 8–15%. Below 5%—weak card. No reviews, shipping times not specified, low-resolution photos. Technical side: the "Add to Cart" button should give instant visual feedback. Standard catalog.element is configured via USE_ELEMENT_COUNTER—but often it's simpler to write a custom AJAX handler with add animation.
Cart → checkout: 40–60%. Below 30%—user sees something unexpected. Usually it's shipping cost appearing only in the cart, or absence of a familiar payment method. The sale.order.ajax component by default outputs an excessive form. Remove unnecessary fields via Store -> Settings -> Order Properties: "Middle Name," "ZIP," "Fax"—candidates for deletion.
Checkout → payment: 50–70%. Below 40%—technical issue or UX failure. Redirect to external payment gateway loses 10–15% of buyers. Embedded widgets (YuKassa, CloudPayments) keep the user on-site—iframe instead of redirect.
Always segment by device. Mobile conversion at checkout is often 2–3 times lower than desktop—this is a normal starting point for optimization.
Page Load Speed and Its Impact on Funnel
Each additional second of catalog page load cuts conversion. On 1C-Bitrix, key tools:
Composite cache — serves a static HTML version of the page and loads dynamic blocks (cart, auth) via separate AJAX requests. Enabled in "Composite" module settings. Blocks that should not be cached are wrapped in \Bitrix\Main\Page\Frame.
Performance monitor (Settings -> Performance) — shows render time for each component. If catalog.section runs longer than 500ms—look for excessive property loading or missing indices.
CDN for static assets — configured via the CDN module. Product images, CSS, JS are served from edge servers.
A/B Testing Changes
Google Optimize is closed, but the task is solved custom:
- On page load, generate a variant (0 or 1), save to
localStorage - Load one of the block templates—e.g., single-step vs. multi-step checkout
- Pass the variant to Metrica:
ym(id, 'params', {ab_test: 'checkout_v2'}) - Compare by target conversion in the report with segmentation by parameter
Minimum test duration: 2 weeks with 500+ unique visitors daily. Less than that—statistical significance is questionable.
Micromarkup and Traffic Quality
Schema.org Product in the product card raises CTR in search results. More clicks from the target audience—higher conversion at funnel entry. Standard catalog.element supports markup, but often generates it with errors—verify via Google Rich Results Test after every template update.
Funnel analysis is an ongoing process, not a one-time affair. Collect metrics monthly, record every change (removed a field, changed a button, added a payment widget), and compare metrics quarterly. Only this way can you separate the effect of a specific improvement from seasonal traffic fluctuations.







