Настройка Яндекс.Вебвізора на 1С-Бітрікс
Вебвізор не працює на HTTPS-сайті з неправильними заголовками CSP — запись сесій йде через iframe Яндекса, та браузер блокує його, якщо у Content-Security-Policy не розрізнено frame-ancestors. Друга часта причина: тег Метрики вставлений через Google Tag Manager, GTM грузиться асинхронно, вебвізор інітіалізується після того, як користувач вже зробив перші дії — початок сесії втрачається.
Правильне розміщення тега Метрики
Яндекс вимагає розміщувати тег як можна вище у <head>. У Бітриксі стандартний спосіб — вставка через подію OnBeforeProlog у init.php або прямо у файл пролога /bitrix/templates/ШАБЛОН/header.php.
У /bitrix/php_interface/init.php:
AddEventHandler('main', 'OnBeforeProlog', function() {
ob_start();
?>
<!-- Яндекс.Метрика -->
<script>
(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];
d.async=1;d.src=r;d.id='metrika-';
n.parentNode.insertBefore(d,n);
z(i,'init', { id: XXXXXXXX, webvisor: true, clickmap: true, trackLinks: true });
})(window, document, 'script', 'https://cdn.jsdelivr.net/npm/yandex-metrika@latest/metrika.js', 'ym');
</script>
<!-- /Яндекс.Метрика -->
<?php
$html = ob_get_clean();
$GLOBALS['APPLICATION']->AddHeadString($html, true);
});
Або через стандартний компонент bitrix:metrika — він є у модулі fileman, встановлюється з Маркетплейса.
Content-Security-Policy та iframe Вебвізора
Вебвізор записує екран через <iframe title="Embedded content"> на домені webvisor.com. Якщо на сервері (nginx або через PHP-заголовки) виставлений жорсткий CSP, запись не почнеться — у консолі буде помилка Refused to frame ... because an ancestor violates the following Content Security Policy directive.
Мінімальний набір директив для роботи Вебвізора:
Content-Security-Policy:
frame-src 'self' https://webvisor.com;
script-src 'self' 'unsafe-inline' https://mc.yandex.ru https://cdn.jsdelivr.net;
img-src 'self' data: https://mc.yandex.ru;
У Бітриксі заголовки можна встановити у /bitrix/.htaccess або у init.php через header() — але лише до першого висновку HTML. Якщо використовуєте ob_start() у прологі, це не проблема.
Вебвізор та SPA/AJAX-сторінки
Більшість сучасних шаблонів Бітрікса використовують AJAX-навігацію (BX.ajax, компонент bitrix:main.ajaxlinks). При переході без перезавантаження сторінки Вебвізор не фіксує зміну URL — у записі сесії весь візит виглядає як одна сторінка.
Рішення: викликати ym(XXXXXXXX, 'hit', window.location.href) після кожного AJAX-переходу. У Бітриксі є подія BX.addCustomEvent('onAjaxSuccess', ...) — вішимо на неї:
BX.addCustomEvent('onAjaxSuccess', function(event) {
if (typeof ym !== 'undefined') {
ym(XXXXXXXX, 'hit', window.location.href);
}
});
Без цього дані Вебвізора будуть некоректними: всі переходи по каталогу будуть записані як єдиний візит на сторінку входу.
Перевірка коректності запису
Після настройки — перевірити у «Вебвізорі» розділ «Моніторинг». Якщо сесії записуються, але відео чорне — проблема у змішаному контенті (HTTP-ресурси на HTTPS-сайті). Якщо сесії не з'являються взагалі — дивитись Network-вкладку DevTools на запити до mc.yandex.ru/watch/: статус 200 означає, що лічильник працює, але дані ще не оброблені (затримка до 20 хвилин для нових сесій).







