Настройка пикселя ВКонтакте на 1С-Битрикс
Пиксель ВКонтакте технически проще Facebook, но специфика Битрикса создаёт те же проблемы с размещением кода и передачей событий. Сам пиксель — это JavaScript-счётчик с ID вида VK-RTRG-XXXXXXX-XXXXX, который нужно не просто вставить на сайт, а правильно интегрировать с событиями каталога и оформления заказов.
Базовая установка без потерь при кешировании
Код пикселя ВК подключается через <head>. В Битриксе наиболее устойчивый способ — через файл /bitrix/php_interface/init.php с обработчиком события OnEpilog. Это гарантирует вывод кода до закрытия </head> вне зависимости от кеширования компонентов:
AddEventHandler("main", "OnEpilog", function() {
$vkPixelId = COption::GetOptionString("main", "vk_pixel_id", "");
if (!$vkPixelId) return;
?>
<script type="text/javascript">
!function(){var t=document.createElement("script");...}();
VK.Retargeting.Init("<?= htmlspecialchars($vkPixelId) ?>");
VK.Retargeting.Hit();
</script>
<?php
});
ID пикселя храните в b_option через COption::SetOptionString("main", "vk_pixel_id", "VK-RTRG-..."). Не хардкодьте в шаблоне — при переносе на другой домен придётся искать по всем файлам.
События для динамического ретаргетинга
ВКонтакте поддерживает динамический ретаргетинг для интернет-магазинов. Для его работы нужен фид товаров и события с привязкой к ID товаров из этого фида.
Ключевые события: ViewProduct, AddToCart, InitiateCheckout, Purchase. Каждое событие принимает объект с параметрами:
VK.Retargeting.ProductEvent(pixelId, 'view_product', {
products: [{ id: '123', price: 1490 }],
currency: 'RUB'
});
view_product вешается в template.php компонента bitrix:catalog.element. Данные товара берёте из $arResult — ID из $arResult["ID"], цену из $arResult["PRICES"]["BASE"]["PRICE"]. Учитывайте, что при включённом кешировании компонента PHP-часть не пересчитывается, но JS-код всё равно выполняется браузером, поэтому событие сработает корректно.
add_to_cart — проблема та же, что и с Facebook: добавление в корзину асинхронное. В стандартном bitrix:catalog.element.buy.ajax после успешного ответа есть колбэк BX.addCustomEvent('onBasketChange', ...). Перехватываете его и вызываете VK-событие. Альтернативно — в bitrix:sale.basket.basket при открытии корзины проверяете изменение количества.
purchase — в компоненте bitrix:sale.order.ajax после завершения заказа доступен JS-объект с данными. Вешайте событие на успешный callback оформления. Сумму заказа получаете из BX.Sale.OrderAjax или из серверной переменной, которую компонент прокидывает в шаблон через $APPLICATION->SetAdditionalCSS.
Настройка фида для динамического ретаргетинга
Без фида динамический ретаргетинг не работает. ВКонтакте принимает фид в формате YML (Яндекс.Маркет) или Google Shopping. В Битриксе модуль catalog умеет генерировать YML-фид через компонент bitrix:catalog.export.yandex.market или через административный раздел «Экспорт товаров» (/bitrix/admin/cat_export.php).
Фид генерируется по расписанию через агенты — таблица b_agent. Для VK нужен отдельный экспортный профиль, так как требования к структуре могут отличаться от Яндекс.Маркета. Создаёте его через CCatalogExport, настраиваете шаблон фида под спецификацию ВКонтакте.
Проверка событий
Во ВКонтакте нет аналога Facebook Pixel Helper. Проверяйте через «Аудитории» → «Пиксели» в рекламном кабинете — там видна активность за последние 24 часа и статус кода. Для отладки событий используйте console.log в JS перед вызовом VK.Retargeting.ProductEvent и проверяйте сетевые запросы в DevTools — ищите запросы к vk.com/rtrg.
Частая ошибка: пиксель инициализируется, но Hit() не вызывается на SPA-страницах или после AJAX-навигации. Если сайт использует bitrix:main.page.switcher, нужно перевызывать VK.Retargeting.Hit() при смене страницы.







