Статьи

Google Consent Mode v2: как настроить, с примерами кода

Обновлено:

Google Consent Mode v2 сообщает тегам Google, согласился ли посетитель на cookie для аналитики и рекламы. Без него Google не добавляет посетителей из Европейской экономической зоны (ЕЭЗ) в ваши рекламные аудитории — даже если сам сайт работает не в Европе. Ниже — настройка на обычном gtag.js, которую можно скопировать, и способы проверить, что всё работает.

Что такое Consent Mode v2

Consent Mode — это набор сигналов, которые сайт передаёт тегам Google (Google Analytics 4, Google Ads, Floodlight). Каждый сигнал равен granted (разрешено) или denied (запрещено), и теги подстраивают под него своё поведение. Вторая версия, представленная в ноябре 2023 года, добавила два сигнала о рекламных данных:

СигналЧто он определяет
ad_storageХранение данных для рекламы, например cookie
analytics_storageХранение данных для аналитики, например cookie (скажем, для длительности визита)
ad_user_data (новый в v2)Передачу в Google пользовательских данных для рекламы
ad_personalization (новый в v2)Персонализированную рекламу, например ремаркетинг

Кому это нужно

С марта 2024 года Google ждёт сигналы согласия для посетителей из Европейской экономической зоны. Если их нет, такие посетители не попадают в аудитории рекламных продуктов Google, и ремаркетинг и персонализированная реклама для них перестают работать. Для персонализированной рекламы должны быть разрешены оба сигнала — ad_user_data и ad_personalization.

Важно, откуда пришёл посетитель, а не где работает сайт. Если ваш сайт находится в Казахстане, Украине или другой стране за пределами ЕС, но к нему приходят посетители из ЕЭЗ — например, потому что вы рекламируетесь в Google Ads на европейскую аудиторию, — и для них работают Google Ads или Google Analytics, Consent Mode вам нужен. Ограничить запрет по умолчанию странами ЕЭЗ можно параметром region (о нём — в шаге 1), и посетителей из других стран он не коснётся.

Если посетителей из Европы у сайта нет и Google Ads вы не используете, Consent Mode необязателен. Если вы пользуетесь платформой управления согласием, сертифицированной Google, скорее всего, она уже отправляет сигналы за вас — сначала проверьте её настройки.

Базовый или расширенный режим

БазовыйРасширенный
Пока посетитель не ответилТеги Google вообще не загружаютсяТеги загружаются с состоянием по умолчанию (обычно denied)
Если посетитель отказалсяВ Google ничего не отправляетсяОтправляются пинги без cookie и без идентификаторов
Моделирование конверсийОбщая модельБолее подробная модель под конкретного рекламодателя

Код ниже — это расширенная настройка: теги загружаются сразу и ждут ответа в запрещённом состоянии. Для базового режима загружайте тег Google только после того, как посетитель согласился.

Шаг 1. Задайте значения по умолчанию до тега Google

Состояние по умолчанию нужно задать до того, как тег что-либо отправит. Вставьте этот фрагмент в <head> выше тега Google или фрагмента Tag Manager:

По умолчанию: всё запрещено, пока посетитель не ответитhtml
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}

  gtag('consent', 'default', {
    ad_storage: 'denied',
    ad_user_data: 'denied',
    ad_personalization: 'denied',
    analytics_storage: 'denied',
    wait_for_update: 500, // сколько мс ждать баннер, который загружается асинхронно
  });
</script>

<!-- затем тег Google или фрагмент Google Tag Manager -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXX"></script>
<script>
  gtag('js', new Date());
  gtag('config', 'G-XXXXXXX');
</script>

Чтобы запрещать по умолчанию только в некоторых странах — например, в странах ЕЭЗ, если основная аудитория у вас за их пределами, — добавьте region с кодами стран по ISO, например region: ['DE', 'FR', 'ES']. Значения по умолчанию без region действуют во всех остальных странах.

Шаг 2. Передайте выбор посетителя

Когда посетитель нажимает кнопку в баннере, вызывайте update. Запомните выбор и отправляйте его заново в начале каждого следующего просмотра страницы, сразу после значений по умолчанию:

Минимальный баннерhtml
<div id="cookie-banner" hidden>
  <p>Мы используем cookie для аналитики и рекламы. Вы не против?</p>
  <button type="button" data-choice="granted">Принять</button>
  <button type="button" data-choice="denied">Отклонить</button>
</div>

<script>
  const KEY = 'cookie_choice';
  const send = (state) => gtag('consent', 'update', {
    ad_storage: state,
    ad_user_data: state,
    ad_personalization: state,
    analytics_storage: state,
  });

  const saved = localStorage.getItem(KEY);
  const banner = document.getElementById('cookie-banner');
  if (saved) send(saved); else banner.hidden = false;

  banner.addEventListener('click', (e) => {
    const state = e.target.dataset.choice;
    if (!state) return;
    localStorage.setItem(KEY, state);
    send(state);
    banner.hidden = true;
  });
</script>

Дополнительно: url_passthrough и ads_data_redaction

Две настройки помогают, когда рекламные cookie запрещены:

gtag('set', 'url_passthrough', true);     // передавать данные о клике по рекламе в ссылках вместо cookie
gtag('set', 'ads_data_redaction', true);  // скрывать идентификаторы кликов по рекламе, пока ad_storage запрещён

Если вы используете Google Tag Manager

В Tag Manager значения по умолчанию задаются в теге, который срабатывает по триггеру Consent Initialization – All Pages (инициализация согласия) раньше всех остальных тегов. У большинства платформ управления согласием для этого есть готовый шаблон в галерее шаблонов сообщества; команду update потом отправляет сама платформа, когда посетитель ответит.

Как проверить, что всё работает

  1. Откройте сайт через Tag Assistant и посмотрите вкладку Consent: сначала там должно быть состояние по умолчанию, а после клика в баннере — обновление.
  2. В инструментах разработчика браузера откройте вкладку «Сеть» и отфильтруйте запросы по collect: в запросах к Google Analytics есть параметр gcs, который после согласия меняется с G100 (запрещено) на G111 (разрешено).
  3. Перезагрузите страницу после согласия: сохранённый выбор должен отправиться снова, а баннер — не появиться.

Один баннер для Google и остальных инструментов

Consent Mode касается только тегов Google. Другим скриптам на сайте нужен тот же ответ. У виджета Sitecog, например, свой режим согласия: добавьте к его тегу data-consent="required", и аналитика будет ждать согласия, а формы и онлайн-чат продолжат работать. Сигналов согласия в Google виджет не отправляет, поэтому передавайте ответ из баннера обоим:

Google и Sitecog одним кликомhtml
<script src="https://widget.sitecog.com/widget.js" data-consent="required" defer></script>

<script>
  window.crmConsent = window.crmConsent || [];   // очередь: работает ещё до загрузки widget.js

  function applyChoice(state) {
    gtag('consent', 'update', {
      ad_storage: state,
      ad_user_data: state,
      ad_personalization: state,
      analytics_storage: state,
    });
    crmConsent.push(state === 'granted' ? 'grant' : 'deny');
  }
</script>

Частые вопросы

Consent Mode — это cookie-баннер?

Нет. Consent Mode только передаёт тегам Google выбор посетителя. Баннер всё равно нужен (свой или от платформы управления согласием): он задаёт вопрос и вызывает команду update.

Нужен ли Consent Mode v2 за пределами ЕЭЗ?

Google требует сигналы согласия для посетителей из Европейской экономической зоны — где бы ни работал сам сайт. Если у сайта в Казахстане или Украине есть посетители из ЕЭЗ и для них работают Google Ads или Google Analytics, Consent Mode нужен. Для остальных посетителей он необязателен, а с параметром region можно запрещать по умолчанию только в тех странах, где это требуется.

Что происходит, если посетитель отказывается от cookie?

В базовом режиме теги Google ничего не отправляют. В расширенном они отправляют пинги без cookie и без идентификаторов, по которым Google моделирует конверсии.

Consent Mode делает сайт соответствующим GDPR?

Сам по себе нет. Он лишь соблюдает выбор, который сделал посетитель; правильно ли, вовремя ли и понятно ли вы спрашиваете — зависит от баннера и политики конфиденциальности.

Sitecog настраивает Google Consent Mode за меня?

Нет. У виджета Sitecog свой режим согласия для его аналитики, а сигналов согласия в Google он не отправляет. Подключите оба к одному баннеру, как показано в этой статье.