电商网站、内容平台和品牌官网通常会放置大量站内广告,例如首页 Banner、导航推荐位、商品推荐模块和活动入口。
这些广告位看起来与普通页面元素没有区别,但分析时往往需要回答几个独立问题:
- 每个广告位展示了多少次?
- 用户点击了哪个广告位?
- 不同广告位的点击率是多少?
- 哪个广告位最终带来了订单或线索?
- 一个页面同时展示多个广告位时,如何避免发送多个 Adobe Analytics 请求?
本文介绍一种适用于多个广告位的 Adobe Analytics 实现方式:使用 s.products、Numeric Event 和 Merchandising eVar,在一个 Server Call 中同时记录多个广告展示和点击。
应该选择哪种追踪方案
不同页面结构适合不同方案。
| 场景 | 推荐方案 | 主要限制 |
|---|---|---|
| 每个页面只有一个广告位 | Event + 普通 eVar | 无法在同一 Hit 中灵活记录多个广告位 |
| 一个 Hit 只需要传递多个广告名称 | List eVar | 展示、点击与广告位之间的关系不够直观 |
| 广告名称需要进一步拆分 | eVar + Classification | eVar 值长度有限,分类依赖后续维护 |
| 一个页面存在多个广告位,并且需要分别记录展示和点击 | s.products + Numeric Event + Merchandising eVar |
配置稍复杂,但数据关系最清楚 |
普通 eVar 的值最大为 255 字节,因此不建议把大量广告位拼成一个很长的字符串。
s.products 是一个多值变量,可以在同一个 Hit 中传递多个条目,并让每个条目分别携带 Event 和 Merchandising eVar。这正适合一个页面同时出现多个广告位的场景。其完整字符串上限为 64 KB,多个条目之间使用逗号分隔,详见 Adobe products 变量文档
数据流设计
推荐的数据流如下:
- 页面渲染广告位,并把已经满足展示条件的广告ID写入数据层DigitalData。
- 如果用户从 Page A 点击广告进入 Page B,需要把被点击的广告ID(icid) 一并传递到 Page B。
- 数据准备完成后触发自定义 pageload 事件。
- Adobe Launch读取展示和点击数组。
- Rule 将广告数据转换为 s.products 和 s.events。
- 页面浏览请求统一发送这些数据,不再为每个广告位单独发送请求。
- Adobe Analytics 使用展示数和点击数计算 Banner CTR。
第一步:发送DigitalData
假设 Page B 展示了 Banner-A 和 Banner-B,同时用户是通过点击 Banner-C 进入该页面,可以组装以下数据:
window.digitalData = {
page: {
impression: [{"icid":"Banner-A"}, { "icid":"Banner-B"}], // Array[String] internal campaign ids
click: [{"icid":"Banner-C"}], // Array[String]
},
}
这里使用的是“对象数组”,不是 Array[String]。使用对象可以为后续扩展保留空间,例如:
{
id: "Banner-A",
position: "Homepage-Hero",
creative: "Summer-Sale"
}
document.dispatchEvent(new CustomEvent("pageload"))
你也可以通过DCR、ACDL、EDDL等方式去发送数据。
Page B如何知道用户点击了Banner-C
如果点击发生在 Page A,但 Adobe Analytics 请求在 Page B 才发送,Page B 必须能够取得被点击的广告 ID。
常用的方式是在落地链接中加入 icid 参数,例如:
https://www.example.com/page-b?icid=Banner-C
Page B 读取 icid 后,将其写入 internalCampaign.clicks。
如果没有这一步,Page B 无法可靠判断用户点击了哪个广告位。
第二步:Adobe Analytics报表包设置
接下来,在Adobe Analytics的报表包里创建Event和eVar。
创建广告展示事件
将Event 15设置为广告展示Internal Campaign Impressions [e15],将Event 16设置为广告点击Internal Campaign Clicks [e16]:
注意:事件类型是Numeric,当触发一个广告位的时候,它自动会加1。
创建站内广告Merchandising eVar
将广告位置设置为Internal Campaign ID (CTR) [v23]
需要注意:Expire After要选择Hit,因为在这个Server Call里有Impression和Click,其他过期时间会导致eVar被覆盖,导致不准确。要开启Merchandising,需要Product Syntax,因为我们这里是使用s.product的方式,广告位置是通过product里的eVar去传递。
第三步:Adobe Launch设置
接下来介绍Adobe Launch的设置:
展示广告的Rule的设置
需要注意,这里EVENTS的Order是设置30,更快的执行这个Rule。
Core – Custom Code – impression: 表示digitalData包含有Impression才触发
if(digitalData.page.impression){
return true;
}
AA Product String Builder – Set Variables:
ACTION里就是有这个设置,没其他的Send Beacon,因为这个数据是和PV合并到同一个Server Call发送。
点击广告的Rule的设置
Core – Custom Code – click: 表示digitalData包含有Click才触发
if(digitalData.page.click){
return true;
}
AA Product String Builder – Set Variables:
第四步:如何调试
在浏览器的控制台里执行:
_satellite.setDebug(true)
进入调试状态,然后刷新页面并触发测试数据,可以看到如下数据结构:
Banner-A和Banner-B对应的Event 15是1,表示展示被记录1;Banner-C对应的Event 16是1,这便是点击被记录1,这就表示资料正常如预期追踪到。
第五步:Adobe Analytics中的数据验证
你还可以创建一个自定义指标Banner CTR去计算广告位的点击率。
如果你要看不同广告位置带来的订单转化,那么就需要用到站内归因的,通过设置可以实现:某个展示广告带来了多少订单,打开某个广告后带来多少订单,延伸阅读:站内归因
总结
当页面只有一个站内广告位时,Event加普通eVar已经足够。
当同一页面存在多个广告位,并且需要在一个 Server Call 中分别记录展示和点击时,更适合使用:s.products+ Numeric Event+ Product Syntax Merchandising eVar
实施时最容易被忽略的三个问题是:
- Numeric Event 必须明确发送 =1;
- 产品级事件必须同时加入 s.events;
- CTR 与订单归因应使用不同的 eVar 设计。
只要数据层、产品字符串和请求发送顺序配置正确,就可以在不增加大量 Server Call 的情况下,准确分析每个站内广告位的展示、点击和 CTR。







