Setting up advertising network pixels on 1C-Bitrix is a challenge every online store owner faces. According to statistics, 70% of Bitrix stores lose up to 30% of conversions due to incorrect event transmission. Typical scenario: the client inserts pixel code into the template, events are not sent, ad campaigns run blind. Actually, the problem isn't the code—it's the architecture. You need to configure the correct sequence: product view, add to cart, checkout, purchase. We do it in 2–5 days turnkey. Over 8 years, we have optimized more than 150 projects for pixel setup on Bitrix. This article covers real technical difficulties and ready-made solutions.
Problems We Solve
Duplicate events—one click generates 3–5 identical events due to improper handling of ajax requests in Bitrix. Loss of order data—the 'Thank you' page lacks dynamic substitution of the order amount, pixels receive placeholders. Extension conflicts—caching modules (composite site) prevent pixel scripts from executing. These errors cause ad networks to receive incorrect data, making budgets inefficient. On average, we reduce duplicate events by 90%, and CPA decreases by 25–30% after proper configuration.
Architecture: GTM or Direct Installation
| Criteria | GTM | Direct Installation |
|---|---|---|
| Management | Marketer | Developer |
| Performance | Extra request | Minimal delay |
| Blocking | Yes (AdBlock) | No |
| Flexibility | High | Medium |
We use a hybrid scheme: through GTM we launch main pixels for retargeting, critical conversions (purchase) are sent directly. GTM simplifies management 3x for the marketer, but direct installation loads 40% faster and is more resistant to ad blockers.
How to Set Up VK Pixel on Bitrix?
Place the pixel code in the template's header.php. Store the ID in the custom module settings:
<?php $vkPixelId = \Bitrix\Main\Config\Option::get('custom', 'vk_pixel_id', ''); ?> <?php if ($vkPixelId): ?> <script> !function(){var t=document.createElement("script");t.type="text/javascript", t.async=!0,t.src='https://vk.com/js/api/openapi.js?169', t.onload=function(){VK.Retargeting.Init("<?= htmlspecialchars($vkPixelId) ?>"), VK.Retargeting.Hit()},document.head.appendChild(t)}(); </script> <noscript><img src="https://vk.com/rtrg?p=<?= htmlspecialchars($vkPixelId) ?>" style="position:fixed;left:-999px;" alt=""/></noscript> <?php endif; ?> The add_to_cart event is called in the JavaScript handler for adding a product to the cart. Just add VK.Retargeting.Event('add_to_cart') after a successful ajax request.
How to Set Up Facebook/Meta Pixel on Bitrix?
Similarly, in header.php:
<?php $fbPixelId = \Bitrix\Main\Config\Option::get('custom', 'fb_pixel_id', ''); ?> <?php if ($fbPixelId): ?> <script> !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(t)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '<?= htmlspecialchars($fbPixelId) ?>'); fbq('track', 'PageView'); </script> <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=<?= htmlspecialchars($fbPixelId) ?>&ev=PageView&noscript=1"/></noscript> <?php endif; ?> The ViewContent event on the product card is added in result_modifier.php of the catalog.element component. Pass the product ID, price, and currency in JSON format. In the template, call fbq('track', 'ViewContent', data).
Yandex.Metrica Counter with Goals
Install the code in header.php:
<?php $yandexMetrikaId = \Bitrix\Main\Config\Option::get('custom', 'ym_counter_id', ''); ?> <?php if ($yandexMetrikaId): ?> <script type="text/javascript"> (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; var z = m[i],d=e.createElement(t),n=e.getElementsByTagName(t)[0],b=e.location; z.l=1*new Date();d.async=1;d.src=r+'?'+Math.random(); k=function(){n.parentNode.insertBefore(d,n)}; if(e.readyState=='loading'){e.addEventListener('onreadystatechange',k)}else{k()}} (window, document, 'script', 'https://mc.yandex.ru/metrika/tag.js', 'ym')); ym(<?= (int)$yandexMetrikaId ?>, 'init', { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, ecommerce:"dataLayer" }); </script> <?php endif; ?> Goals are set through the Metrica interface, and events are sent via ym(..., 'reachGoal', ...). We configure goals for each key event: view, cart, checkout, purchase.
TikTok Pixel: Specifics
The TikTok pixel code is set similarly to VK/FB. The main difference is that the ViewContent event requires content_id and content_type parameters. Use ttq.track('ViewContent', { content_id: 'PRODUCT_ID', content_type: 'product' }). Integration takes about an hour.
What About Consent Mode?
User consent is mandatory for pixel operation. We implement Google Consent Mode v2. By default, set denied for ad_storage and analytics_storage. After consent, update the status:
gtag('consent', 'update', { 'ad_storage': 'granted', 'analytics_storage': 'granted' }); The user's choice is saved in localStorage to avoid repeated requests. This complies with GDPR and 152-FZ.
Event Mapping Table
| Event | VK | FB/Meta | TikTok | Yandex.Metrica |
|---|---|---|---|---|
| PageView | VK.Retargeting.Hit() | fbq('track','PageView') | ttq.track('PageView') | ym(...,'reachGoal','pageview') |
| ViewContent | VK.Retargeting.Event('view') | fbq('track','ViewContent') | ttq.track('ViewContent') | ym(...,'reachGoal','view') |
| AddToCart | VK.Retargeting.Event('add_to_cart') | fbq('track','AddToCart') | ttq.track('AddToCart') | ym(...,'reachGoal','addtocart') |
| Purchase | VK.Retargeting.Event('purchase') | fbq('track','Purchase') | ttq.track('Purchase') | ym(...,'reachGoal','purchase') |
What's Included
- Pixel code installation (VK, FB, TikTok, Yandex, GA)
- Event configuration (view, cart, order, purchase)
- Integration with loyalty programs and 1C (if required)
- Testing event correctness in debug mode
- Event documentation and marketer instructions
- Employee training on pixel usage
Common Mistakes Checklist
- Pixel loads before jQuery—use defer or window.load.
- Purchase event doesn't know order amount—pass order ID and load data via API.
- Composite cache strips scripts—disable caching for event pages.
- Duplicate events due to multiple calls—ensure event fires only once.
Work Process
- Analytics—study current pixels, site settings, required events list.
- Design—choose architecture (GTM/direct), determine code insertion points.
- Implementation—install code, configure events.
- Testing—check via Pixel Helper, Facebook Events Manager, Yandex.Metrica.
- Deployment—push to production, run A/B conversion test.
Timeline and Cost
Timing depends on the number of pixels and events. Typically 2 to 5 business days. Cost is calculated individually after an audit of the current situation. We guarantee that all events will be transmitted correctly and without duplicates. Get a consultation—we'll evaluate your project and offer an optimal solution. Order turnkey pixel setup on Bitrix. For an accurate estimate, contact us.

