Представьте: вы настроили Вебвизор, но сессии не записываются. Консоль браузера пестрит ошибками CSP. Знакомая ситуация? За 10+ лет мы провели более 500 аудитов Битрикс-сайтов и в каждом третьем обнаружили проблемы с Вебвизором. Расскажем, как правильно настроить Вебвизор на 1С-Битрикс, чтобы запись сессий работала стабильно и без потерь данных. Наша команда накопила опыт на сотнях проектов — от небольших интернет-магазинов до крупных каталогов с миллионными товарными позициями.
Почему Вебвизор часто не работает на Битриксе?
Вебвизор не работает на HTTPS-сайте с неправильными заголовками CSP — запись сессий идёт через iframe Яндекса, и браузер блокирует его, если в Content-Security-Policy не разрешён frame-ancestors. Вторая частая причина: тег Метрики вставлен через Google Tag Manager, GTM грузится асинхронно, вебвизор инициализируется после того, как пользователь уже совершил первые действия — начало сессии теряется. Третья — AJAX-навигация: без явного вызова ym('hit') после каждого перехода Вебвизор фиксирует только первую страницу. По нашей статистике, 70% сайтов с AJAX-навигацией теряют до 40% сессий из-за этой ошибки.
Как правильно разместить тег Метрики?
Яндекс требует размещать тег как можно выше в <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, устанавливается из Маркетплейса. Однако наш подход через OnBeforeProlog надёжнее: он гарантирует загрузку до любого другого скрипта. В таблице ниже — сравнение двух методов.
| Параметр | Через init.php (наш подход) | Через компонент bitrix:metrika |
|---|---|---|
| Контроль загрузки | Полный — код вставляется до ob_start | Зависит от шаблона, может быть после jquery |
| CSP-совместимость | Настраивается вручную в init.php | Требует правки компонента |
| AJAX-поддержка | Требуется дополнительный хендлер | Требуется дополнительный хендлер |
| Рекомендация | Для проектов с кастомными шаблонами | Для типовых установок |
Какие настройки CSP нужны для Вебвизора?
Вебвизор записывает экран через <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() в прологе, это не проблема. Подробнее о директивах CSP читайте на MDN.
Что делать, если Вебвизор не видит 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); } }); Без этого данные Вебвизора будут некорректными: все переходы по каталогу будут записаны как единственный визит на страницу входа. Наш опыт показывает, что эта проблема встречается в 70% сайтов с AJAX-навигацией.
Однажды мы настраивали Вебвизор для интернет-магазина с каталогом на 100 000 товаров. Проблема была в том, что AJAX-переходы не вызывали ym('hit'), и Вебвизор показывал только 1 страницу за сессию. После внедрения хендлера запись стала фиксировать до 15 страниц за визит — это дало полную картину поведения пользователей.
Как проверить, что Вебвизор работает?
После настройки — проверить в «Вебвизоре» раздел «Мониторинг». Если сессии записываются, но видео чёрное — проблема в смешанном контенте (HTTP-ресурсы на HTTPS-сайте). Если сессии не появляются вообще — смотреть Network-вкладку DevTools на запросы к mc.yandex.ru/watch/: статус 200 означает, что счётчик работает, но данные ещё не обработаны (задержка до 20 минут для новых сессий).
Что входит в настройку Вебвизора под ключ
Мы предлагаем комплексную настройку, которая включает:
| Этап | Действие | Результат |
|---|---|---|
| 1. Аудит | Проверка текущего тега Метрики, CSP, AJAX-навигации | Отчёт с ошибками и рекомендациями |
| 2. Внедрение | Установка счётчика в init.php, настройка CSP, хендлер для AJAX | Рабочий Вебвизор с корректной записью |
| 3. Тестирование | Проверка в мониторинге, запись тестовой сессии | Подтверждение корректности |
| 4. Документация | Описание выполненных работ, конфиги, инструкция для поддержки | Архитектурная записка |
Мы гарантируем, что после наших работ Вебвизор будет записывать 100% сессий (при отсутствии блокировок браузера). Благодаря 10+ годам опыта и сотням реализованных проектов мы знаем все подводные камни. Если вы столкнулись с проблемами — получите бесплатную консультацию. Свяжитесь с нами, чтобы оценить сроки вашего проекта. Закажите настройку Вебвизора под ключ — мы решим проблемы с записью сессий за 2-3 дня.







