- 阿里日志的一个页面定位模型,来记录和描述用户的具体点击位置信息
- SPM是Web端Aplus日志体系和APP端Usertrack日志体系下,共同使用的的重要规范。
- 阿里的SPM位置编码由A.B.C.D四段构成, 各分段分别代表 A:站点/业务, B:页面, C:页面区块, D:区块内点。其中a, b位是必须具备的, 且均需在 SPM申请中心
- 在Web场景下, SPM信息的传递依赖URL内的SPM参数。日志脚本将在用户点击链接后自动在href属性内给出的URL内追加spm参数 . 如此一来, 通过观察目标页面PV日志中的url, 即可推算出本次PV到底来自哪个前续页面的哪个位置。
- 在某些场景下, 目标页面URL内可能不支持spm参数,导致spm无法在下游URL内被注入, 但业务本身又依赖spm追踪的数据,
- 首先禁用对该a标签的目标URL注入spm参数, 方法为在该a标签内注入如下属性:data-spm-protocol=“i”
- 对该标签使用如下可视化令箭埋点 实现对标签点击的追踪
a 标识站点ID,SPM-a的声明必须放在闭合标签内, 通过一个独立的标签声明
... ...
b 标识页面ID,SPM-b需要以标签的一个扩展属性(data-spm)的方式声明
SPM-c一般以对应的div容器的扩展属性(data-spm)来声明
SPM-d一般不需要注册或申请,一个对应的链接或者图片
SCM:Aplus:集团内对Web页面的采集方案
- 用来跟踪内容的编码,能够唯一的记录这条内容产生的具体投放方和细节
-SCM编码也采用a.b.c.d的格式
- a标识投放系统ID,用来标识不同的内容投放方,比如商城的阿拉丁系统,对应的投放系统ID为1003。
- b标识投放算法ID,用来标识投放系统产生不同内容的投放算法。
- c标识投放算法版本ID,用来标识投放算法的不同版本。
- d标识投放人群ID,用来标识不同的投放人群,或者对接profile。
- SCM编码由内容产生方负责编码,SPM编码由页面发布方负责编码
- 作用:根据链接中spm和scm的组合,我们就能追踪到这条链接,是由什么内容提供方提供的,并且由用户在哪个指定页面的指定位置点击产生的。通过spm和scm的组合效果评估,我们就能知道什么位置投放什么内容效果最好,什么样的内容投放在什么位置效果最佳,从而达到将合适的内容推送到合适的位置的效果。
- SCM的投放系统ID(a位)必须经由管理员统一申请和操作。之后bcd位自己填写
黄金令箭
- 包括了:普通PV采集、黄金令箭采集、可视化黄金令箭采集 、ABTest、单页应用、可视化埋点、自动曝光等等类型的采集
- 同时涵盖了PC端和移动端,根据不同应用场景,Beacon模块会加载不同版本的aplusjs。
- Web页面:包括PC端, 移动浏览器, 以及App内嵌的H5页面, 以及小程序
- 集团内的通用日志采集服务就两个, 一个是针对Web的Aplus, 另一个是针对Native App的 UserTrack(UT)
- A+: 就是指这个链接所对应的日志数据产品, 日志系统(Aplus和UT)采集到的数据, 经过汇总, 放在A+内展示。按SPM作为汇总的主体。
阿里的web日志分为:
- 系统自动采集的页面浏览(PV, Page View)日志
- 自定义日志(时间内容自定义):通过调用黄金令箭日志接口主动上报日志
采集原理:
黄金令箭是页面发往一个http请求到日志服务器。核心原理即为规范化地构造一个请求URL. 标准的URL由http协议+域名+路径+可选参数串构成. 其中, 协议一般由页面的业务协议所限制, 域名必须是日志服务器的域名, 因而, 用户可定义的部分, 只有路径和参数串.步骤
- 在埋点前,需要加载aplusjs文件,有两种方式可供选择
1) 通过Beacon集成Aplus
2)前端手动引入Aplus
3)通过第三方系统引入Aplus- 如果页面上已经加载了来自alicdn的aplusJS脚本, 则可直接通过调用goldlog.record()方法发送日志请求;为了避免aplus中的goldlog未完成初始化,建议通过window.goldlog_queue的push方法来间接调用goldlog.record接口。
goldlog.record(logkey, gmkey, gokey, req_method)接口定义如下:
- logkey {String} : 即完整的令箭编码,如上例中的 “/a1.jingyao.clicktest”
- gmkey {String} : 关键业务类型. 目前的约定的元值有五个,点击类操作"CLK"、曝光类事件"EXP"、滑屏类事件"SLD"、其它事件"OTHER"、也可以为空值,但不建议留空.
- gokey {String} : 附加的自定义kv对,如本例中clicktype=one
- req_method {String} : 可选值有’GET’(默认)、‘POST’。如果入参为POST,则令箭请求会优先navigator.sendBeacon post的形式发出,如果当前浏览器不支持sendBeacon则降级为get img的形式发出。
如;
handleClick(clkType) { var q = (window.goldlog_queue || (window.goldlog_queue = [])); q.push({ action: 'goldlog.record', arguments: ['/aplus.99.3','CLK', 'clickType='+clkType, 'POST'] }); } ...solution
aplus.js会做什么事:会轮询监听 goldlog_queue 黄金令箭请求队列
beacon 是 Tengine (Ali Nginx) 上的一个模块,提供的功能即是在页面上输出一段引入打点脚本的代码,根据场景的不同输出不同的 aplus
对于单页面应用,当切换不同路由时,浏览器并不会向服务端发送一条页面请求,这时,就需要手动改变当前页面的SPM和发送SPM(aplus已经封装好了相应的方法,只需分别调用goldlog.setPageSPM和goldlog.record方法)
同时对于一些网络状况较差的站点,希望在页面load完成之前不去发送打点请求,这时只需配置一条,即可变为手动发送PV。
aplus会根据当前域名来确认要发到哪个日志表,如PC端会发送到v.gif,移动端会通过jsBridge转无线UT日志
- 页面除了模块以外,其他的部分是Solution负责的
- Solution 的基本形态就是一个页面的骨架
它可以改变模块的渲染方式,控制页面的展示行为(如页面下线,页面跳转等等),也可以给页面上添加运营搭建时没有拖入的模块
可视化黄金令箭(无痕埋点)
- 即页面中可以看到的具有"data-spm-click"属性的标签,不需开发人员编写监听点击事件的代码,自动发送日志请求
- 是对黄金令箭的封装,使得用户在点击某一个元素的时候,可以直接发送一个黄金令箭请求
SPM埋点与Aplus日志之间的关系
SPM模型实际上是一个元素的定位和编码模型, 本身与日志不强相关, 即, 即便一个页面不做SPM埋点,也可以通过Aplus采集PV和自定义事件日志. 与此同时, Aplus内置了对SPM模型的支持, 如果页面上做了SPM埋点, 那么Aplus在上报日志时, 会额外采集相应的SPM信息.
A+, Aplus, SPM, 黄金令箭是什么关系?
- 运行在客户端上的Aplus日志采集代码, 如果发现页面上做了SPM相关埋点, 除了会采集当前页面的SPM编码, 还会监测页面上的点击. 如果用户点击触发一次跳转, 则会在跳转前修改目标页面地址的URL, 向其中追加上一个名为spm的跟踪参数, 来标识被点击的位置. 如此以来, 打开一个页面时, 只需要看到URL内的spm参数, 就能倒查出这次页面浏览的来源是哪里. 这个参数的传递和解析机制, 就是整个SPM模型和A+产品的核心逻辑.
- 在一条Aplus的PV日志中, 理想情况下, 我们可以找到3个与SPM有关的事件属性, 分别是:
- spm-cnt:当前页面的SPM编码(spm_id)
- spm-url:当前页面的来源位置SPM编码(url_spm_id)
- spm-pre:来源页面的来源位置的SPM编码(pre_spm_id)
这里为什么是等同的关系
cna为集团Aplus在浏览器里种的一个cookie(该cookie为A+用于计算设备UV)
令箭UV和页面UV不一样
尽量使用goldlog的队列(queue)机制, 以GET方法来发送令箭日志, 实现方法参考本文档. Aplus的队列机制, 可以基本保证令箭和PV日志的cookie一致(在queue中的日志请求, 会有限等待cookie同步请求完成后再发送). 但需注意的是 使用goldlog queue可能会延迟令箭的发送. 如果用户在页面上的停留时间过短, 很快关闭浏览器, 则可能导致日志丢失.
参考链接:
五分钟学会埋点–aplus埋点最佳实践
aplusJS使用手册
A+ 分析帮助文档



