You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过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广告。请问怎么才能实现我想要的效果?


问题根源分析

你的代码有两个关键问题:

  1. 广告单元匹配错误:你把广告单元从SceneIndex_970x66换成了SceneIndex_728x90,但这个单元很可能只配置了728x90的库存,Ad Manager无法在这个单元下返回970x66的广告;如果想让同一个广告单元支持两种尺寸,必须先在Ad Manager后台把这两个尺寸添加到目标广告单元中。
  2. 缺少尺寸优先级配置:仅仅在defineSlot里列出多个尺寸,Ad Manager不会自动按你想要的顺序优先请求,需要通过**尺寸映射(Size Mapping)**来明确优先级规则。

正确实现方案

按照以下步骤调整代码和后台配置:

1. 后台广告单元配置(必做)

登录Google Ad Manager后台,找到你要使用的广告单元(可以是现有单元或新建),确保它同时包含970x66728x90这两个尺寸。这样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_970dfp_ad_8_728)。

验证方法

测试时可以使用Google Ad Manager的测试广告或者故意让970x66尺寸的广告库存耗尽,观察页面是否自动切换到728x90的广告。

内容的提问来源于stack exchange,提问作者moondaisy

火山引擎 最新活动