Настройка Content Security Policy для Google Tag Manager: чек-лист для аналитика
Content Security Policy (политика безопасности контента, CSP) — это HTTP-заголовок, который ограничивает, какие скрипты и ресурсы браузер может загружать на странице. Если CSP блокирует Google Tag Manager, теги перестанут срабатывать, а вы получите ложные провалы в данных. Вот порядок действий, чтобы GTM работал в CSP без компромиссов по безопасности.
— Проверьте текущие директивы CSP через отчёты браузера или инструменты разработчика. Откройте консоль — блокировки GTM выглядят как ошибки вида «Refused to load script from 'https://www.googletagmanager.com'». Соберите все заблокированные URL до внесения правок.
— Добавьте домен `www.googletagmanager.com` в директиву `script-src`. Если в вашей CSP нет `script-src`, задайте её явно. Не забудьте про `tagmanager.google.com` — его тоже нужно разрешить для фрагмента `gtm.js`.
— Настройте `nonce` (одноразовый токен) для инлайн-скриптов GTM. Вместо `unsafe-inline` используйте атрибут `nonce` в теге контейнера GTM. Сервер должен генерировать уникальный nonce при каждой загрузке страницы и передавать его в CSP-заголовок.
— Если nonce невозможен (например, статический сайт без серверной логики), допустите `unsafe-inline` внутри `script-src`, но только вместе с указанием точного `strict-dynamic`. Без `strict-dynamic` инлайн-скрипты не пройдут проверку, а с ним — разрешаются только скрипты, явно разрешённые nonce или хешем.
— Обеспечьте загрузку GTM только по HTTPS. CSP-директива `upgrade-insecure-requests` автоматически перепишет HTTP на HTTPS, но если вы используете `block-all-mixed-content`, проверьте, что GTM не подтягивает сторонние теги через HTTP.
— Протестируйте CSP в режиме отчётности (`Content-Security-Policy-Report-Only`), прежде чем включать полный блок. Этот заголовок не блокирует скрипты, а только отправляет отчёты с нарушениями — вы увидите, где GTM или его теги не вписываются в политику, без риска сломать аналитику.
— Используйте заголовок `Content-Security-Policy` на стороне сервера, а не meta-тег в HTML. Meta-тег не поддерживает `report-uri` и может быть переопределён серверным заголовком — это создаёт путаницу в диагностике.
Когда это пригодится: при запуске сайта с повышенными требованиями к безопасности (банковские сервисы, интернет-магазины с PCI DSS, корпоративные порталы) или при переходе на server-side-трекинг, где CSP часто блокирует не только GTM, но и его контейнер.
— @MarketingAnalyticsRoomPro
Маркетинг-аналитика
@MarketingAnalyticsRoomPro
Настройка Content Security Policy для Google Tag Manager: чек-лист для аналитика
Этот пост опубликован в Telegram-канале Маркетинг-аналитика. Подписаться можно по ссылке: @MarketingAnalyticsRoomPro.