Настройка cookie-уведомлений на 1С-Битрикс
Cookie-уведомление с кнопкой «Принять» — это не декоративный элемент. По GDPR и ряду других регуляторных требований аналитические и маркетинговые cookies нельзя устанавливать до получения явного согласия пользователя. Баннер должен управлять реальной загрузкой скриптов, а не просто информировать.
Что предоставляет Битрикс из коробки
В Битриксе начиная с версии ядра 21.x появился компонент bitrix:main.privacy. Он выводит баннер cookie-согласия и управляет согласиями через \Bitrix\Main\UserConsent. Компонент размещается в шаблоне сайта — обычно в footer.php:
<?php $APPLICATION->IncludeComponent('bitrix:main.privacy', '.default', []); ?>
Компонент устанавливает cookie BITRIX_SM_GDPR при принятии. Но из коробки он только фиксирует согласие — он не управляет загрузкой сторонних скриптов. Это нужно реализовывать отдельно.
Управление загрузкой скриптов через согласие
Правильная реализация: сторонние скрипты (Google Analytics, Метрика, пиксели) не загружаются до принятия cookies. Схема работы:
- При загрузке страницы проверяется наличие cookie
BITRIX_SM_GDPR(или кастомного флага) - Если cookie нет — показывается баннер, сторонние скрипты не загружаются
- После нажатия «Принять» — устанавливается cookie, загружаются скрипты, баннер скрывается
function loadAnalytics() {
// Google Tag Manager
(function(w,d,s,l,i){...})(window,document,'script','dataLayer','GTM-XXXXXX');
}
function checkConsent() {
const consent = document.cookie.split(';').find(c => c.trim().startsWith('BITRIX_SM_GDPR='));
if (consent && consent.includes('Y')) {
loadAnalytics();
}
}
checkConsent();
document.getElementById('cookie-accept').addEventListener('click', function() {
document.cookie = 'BITRIX_SM_GDPR=Y; path=/; max-age=' + (365 * 24 * 60 * 60);
loadAnalytics();
document.getElementById('cookie-banner').style.display = 'none';
});
Категории cookies и гранулярное согласие
Продвинутая реализация разделяет cookies по категориям: необходимые, аналитические, маркетинговые, функциональные. Необходимые включены всегда, для остальных — отдельные переключатели.
В Битриксе гранулярное управление реализуется через несколько флагов в localStorage или отдельные cookies:
const consentCategories = {
necessary: true, // всегда true
analytics: localStorage.getItem('consent_analytics') === 'true',
marketing: localStorage.getItem('consent_marketing') === 'true'
};
При изменении настроек пользователем — сохраняете в localStorage и перезагружаете страницу для применения изменений (или динамически подгружаете/выгружаете скрипты, но это сложнее).
Интеграция с Google Tag Manager
Если используете GTM, управление согласиями удобнее вынести туда через Consent Mode v2. В GTM настраиваете триггеры на основе переменных согласия. При этом Google Analytics в режиме Consent Mode продолжает собирать агрегированные данные даже без согласия (без PII), что улучшает точность моделирования.
В Битриксе это не требует изменений PHP-кода — только настройка GTM и JavaScript-инициализация gtag('consent', 'default', {...}) до загрузки GTM-контейнера.
Хранение состояния согласия
Срок хранения согласия — не более 12 месяцев по GDPR. По истечении нужно повторно запрашивать согласие. Реализуется через проверку max-age cookie или timestamp в localStorage:
const consentTime = localStorage.getItem('consent_timestamp');
const YEAR_MS = 365 * 24 * 60 * 60 * 1000;
if (!consentTime || Date.now() - parseInt(consentTime) > YEAR_MS) {
showCookieBanner();
}
Не путайте: cookie с флагом согласия и сами аналитические cookies — разные вещи. Первое — техническое средство фиксации согласия, второе — то, на что пользователь даёт согласие.







