Как настроить режим согласия на сайте

Эта страница предназначена для разработчиков, которые используют на своем сайте собственное решение для получения согласия и хотят интегрировать режим согласия. Рекомендуем также ознакомиться с общими сведениями о режиме согласия. Если вы используете платформу для запросов согласия (CMP), чтобы получать согласие пользователей, узнайте, как настроить режим согласия с помощью CMP.

Режим согласия можно реализовать базовым или расширенным способом. Чтобы выбрать метод реализации и задать значения по умолчанию, ознакомьтесь с правилами компании. Подробнее о базовом и расширенном режиме согласия…

Подготовка

Перед тем как реализовать режим согласия, обратите внимание на следующие рекомендации:

  • Если вы используете Менеджер тегов и хотите поддерживать собственный баннер, рекомендуем загружать его через контейнер Менеджера тегов. Для этого нужно создать шаблон режима согласия. Вы также можете использовать шаблон режима согласия из галереи общедоступных шаблонов.

  • Если вы используете gtag.js, убедитесь, что тег Google установлен на каждой странице вашего сайта. Код режима согласия добавляется на каждую страницу сайта.

Чтобы настроить режим согласия, выполните следующие действия:
  1. До того как пользователь предоставит согласие, задайте статус согласия по умолчанию.
  2. Измените статус согласия в зависимости от того, какие настройки выбрал пользователь.

Задайте значение по умолчанию для каждого используемого типа согласия. По умолчанию значения режима согласия не заданы.

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

Менеджер тегов

Если вы используете Google Менеджер тегов, создайте собственный шаблон с помощью API согласия Менеджера тегов. Посмотрите пример, который может послужить в качестве отправной точки.

Используйте API Менеджера тегов для управления статусами согласия: setDefaultConsentState и updateConsentState. Также вам доступен gtagSet API, с помощью которого можно настроить ads_data_redaction и сквозную передачу URL.

gtag.js

Чтобы задать параметры отслеживания по умолчанию, настройте вызов команды gtag('consent', 'default', ...) на каждой странице сайта раньше всех команд, передающих данные отслеживания (таких, как config и event).

Например, вы можете присвоить всем параметрам значение "согласие не получено" и использовать его по умолчанию. Для этого выполните следующие действия:

gtag('consent', 'default', {
  'ad_storage': 'denied',
  'ad_user_data': 'denied',
  'ad_personalization': 'denied',
  'analytics_storage': 'denied'
});

Интеграция с асинхронными платформами для запросов согласия (необязательно)

Если ваш баннер загружается асинхронно, он может не всегда запускаться раньше тегов Google. Чтобы указать, сколько времени необходимо подождать, прежде чем отправить данные, установите параметр wait_for_update со значением в миллисекундах.

Например, чтобы по умолчанию запретить ad_storage на определенной странице, но при этом позволить платформе для запросов согласия изменять состояния согласия, используйте wait_for_update. В приведенном ниже примере кода для ad_storage в качестве значения по умолчанию задано denied, а инструменту согласия дается 500 миллисекунд на вызов команды gtag('consent', 'update', ...) до активации тегов.

  gtag('consent', 'default', {
    'ad_storage': 'denied',
    'wait_for_update': 500
  });

Менеджер тегов

Если вы используете шаблон режима согласия, согласие пользователя должно автоматически обновляться, когда он взаимодействует с баннером.

Если вы создаете шаблон режима согласия самостоятельно, используйте API Менеджера тегов для управления статусами согласия: setDefaultConsentState и updateConsentState. Также вам доступен gtagSet API, с помощью которого можно настроить ads_data_redaction и сквозную передачу URL.

gtag.js

Чтобы отправить статус согласия пользователя, используйте команду update. Поскольку режим согласия не сохраняет настройки, обновите статус согласия как можно скорее после взаимодействия пользователя с вашим решением для управления запросами согласия. После того как пользователь разрешит или запретит сбор данных, сохраните его выбор и вызывайте команду обновления на всех последующих страницах.

Вы должны самостоятельно проверять корректность значений для всех типов согласия. Подробную информацию о поддерживаемых типах можно найти в документации по API.

В примере ниже показано, как изменить статус согласия на granted, если пользователь согласился на все варианты.

<!-- Send consent updates when users interact with your consent banner -->
<script>
function allConsentGranted() {
  gtag('consent', 'update', {
    'ad_user_data': 'granted',
    'ad_personalization': 'granted',
    'ad_storage': 'granted',
    'analytics_storage': 'granted'
  });
}
</script>
<!-- Invoke your consent function when a user interacts with your banner -->
<body>
  ...
  <button onclick="allConsentGranted()">Accept all</button>
  ...
</body>

Пользователи могут изменить настройки согласия после первого взаимодействия. Например, пользователь, который изначально дал согласие, может позже отозвать его через панель настроек на вашем сайте.

Менеджер тегов

Если вы используете шаблон режима согласия, согласие пользователя должно обновляться автоматически, когда он взаимодействует с баннером или панелью настроек.

Если вы создаете шаблон режима согласия самостоятельно, используйте API updateConsentState, чтобы обновлять статус согласия, когда пользователь подтверждает новые настройки.

gtag.js

Чтобы обновить статус согласия, используйте команду update. Эта команда используется для любого изменения статуса согласия, в том числе с 'granted' на 'denied'.

Пример: отзыв согласия

Если пользователь ранее предоставил согласие для analytics_storage и ad_storage, но теперь хочет его отозвать, отправьте вызов update, отражающий его новый выбор:

// User updates their settings to deny consent
gtag('consent', 'update', {
  'analytics_storage': 'denied',
  'ad_storage': 'denied',
  'ad_user_data': 'denied',
  'ad_personalization': 'denied'
});

О чем важно помнить

  1. Сохранение. Убедитесь, что обновленные настройки согласия пользователя сохраняются, например в собственном файле cookie или локальном хранилище, чтобы при последующих загрузках страниц устанавливалось правильное состояние.
  2. Время. Вызывайте команду обновления, как только пользователь подтвердит новые настройки согласия в интерфейсе вашего сайта.

Пример реализации

В примере ниже для нескольких параметров режима согласия по умолчанию используется значение denied. Когда пользователь сообщает о своем решении, нужные параметры меняются на granted.

Менеджер тегов

На сайтах, использующих Менеджер тегов, обновления статусов согласия рекомендуется обрабатывать с помощью CMP. Такая платформа предоставляет шаблоны из галереи общедоступных шаблонов, с помощью которых можно создать тег для управления режимом согласия.

Если использовать шаблон невозможно, измените код своих страниц, как показано ниже. Порядок вызова команд в данном случае очень важен. Если код получения согласия будет вызываться в неправильном порядке, [настройки] согласия по умолчанию не будут работать.

<script>
  // Define dataLayer and the gtag function.
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}

  // Set default consent to 'denied' as a placeholder
  // Determine actual values based on your own requirements
  gtag('consent', 'default', {
    'ad_storage': 'denied',
    'ad_user_data': 'denied',
    'ad_personalization': 'denied',
    'analytics_storage': 'denied'
  });
</script>

<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->

<!-- Send consent updates when users interact with your consent banner -->
<script>
  function allConsentGranted() {
    gtag('consent', 'update', {
      'ad_user_data': 'granted',
      'ad_personalization': 'granted',
      'ad_storage': 'granted',
      'analytics_storage': 'granted'
    });
  }
</script>
<!-- Invoke your consent function when a user interacts with your banner -->
<body>
  ...
  <button onclick="allConsentGranted()">Accept all</button>
  ...
</body>

gtag.js

Порядок вызова команд в данном случае очень важен. Если код получения согласия будет вызываться не в том порядке, [настройки] согласия по умолчанию не будут работать. В зависимости от требований вашей компании реализация может различаться, но в любом случае рекомендуется следующий порядок выполнения кода:

  1. Загрузите тег Google. Это стандартный фрагмент кода. В него нужно добавить вызов функции gtag('consent', 'default', ...), как показано в примере ниже.

  2. Загрузите решение для управления согласием. Если оно загружается асинхронно, прочитайте раздел Интеграция с асинхронными платформами для запросов согласия. Там рассказывается, как организовать загрузку в нужном порядке.

  3. Когда пользователь разрешит или запретит сбор данных, вызовите функцию gtag('consent', 'update', ...) (если она не была вызвана решением для управления согласием).

<script>
// Define dataLayer and the gtag function.
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}

// Set default consent to 'denied' as a placeholder
// Determine actual values based on your own requirements
gtag('consent', 'default', {
  'ad_storage': 'denied',
  'ad_user_data': 'denied',
  'ad_personalization': 'denied',
  'analytics_storage': 'denied'
});
</script>
<!-- Google tag (gtag.js) -->
<script async src="//www.googletagmanager.com/gtag/js?id=TAG_ID">
</script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}

  gtag('js', new Date());
  gtag('config', 'TAG_ID');
</script>

<!-- Send consent updates when users interact with your consent banner -->
<script>
  function allConsentGranted() {
    gtag('consent', 'update', {
      'ad_user_data': 'granted',
      'ad_personalization': 'granted',
      'ad_storage': 'granted',
      'analytics_storage': 'granted'
    });
  }
</script>
<!-- Invoke your consent function when a user interacts with your banner -->
<body>
  ...
  <button onclick="allConsentGranted()">Accept all</button>
  ...
</body>

Google активно работает над созданием экосистемы цифровой рекламы, направленной на защиту конфиденциальности пользователей. Поэтому мы усиливаем контроль над применением правил в отношении согласия пользователей из ЕС.

Подробнее об изменениях в режиме согласия для трафика в Европейской экономической зоне (ЕЭЗ)…

В режиме согласия пользователи должны будут отправлять в дополнение к ad_storage и analytics_storage два новых параметра:

Название поля Допустимые значения Описание
ad_user_data 'granted' | 'denied' Устанавливает статус согласия на отправку в Google пользовательских данных, связанных с рекламой.
ad_personalization 'granted' | 'denied' Устанавливает статус согласия на персонализированную рекламу.

С помощью расширенных функций режима согласия вы можете:

  • указывать, с какими сервисами Google вы хотите делиться данными (с помощью интерфейса тега Google);
  • задавать алгоритм работы для определенного региона;
  • передавать данные о клике по объявлению, а также идентификаторы клиента и сеанса в URL, если пользователь не дал согласие на использование файлов cookie;
  • полностью удалять информацию об объявлении, если пользователь запретил использование рекламных файлов cookie.

Алгоритм работы тегов в зависимости от региона

Чтобы установить статусы согласия по умолчанию для посетителей из определенного региона, необходимо указать его в команде gtag consent default согласно стандарту ISO 3166-2. Это позволит вам соблюдать местное законодательство.

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

Менеджер тегов

Если вы используете шаблон тега из галереи, в нем могут быть предусмотрены региональные настройки. Если же вы создаете его самостоятельно, ознакомьтесь с информацией об алгоритме работы тегов в зависимости от региона в статье Как создать шаблон режима согласия.

gtag.js

В приведенном ниже примере для analytics_storage установлено значение denied для посетителей из Испании и с Аляски, а для ad_storage установлено значение denied для остальных пользователей.

  gtag('consent', 'default', {
    'analytics_storage': 'denied',
    'region': ['ES', 'US-AK']
  });

  gtag('consent', 'default', {
    'ad_storage': 'denied'
  });

Приоритет параметров с более детальным определением региона

Если на одной странице заданы две команды для режима согласия с различающимися значениями для административно-территориальных единиц разного уровня, то будет применяться команда, которая более точно определяет местоположение пользователя. Например, если в одной команде для ad_storage для региона "US" (США) задано значение granted, а в другой – для ad_storage для региона "US-CA" (США, Калифорния) задано значение denied, то для посетителей из Калифорнии будет использоваться команда с более узким регионом. В этом примере для пользователя из региона "US-CA" (США, Калифорния) для ad_storage будет установлено значение denied.

Регион ad_storage Алгоритм работы
US 'granted' Применяется ко всем пользователям США, кроме тех, что находятся в Калифорнии.
US-CA 'denied' Применяется к пользователям из Калифорнии.
Не указано 'granted' Используется значение по умолчанию: 'granted'. В этом примере оно применяется к посетителям не из Калифорнии и не из США.

Передача данных о клике по объявлению, а также идентификаторов клиента и сеанса с помощью URL

Когда пользователь переходит на ваш сайт после нажатия на объявление, информация о клике может добавляться в параметр запроса в URL целевой страницы. Чтобы вы получали максимально точные данные о ключевых событиях, эта информация обычно сохраняется в собственных файлах cookie вашего домена.

Но если для ad_storage задано значение denied, эта информация не будет сохранена локально. Чтобы повысить качество отслеживания в случаях, когда для ad_storage задано значение denied, вы можете передавать сведения о клике на другие страницы через параметры URL, используя механизм сквозной передачи URL.

Аналогично, если для analytics_storage задано значение denied, с помощью сквозной передачи URL можно собирать на страницах аналитические данные о событиях и сеансах (включая ключевые события) без файлов cookie.

Для использования сквозной передачи URL должны быть соблюдены следующие условия:

  • На странице есть тег Google или целевой тег с поддержкой режима согласия.
  • Рекламодатель включил функцию сквозной передачи URL.
  • На странице реализован режим согласия.
  • Исходящая ссылка ведет на страницу в том же домене, что и текущая страница.
  • В URL есть идентификатор GCLID или DCLID (только для тегов Google Рекламы и Floodlight).

Менеджер тегов

Если вы используете шаблон тега из галереи, в нем могут быть предусмотрены настройки сквозной передачи URL. Если же вы создаете его самостоятельно, ознакомьтесь с информацией о сквозной передаче URL с помощью API пользовательских шаблонов gtagSet в статье Как создать шаблон режима согласия.

Также можно настроить эту функцию в целевых тегах, теге Google или теге связывания конверсий.

Для тегов целевых страниц и тега Google:

  1. В рабочей области откройте меню Теги.
  2. Измените существующий тег Google или тег целевого сервиса или создайте новый.
  3. В настройках конфигурации добавьте новый параметр:
    • Название: url_passthrough.
    • Значение: true
  4. Сохраните тег и опубликуйте контейнер.

Для тегов Google Рекламы и Floodlight, подключенных через тег Google:

Чтобы включить эту функцию, создайте новый или используйте имеющийся тег связывания конверсий и установите флажок Включить связывание URL на всех страницах. Вы можете ознакомиться с общими инструкциями по созданию тега связывания конверсий.

Также можно задать для параметра url_passthrough значение true на каждой странице сайта перед фрагментом установки Менеджера тегов.

window.dataLayer = window.dataLayer || [];
function gtag(){window.dataLayer.push(arguments);}
gtag('set', 'url_passthrough', true);

gtag.js

Чтобы включить эту функцию, установите для параметра url_passthrough значение true. Добавьте следующую команду в стандартный фрагмент кода перед любой командой config:

gtag('set', 'url_passthrough', true);

При использовании сквозной передачи URL ко всем ссылкам перехода между страницами на вашем сайте могут добавляться некоторые параметры запроса:

  • gclid
  • dclid
  • gclsrc
  • _gl
  • wbraid

Чтобы достичь наилучших результатов, убедитесь в следующем:

  1. При перенаправлении на ваш сайт передаются все указанные параметры запроса.
  2. В ваших инструментах отслеживания настроено игнорирование этих параметров в URL страниц.
  3. Наличие этих параметров в URL не нарушает нормальную работу сайта.

Удаление данных рекламы

Если для ad_storage задано значение denied, при показе рекламы не будут создаваться новые файлы cookie, а сторонние файлы cookie, ранее установленные для google.com и doubleclick.net, будут использоваться только для предотвращения спама и мошенничества. Данные, отправляемые в Google, будут по-прежнему содержать полный URL страницы, включая информацию о клике по объявлению в параметрах URL.

Менеджер тегов

Если вы используете шаблон тега из галереи, в нем могут быть предусмотрены настройки удаления данных рекламы. Если же вы создаете его самостоятельно, ознакомьтесь с информацией об удалении данных рекламы в статье Как создать шаблон режима согласия.

gtag.js

Чтобы удалять данные рекламы, когда для ad_storage задано значение denied, присвойте параметру ads_data_redaction значение true:

gtag('set', 'ads_data_redaction', true);

Если параметр ads_data_redaction имеет значение true и для ad_storage задано значение denied, то идентификаторы клика по объявлению, переданные в сетевом запросе соответствующим тегом Google Рекламы или Floodlight, удаляются. Сетевые запросы также будут отправляться через домен, не использующий сторонние файлы cookie, например pagead2.googlesyndication.com.

Распространенные проблемы

Ниже перечислены распространенные проблемы, возникающие при реализации.

При использовании расширенного режима согласия вам нужно вызвать команду обновления на странице, где пользователь предоставляет согласие.

Если страница сначала загружается с отклоненным согласием, а затем перезагружается с предоставленным согласием после изменения статуса согласия, теги Google могут потерять ключевые данные с исходной страницы. Последующие отчеты могут быть неполными.

Например, в Google Аналитике в сеансах с согласием может отсутствовать событие session_start.

Чтобы избежать этой проблемы, вызывайте команду обновления каждый раз, когда статус согласия пользователя меняется.

В некоторых случаях, когда тип согласия меняется с "Отклонено" на "Предоставлено", теги Google могут отправлять данные на основе этого изменения. Если команда update вызывается при выгрузке страницы, браузер может отменить этот сетевой трафик до его завершения. Все последующие отчеты могут быть неполными.

Если возможно, убедитесь, что команды обновления регистрируются задолго до выгрузки страницы.

Дальнейшие действия

Устаревшие теги

Если вы используете устаревшие версии тегов, например ga.js, analytics.js или conversion.js, перейдите на gtag.js или Google Менеджер тегов.

Ознакомьтесь с подробной информацией о настройках конфиденциальности для устаревших тегов в следующих сервисах: