Настройка Яндекс.Вебвизора на 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> на домене 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 минут для новых сессий).







