根据 Google 更新后的欧盟地区用户意见征求政策,您必须向位于欧洲经济区 (EEA) 和英国境内的用户披露相关信息;在法律有相应要求的情况下,必须就 Cookie 或其他本地存储方式的使用征得他们的同意;如果需要收集、共享和使用个人数据来实现广告个性化,也须就此征得他们的同意。此政策反映了欧盟《电子隐私指令》和《一般数据保护条例》(GDPR) 的要求。
您配置的所有会因请求而异的广告个性化设置都会应用于全球用户,而不仅限于 EEA 和英国境内的用户。对于向非 EEA 用户或非英国用户发出的请求,如果您在其中添加了会因请求而异的参数,系统会返回非个性化广告。
针对使用 GPT 代码和 AdSense 代码的网页的广告个性化设置
发出广告请求
默认情况下,Google 在收到广告请求后会投放个性化广告,具体选择的广告取决于网页的内容以及访问该网页的具体用户的历史记录。Google 也支持投放非个性化广告。详细了解个性化广告和非个性化广告
如果您符合我们《意见征求政策》的要求,并且希望向欧洲经济区和英国境内访问您网站的所有用户投放非个性化广告,则无需对您的广告代码进行任何更改。您可在 Google Ad Manager 界面或 AdSense 界面中启用非个性化广告投放。
如果发布商希望向一些用户投放个性化广告,而向另外一些用户投放非个性化广告,则可使用 GPT 和 AdSense/Ad Exchange 异步广告代码,这样就会按网页触发非个性化广告投放。如果您允许自己的所有用户或部分用户在个性化广告与非个性化广告间进行选择,这些广告代码可能就会派上用场。
非个性化广告不会将 Cookie 用于实现广告个性化,但会使用它们来确保广告展示频次不超过频次上限、生成汇总的广告报表以及打击欺诈和滥用行为。因此,在《电子隐私指令》中有关 Cookie 使用的规定所适用的国家/地区,需就使用 Cookie 征得用户同意后,才能将其用于前述目的。详细了解非个性化广告
对于 GPT 代码:
请使用下面的方法:googletag.pubads().setRequestNonPersonalizedAds(1)
setCookieOptions()
调用不适用于 GDPR。
对于 AdSense 和 Ad Exchange 异步广告代码:
请设置下面的值:(adsbygoogle=window.adsbygoogle||[]).requestNonPersonalizedAds=1
对于由下列受支持的广告代码从网页中发出的后续 Google 广告请求,这些方法将触发非个性化广告请求:GPT、AdSense 或 Ad Exchange 异步广告代码 (adsbygoogle.js
) 以及 IMA SDK。您只需在浏览器的“开发者工具”视图中找到相应广告请求,然后看看其中是否有参数 &npa=1
,即可验证广告代码所请求的是否为非个性化广告。
调用 setRequestNonPersonalizedAds(0)
或设置 requestNonPersonalizedAds=0
会重新启用个性化。如果某个网页包含多种 Google 广告代码,例如同时包含 GPT 代码和 AdSense/Ad Exchange 异步代码,则可能无法预测哪种代码会先执行,因此为了安全起见,请对每种代码使用非个性化广告控件。
暂停广告请求
GPT 和 AdSense/Ad Exchange 异步代码支持先加载您的网页,等到出现明确信号后才开始发出广告请求。如果您需要等到用户与意见征求界面互动后再发出广告请求,这类代码可能会很有用。
在使用 GPT 时:如果您采用异步模式,则可以延迟发出广告请求。
- 使用
disableInitialLoad()
函数可以阻止此代码在网页首次加载时发送广告请求。您必须在使用display()
触发任何广告请求之前执行此函数。 - 像往常一样调用
googletag.cmd.push(...)
来设置广告位。 - 在用户选择是否同意后,根据需要调用
setRequestNonPersonalizedAds(1)
。 - 使用
refresh()
函数可以继续发送广告请求。 - 如果您不调用
refresh()
,系统将不会显示任何广告。如果您使用enableSyncRendering()
,则无法延迟发出请求。
在使用 AdSense 或 Ad Exchange 异步广告代码时:
- 使用
(adsbygoogle=window.adsbygoogle||[]).pauseAdRequests=1
可以阻止此代码发送广告请求。您必须在使用adsbygoogle.push(...)
触发任何广告请求之前执行此函数。 - 像往常一样调用
adsbygoogle.push(...)
来设置广告位。 - 在用户选择是否同意后,根据需要设置
requestNonPersonalizedAds=1
。 - 使用
(adsbygoogle=window.adsbygoogle||[]).pauseAdRequests=0
可以继续发送广告请求。 - 如果您不设置
pauseAdRequests=0
,系统将不会显示任何广告。
此方法会阻止发送广告请求,但各种脚本依然会加载。虽然可以读取 Google 网域中的现有 Cookie,但不会设置新的 Cookie。与现有 Cookie 关联的所有数据都不会用于投放广告和衡量广告效果。
如果您的意见征求管理解决方案提供了一种可将脚本延迟到用户做出选择后再加载的方法,那么我们还可以采取另外一种延迟发出广告请求的方案,即延迟加载 gpt.js
和 adsbygoogle.js
。其他类型的 Google 广告代码不支持暂停广告请求;因此,如果采用这些类型的代码,您就需要避免在您还未准备好请求个性化广告或非个性化广告之时加载它们。
针对 AMP 网页的广告个性化设置
来自 AMP 网页的广告请求提供的广告个性化设置与之前所述的非 AMP 网页相同:发布商可以选择向位于欧洲经济区 (EEA) 和英国境内的所有用户投放非个性化广告,也可以根据用户意见来选择是投放个性化广告还是非个性化广告。下文说明了对于通过 <amp-ad type=”doubleclick”>
或 <amp-ad type=”adsense”>
请求广告的 AMP 网页,如何针对每种情形进行配置。
向所有 EEA 和英国用户投放非个性化广告
如果您的 AMP 广告代码不使用实时配置 (RTC),您只需在 Google Ad Manager 界面或 AdSense 界面中启用非个性化广告投放即可,而无需进一步更改 AMP 网页。
如果您的 AMP 广告代码使用实时配置 (RTC),则您可以对网页进行配置,以避免针对接收非个性化广告的用户(例如,位于 EEA 和英国境内的那些用户)发送 RTC 请求。我们在下方列出了必不可少的组件和配置(amp-geo
和 amp-consent
),以帮助您实现此目的。
<!-- 首先我们需要设置 amp-geo 扩展程序。我们来定义一个群组:“eea”,其中包含欧洲经济区的所有国家/地区。由于 EEA 成员国/地区可能会随时间推移而发生变化,因此您需要确保该列表随时处于最新状态。-->
<amp-geo layout="nodisplay">
<script type="application/json"
{
"ISOCountryGroups": {
"eea": [ "at", "be", "bg", "cy", "cz", "de", "dk", "ee", "es", "fi", "fr",
"gb", "gr", "hr", "hu", "ie", "is", "it", "li", "lt", "lu", "lv", "mt", "nl",
"no", "pl", "pt", "ro", "se", "si", "sk"]
}
}
</script>
</amp-geo>
<!-- 接下来,我们需要为 EEA 国家/地区内的最终用户设置意见征求组件。我们稍后会将其配置为自动拒绝,因此它实际上不会发出提示来征求用户意见。这样就会停止发出 RTC 出价邀约,同时向 Ad Manager/AdSense 发出投放非个性化广告的信号。 -->
<amp-consent layout="nodisplay" id="consent-element">
<script type="application/json">
{
"consents": {
"my_consent": {
"promptIfUnknownForGeoGroup": "eea"
}
}
}
</script>
</amp-consent>
您必须将 data-block-on-consent
属性添加到相应网页上的所有现有 amp-ad
组件中,如下所示:
<!-- 最后,我们设置广告代码,使其在用户意见征求环节自动拒绝 -->
<amp-ad data-block-on-consent="_auto_reject"
width=320 height=50
type="doubleclick"
data-slot="/4119129/mobile_ad_banner">
</amp-ad>
根据用户意见投放个性化广告/非个性化广告
由于 AMP 不允许使用自定义 JavaScript,因此,具体是请求个性化广告还是请求非个性化广告,取决于 amp-consent
组件的配置以及 data-block-on-consent
和 data-npa-on-unknown-consent
属性。假设您已配置了一个 amp-consent
组件,并已使用 data-block-on-consent
将该组件关联到了相应网页上的所有 <amp-ad>
代码:
- 如果用户对
amp-consent
组件做出了肯定的响应(用户在看到意见征求提示时表示同意),网页将正常发出广告请求。 - 如果用户对
amp-consent
组件做出了否定的响应(用户在看到意见征求提示时表示拒绝),网页将请求非个性化广告。 - 如果用户对
amp-consent
的响应未知(用户在看到意见征求提示时将其关闭):- 默认情况下,网页不会发出任何广告请求
- 如果
data-npa-on-unknown-consent
设为true
,网页将请求非个性化广告
- 如果您通过配置
amp-geo
组件,使意见征求界面不向位于特定地理位置的用户显示,网页将正常发送请求。
如果您的 <amp-ad>
代码未使用 data-block-on-consent
,或者 amp-consent
组件尚未正确配置,网页将正常发送请求。
下例所示的配置会向位于 EEA 内的所有用户发出意见征求提示,从而引发如上所述的行为:
<!-- 首先我们需要设置 amp-geo 扩展程序。我们来定义一个群组:“eea”,其中包含欧洲经济区的所有国家/地区。由于 EEA 成员国/地区可能会随时间推移而发生变化,因此您需要确保该列表随时处于最新状态。-->
<amp-geo layout="nodisplay">
<script type="application/json">
{
"ISOCountryGroups": {
"eea": [ "at", "be", "bg", "cy", "cz", "de", "dk", "ee", "es", "fi", "fr",
"gb", "gr", "hr", "hu", "ie", "is", "it", "li", "lt", "lu", "lv", "mt", "nl",
"no", "pl", "pt", "ro", "se", "si", "sk"]
}
}
</script>
</amp-geo>
<!-- 接下来,我们需要为“eea”国家/地区群组中的用户指定用户意见征求设置 -->
<amp-consent layout="nodisplay" id="consent-element">
<script type="application/json">
{
"consents": {
"my_consent": {
"promptIfUnknownForGeoGroup": "eea",
"promptUI": "myConsentFlow"
}
}
}
</script>
</amp-consent>
<!-- 最后,我们设置广告代码,使其在必要时等待用户意见 -->
<amp-ad data-block-on-consent
width=320 height=50
type="doubleclick"
data-slot="/4119129/mobile_ad_banner">
</amp-ad>
请注意,您还可通过其他方式有选择性地向用户发出意见征求提示,包括配置相应网页以将 CORS POST 请求发送给您通过 checkConsentHref
配置的端点。如需了解详情,请阅读 amp-consent 文档。
针对其他代码的广告个性化设置
GPT 回传代码
如果您使用的是 GPT 回传代码,则可以在自己的 API 调用中添加以下代码,将广告请求标记为非个性化广告请求:
googletag.pubads().setRequestNonPersonalizedAds(int options);
将参数 options
设置为整数值 1 可将广告请求标记为 NPA(非个性化广告);设置为 0 则表示将广告请求标记为符合个性化广告投放条件。
示例:
<script src="https://securepubads.g.doubleclick.net/tag/js/gpt.js">
googletag.pubads().setRequestNonPersonalizedAds(1);
googletag.pubads().definePassback("123456/ad/unit", [100,200])
.display();
</script>
无代码请求
如果您使用的是无代码请求,则可以通过直接向代码请求网址中添加 npa=[int]
参数来将广告请求标记为非个性化广告请求。我们建议您在代码中靠前的位置指定该参数,以避免任何截断风险。指定 npa=1
可将广告请求标记为非个性化广告请求。如果您不指定该参数,则默认为投放个性化广告。例如:
https://securepubads.g.doubleclick.net/gampad/ad?iu=/12345/adunit&sz=728x90&npa=1&c=12345
AdSense 搜索广告
默认情况下,Google 在收到广告请求后会投放个性化广告,具体选择的广告取决于用户的搜索查询以及执行搜索的具体用户的历史记录。Google 也支持投放非个性化广告。详细了解个性化广告和非个性化广告
如果发布商希望向一些用户投放个性化广告,而向另外一些用户投放非个性化广告,则可使用 AdSense 搜索广告代码,这样就会按网页触发非个性化广告投放。如果您允许自己的所有用户或部分用户在个性化广告与非个性化广告间进行选择,这些广告代码可能就会派上用场。
对于自定义搜索广告 - 网页广告代码:将以下内容添加到自定义搜索广告代码中的 pageOptions
:
personalizedAds: false,
对于 AdMob 代码:
builder.setAdvancedOptionValue("personalizedAds", "false");
对于 iOS 代码:
[request setAdvancedOptionValue:@"false" forKey:@"personalizedAds"];
这些方法会针对该特定请求触发非个性化广告请求。这是一个无状态参数。如果未针对用户在后续请求中设置该参数,则此行为将恢复为默认行为,即请求个性化广告。
Google 移动广告 SDK
要详细了解 Google 移动广告 SDK,请访问应用开发者网站(iOS GMA SDK、Android GMA SDK)。
Google 互动式媒体广告 SDK(适用于视频)
对于视频请求,通过将 npa=1
参数附加到您的广告代码,即可指明您希望 Google 将您的视频内容视为非个性化内容。为此,您可以使用手动构建的主视频广告代码,也可以使用任何针对特定平台的 IMA SDK(HTML 5 IMA SDK、iOS IMA SDK、Android IMA SDK、Google Cast IMA SDK)。
如果您的视频播放器使用 Ad Manager 的动态广告插播功能,它还可在视频点播 (VOD) 或直播请求中添加 npa=1
参数,从而将该参数传递到所包含的任何广告请求中(DAI HTML5 SDK、DAI Cast SDK、DAI iOS SDK、DAI Android SDK、DAI Roku SDK、DAI tvOS SDK)。
旧版 Google 发布商广告代码
其他类型的 Google 广告代码(例如:旧版 GAM 代码、GUT 代码和 AdSense 或 Ad Exchange 同步代码 (show_ads.js
))不支持发出非个性化广告请求。在您准备好请求个性化广告之前,您应避免加载这些代码。另外,您可能会发现采用以下方法可以更轻松地遵守欧盟地区用户意见征求政策:改用某种同时支持个性化广告和非个性化广告的代码,同时暂停发出广告请求以征得必要的用户同意。