如何通过Google Publisher Tag实现970x66优先的广告兜底展示?
如何让Google Ad Manager优先展示970x66广告,无货时自动切换为728x90?
我希望网站优先展示970x66尺寸的广告,当该尺寸不可用时,自动用728x90尺寸的广告替代。
原本的单尺寸展示代码是这样的:
window.googletag = window.googletag || {} window.googletag.cmd = window.googletag.cmd || [] window.googletag.cmd.push(function() { googletag.defineSlot('/25283/SceneIndex_970x66', [970, 66], 'dfp_ad_8').addService(googletag.pubads()); googletag.pubads().enableSingleRequest(); googletag.enableServices(); }); googletag.cmd.push(function() { googletag.display('dfp_ad_8'); });我尝试在
defineSlot里指定多尺寸来实现需求,代码如下:window.googletag = window.googletag || {} window.googletag.cmd = window.googletag.cmd || [] window.googletag.cmd.push(function() { googletag.defineSlot('/25283/SceneIndex_728x90', [[970, 66], [728, 90]], 'dfp_ad_8').addService(googletag.pubads()); googletag.pubads().enableSingleRequest(); googletag.enableServices(); }); googletag.cmd.push(function() { googletag.display('dfp_ad_8'); });但结果不符合预期:当没有970x66广告时,页面显示空白iframe,而不是已有的728x90广告。请问怎么才能实现我想要的效果?
问题根源分析
你的代码有两个关键问题:
- 广告单元匹配错误:你把广告单元从
SceneIndex_970x66换成了SceneIndex_728x90,但这个单元很可能只配置了728x90的库存,Ad Manager无法在这个单元下返回970x66的广告;如果想让同一个广告单元支持两种尺寸,必须先在Ad Manager后台把这两个尺寸添加到目标广告单元中。 - 缺少尺寸优先级配置:仅仅在
defineSlot里列出多个尺寸,Ad Manager不会自动按你想要的顺序优先请求,需要通过**尺寸映射(Size Mapping)**来明确优先级规则。
正确实现方案
按照以下步骤调整代码和后台配置:
1. 后台广告单元配置(必做)
登录Google Ad Manager后台,找到你要使用的广告单元(可以是现有单元或新建),确保它同时包含970x66和728x90这两个尺寸。这样Ad Manager才会在该单元下尝试返回任意一个可用的尺寸。
2. 前端代码调整
使用sizeMappingBuilder来定义尺寸优先级,告诉Ad Manager优先请求970x66,只有当该尺寸无货时才请求728x90。同时确保广告单元路径正确(对应后台配置好的那个支持双尺寸的单元):
window.googletag = window.googletag || {}; window.googletag.cmd = window.googletag.cmd || []; window.googletag.cmd.push(function() { // 创建尺寸映射:优先970x66,备用728x90 var sizeMap = googletag.sizeMapping() .addSize([970, 0], [[970, 66], [728, 90]]) // 视口宽度≥970px时,优先请求970x66,无货则728x90 .addSize([728, 0], [[728, 90]]) // 视口宽度在728-969px之间时,只请求728x90 .addSize([0, 0], []) // 小屏不请求广告(可根据需求调整) .build(); // 定义广告位,使用支持双尺寸的广告单元路径 var adSlot = googletag.defineSlot('/25283/SceneIndex_DualSize', [[970, 66], [728, 90]], 'dfp_ad_8') .defineSizeMapping(sizeMap) // 应用尺寸映射规则 .addService(googletag.pubads()); googletag.pubads().enableSingleRequest(); googletag.enableServices(); }); googletag.cmd.push(function() { googletag.display('dfp_ad_8'); });
备选方案:双广告位 fallback
如果你不想新建双尺寸广告单元,也可以分别定义两个独立的广告位,通过监听渲染事件实现fallback:
window.googletag = window.googletag || {}; window.googletag.cmd = window.googletag.cmd || []; window.googletag.cmd.push(function() { var slot970 = googletag.defineSlot('/25283/SceneIndex_970x66', [970, 66], 'dfp_ad_8_970').addService(googletag.pubads()); var slot728 = googletag.defineSlot('/25283/SceneIndex_728x90', [728, 90], 'dfp_ad_8_728').addService(googletag.pubads()); // 监听广告渲染事件 googletag.pubads().addEventListener('slotRenderEnded', function(event) { if (event.slot === slot970 && !event.isEmpty) { // 970x66广告加载成功,显示它并隐藏备用容器 document.getElementById('dfp_ad_8_970').style.display = 'block'; document.getElementById('dfp_ad_8_728').style.display = 'none'; } else if (event.slot === slot970 && event.isEmpty) { // 970x66无货,显示728x90广告 document.getElementById('dfp_ad_8_970').style.display = 'none'; googletag.display('dfp_ad_8_728'); } }); googletag.pubads().enableSingleRequest(); googletag.enableServices(); }); // 先尝试显示970x66广告 googletag.cmd.push(function() { googletag.display('dfp_ad_8_970'); });
这种方法需要页面上有两个独立的广告容器(dfp_ad_8_970和dfp_ad_8_728)。
验证方法
测试时可以使用Google Ad Manager的测试广告或者故意让970x66尺寸的广告库存耗尽,观察页面是否自动切换到728x90的广告。
内容的提问来源于stack exchange,提问作者moondaisy




