在网站上设置意见征求模式

如果开发者在网站上维护自己的意见征求解决方案并希望集成意见征求模式,请参阅本页内容。如需了解关于意见征求模式的基本信息,请参阅意见征求模式概览。如果您使用意见征求管理平台 (CMP) 征求用户意见,请详细了解如何通过 CMP 设置意见征求模式

您可以采用基本方式或高级方式来实现意见征求模式。查看公司的指南,选择实现方法以及要设置的默认值。详细了解基本意见征求模式与高级意见征求模式

准备工作

在实现意见征求模式之前,不妨考虑以下事项:

  • 如果您使用跟踪代码管理器并希望自行维护横幅,建议的方法是通过跟踪代码管理器容器加载横幅。为此,您需要创建意见征求模式模板。或者,您也可以使用社区模板库中的意见征求模式模板。

  • 如果您使用 gtag.js,请确保在您网站的每个网页上都添加了 Google 代码。意见征求模式代码会添加到您网站的每个网页中。

如需设置意见征求模式,您需要执行以下操作:
  1. 在用户授予同意之前:设置默认同意情况
  2. 根据用户与意见征求设置的互动情况来更新同意情况

为您使用的每种意见征求类型设置一个默认值。默认情况下,未设置任何意见征求模式值。

最佳做法是将默认的意见征求设置的范围设定为您向访问者展示意见征求横幅的区域。这有助于在需要意见征求横幅的区域内保留衡量功能,并且 Google 代码会相应地调整自身行为。您还可以防止在没有意见征求横幅或意见征求横幅不适用的情况下,衡量结果出现任何偏差。请参阅针对特定区域的行为

gtag.js

若要调整默认的衡量功能,请在网站的每个网页上调用 gtag('consent', 'default', ...) 命令,然后再调用发送衡量数据的命令(例如 configevent)。

例如,若要将所有参数默认设置为均未征得用户同意,请按以下步骤操作:

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

可选:与异步意见征求管理平台集成

如果您的横幅是以异步方式加载的,则它有时可能不会先于您的 Google 代码运行。为处理此类情况,请指定 wait_for_update 和一个单位为毫秒的值,以控制在发送数据前的等待时间。

例如,如需在特定网页上默认拒绝 ad_storage,但允许 CMP 更新同意情况,请使用 wait_for_update。在以下代码中,ad_storage 默认为 denied,且系统在触发代码之前为用户意见征求工具留出了 500 毫秒的时间来调用 gtag('consent', 'update', ...)

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

跟踪代码管理器

如果您使用 Google 跟踪代码管理器,请使用 Tag Manager Consent API 自行创建模板。开始时不妨参考下面的示例

使用跟踪代码管理器专用 API(setDefaultConsentStateupdateConsentState)来管理同意情况。gtagSet API 可以酌情用来选择性地设置 ads_data_redaction 和网址传递设置。

gtag.js

如需发送用户的同意情况,请使用 update 命令。意见征求模式不保存用户意见选择,因此当用户与您的意见征求管理解决方案互动时,请立即更新同意情况。在用户表示同意后,应保留他们的选择,并据此在后续网页上调用更新命令。

您需确保为所有意见征求类型设置正确的值。如需了解与支持的类型有关的全部详情,请参阅 API 参考文档

以下代码示例演示了当用户同意所有选项时,如何将同意情况更新为 granted

<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()">Yes</button>
  ...
</body>

跟踪代码管理器

使用意见征求模式模板时,用户同意情况应会在用户与横幅互动时自动更新。

如果您自行创建意见征求模式模板,请使用用于管理同意情况的跟踪代码管理器专用 API setDefaultConsentStateupdateConsentStategtagSet API 可以酌情用来选择性地设置 ads_data_redaction 和网址传递设置。

实现示例

下面的示例将多个意见征求模式参数默认设置为 denied。当用户针对意见征求做出选择之后,相关参数会更新为 granted

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="https://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>

<!-- Create one update function for each consent parameter -->
<script>
  function consentGrantedAdStorage() {
    gtag('consent', 'update', {
      'ad_storage': 'granted'
    });
  }
</script>
<!-- Invoke your consent functions when a user interacts with your banner -->
<body>
  ...
  <button onclick="consentGrantedAdStorage">Yes</button>
  ...
</body>

跟踪代码管理器

对于使用跟踪代码管理器的网站,我们建议使用 CMP 处理访问者针对意见征求做出的最新选择。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 -->

<!-- Create one update function for each consent parameter -->
<script>
  function consentGrantedAdStorage() {
    gtag('consent', 'update', {
      'ad_storage': 'granted'
    });
  }
</script>
<!-- Invoke your consent functions when a user interacts with your banner -->
<body>
  ...
  <button onclick="consentGrantedAdStorage()">Yes</button>
  ...
</body>

Google 始终致力于打造以隐私保护为中心的数字广告生态系统,在这一过程中,我们正在加强对欧盟地区用户意见征求政策的执行力度。

详细了解 Google 针对欧洲经济区 (EEA) 境内流量的意见征求模式更新

除了 ad_storageanalytics_storage 之外,意见征求模式用户还需要发送两个新参数:

字段名称 允许的值 说明
ad_user_data 'granted' | 'denied' 设置有关向 Google 发送与广告相关的用户数据的用户同意情况。
ad_personalization 'granted' | 'denied' 设置有关个性化广告的用户意见征求机制。

高级意见征求功能包括:

  • 通过 Google 代码界面设置要与哪些 Google 服务共享数据
  • 设置针对某个地理区域的行为。
  • 在用户未表示同意使用 Cookie 的情况下,在网址中传递广告点击、客户端 ID 和会话 ID 方面的信息。
  • 在用户拒绝使用广告 Cookie 时,完全隐去(移除)广告信息。

针对特定区域的行为

若要设置适用于特定区域的访问者的默认同意情况,请在 gtag 意见征求默认命令中指定相应区域(根据 ISO 3166-2)。通过使用区域值,您可以遵守区域性法规。

您可以为特定地区设置默认值,然后为所有其他地区设置不同的默认值。不含区域参数的 gtag 用户意见征求默认命令会为未被其他特定于区域的命令涵盖的所有访问者设置默认值。

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 设置为 granted,针对区域“美国加利福尼亚州”将 ad_storage 设置为 denied,则对于来自加利福尼亚州的访问者而言,更具体的“美国加利福尼亚州”设置将会生效。这意味着,在此示例中会针对来自美国加利福尼亚洲的访问者将 ad_storage 设置为 denied

区域 ad_storage 行为
美国 'granted' 适用于加利福尼亚州以外的美国境内用户
美国加利福利亚州 'denied' 适用于美国加利福尼亚洲的用户
未指定 'granted' 使用 'granted' 的默认值。在这个示例中,适用于既不在美国境内,又不在美国加利福利亚州的访问者

在网址中传递广告点击、客户端 ID 和会话 ID 方面的信息

如果用户在点击某个广告后访问您的网站,则与该广告相关的信息可能会以查询参数的形式附加到着陆页网址末尾。为了提高关键事件计数的准确性,此类信息通常会存储在您网域上的第一方 Cookie 中。

不过,如果将 ad_storage 设置为 denied,此类信息就不会保存在本地。若要在 ad_storagedenied 的情况下提高衡量广告点击时的准确性,您可以选择使用网址传递功能,在所有网页中通过网址参数传递广告点击相关信息。

同样,如果将 analytics_storage 设置为 denied,网址传递功能将可用于在不采用 Cookie 的情况下,在所有网页中发送基于事件和会话的分析数据(包括关键事件)。

若要使用网址传递功能,必须满足以下条件:

  • 您的 Google 代码能够知晓用户意见,并显示在网页上。
  • 广告客户已启用网址传递功能。
  • 在网页上实现了意见征求模式。
  • 出站链接所指向的网域与当前网页的网域相同。
  • 网址中存在 GCLID/DCLID(仅限 Google Ads 代码和 Floodlight 代码)

gtag.js

若要启用此功能,请将 url_passthrough 参数设置为 true。在所有 config 命令之前,将以下命令添加到默认代码段中:

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

跟踪代码管理器

如果您使用模板来创建代码,它可能会提供一些控件,用于设置网址传递功能。如果您要自行创建模板代码,请参阅创建意见征求模式模板,详细了解如何使用 gtagSet 自定义模板 API 设置网址传递功能

或者,您也可以使用下列选项在转化链接器代码和/或 Google Analytics 代码中进行设置

对于 Google Ads 代码和 Floodlight 代码:

若要启用此功能,请创建(或使用现有的)转化链接器代码,并确保选中在所有页面网址上启用关联对应的复选框。如需了解如何创建转化链接器代码,请参阅基本设置

对于 Google Analytics 代码:

  1. 在跟踪代码管理器中,前往要设置的字段,然后选择 **代码配置

    要设置的字段**。

    1. 展开“要设置的字段”部分后,点击添加行
    2. 对于字段名称,请输入 url_passthrough
    3. 对于,请输入“true”。
    4. 保存代码并发布。

    或者,您也可以先在网站的每个网页上将 url_passthrough 参数设为 true,然后再添加 GTM 安装代码段。

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

    在使用网址传递功能的情况下,当用户浏览您网站上的网页时,一些查询参数可能会附加到链接中:

    • gclid
    • dclid
    • gclsrc
    • _gl
    • wbraid

    为了达到最佳效果,请确保以下几点:

    1. 您网站上的重定向会传递上述所有查询参数。
    2. 您的分析工具会忽略网页网址中的这些参数。
    3. 这些参数不会干扰您的网站行为。

隐去广告数据

ad_storagedenied 时,系统不会出于广告目的设置新的 Cookie。此外,之前在 google.com 和 doubleclick.net 上设置的第三方 Cookie 将仅用于防范垃圾内容和欺诈。发送到 Google 的数据仍将包含完整网址,其中包括网址参数中的所有广告点击信息。

gtag.js

若要在 ad_storagedenied 时进一步隐去广告数据,请将 ads_data_redaction 设置为 true

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

ads_data_redactiontruead_storagedenied 时,系统会隐去 Google Ads 代码和 Floodlight 代码在网络请求中发送的广告点击标识符。网络请求也将通过无 Cookie 的网域发送。

跟踪代码管理器

如果您使用模板来创建代码,它可能会提供一些控件,用于进一步隐去广告数据。如果您要自行创建模板代码,请参阅创建意见征求模式模板,详细了解如何隐去广告数据

常见问题

实现高级意见征求模式后,您应在用户表示同意的网页上调用更新命令。

如果网页在加载时用户拒绝了同意,然后在用户更改同意情况后重新加载时用户同意了,Google 代码可能会丢失原始网页中的关键数据点。任何后续报告可能不完整。

例如,在 Google Analytics 中,许多已征得同意的会话可能缺少 session_start 事件。

为避免此问题,请在用户同意情况发生变化时调用 update 命令。

在某些情况下,当用户意见类型从“拒绝”更新为“同意”时,Google 代码可能会根据此更新发送衡量数据。如果更新命令是在网页卸载时调用的,浏览器可能会在完成之前取消此网络流量。任何后续报告可能不完整。

如果可能,请确保在网页卸载之前,更新命令已得到充分记录。

后续步骤

旧版代码控制

如果您使用的是旧版代码(例如 ga.js、analytics.js 或 conversion.js),请更新为 gtag.js 或 Google 跟踪代码管理器。

如需详细了解其他旧版代码的隐私控制机制,请参阅以下文档: