chrome 115+中attribution reporting需html属性(如attributionsrc)、javascript api(如registersource/registertrigger)与服务端204响应+正确标头协同工作,任一环节缺失或版本不匹配均导致静默失效。

HTML 本身不直接“做” Attribution Reporting,它只是触发归因注册的载体;真正起作用的是 JavaScript 调用 document.createElement('a') 或 XMLHttpRequest.prototype.setAttributionReporting() 等 API,并配合服务端报告接收端点。浏览器只在满足隐私沙盒前提(如 Chrome ≥115、启用相关实验标志或正式支持)下才处理这些声明。
怎么用 <a></a> 标签注册归因来源(点击)
这是最轻量、无需 JS 的方式,适用于外链跳转场景。核心是给 <a></a> 加 attributionSrc 属性,指向一个合法的归因来源注册端点 URL:
常见错误现象:attributionSrc 值不是 HTTPS、响应状态不是 204、响应头缺失 Attribution-Reporting-Register-Source,会导致静默失败,控制台无报错但归因不生效。
使用场景:广告主落地页跳转到广告平台页面,或媒体站跳转到广告主官网。
实操建议:
-
attributionSrc必须是同源或已通过Permissions-Policy: attribution-reporting=(self)显式授权的跨源地址 - URL 中可带参数,如
https://report.example/register?source_event=click&campaign_id=123,但服务端必须返回 204 + 正确标头 - 不要和
rel="noreferrer"同时用——后者会剥离所有归因上下文 - Chrome DevTools 的 Application → Attribution Reporting 面板可查看已注册的来源,但仅限当前页面生命周期
怎么用 XMLHttpRequest 注册观看类归因来源
观看(view-through)无法靠链接跳转触发,必须用 JS 主动注册。关键方法是 XMLHttpRequest.prototype.setAttributionReporting(),它把请求标记为“归因来源注册请求”。
使用场景:用户在当前页看到横幅广告、视频广告后未点击,但后续发生转化(如 24 小时内下单),需将该曝光记为归因来源。
实操建议:
- 必须在发起请求前调用
xhr.setAttributionReporting({ sourceEventId: '...' }),且sourceEventId需全局唯一(推荐用crypto.randomUUID()) - 请求 URL 必须和服务端归因来源注册端点一致,响应同样要求 204 +
Attribution-Reporting-Register-Source标头 - 不能在 fetch() 上直接使用;若用 fetch,得先用
navigator.attributionReporting?.registerSource()(Chrome 123+)替代 - 注意 timing:注册需在用户可见广告后立即执行,延迟超过 30 秒可能被浏览器丢弃
怎么验证触发器(转化)是否成功上报
触发器不是 HTML 写出来的,而是用户行为(如点击“购买”按钮)触发 JS 调用 navigator.attributionReporting?.registerTrigger() 或服务端通过 report-event 端点接收事件后主动发送。
常见错误现象:转化页没加载 Attribution Reporting SDK、registerTrigger() 调用时传了非法 destination(非同源且未声明 Permissions-Policy)、触发器 ID 和之前注册的来源 ID 不匹配。
实操建议:
- 检查转化页 HTML 的
是否注入了最小化初始化脚本,哪怕只是if ('attributionReporting' in navigator) { ... } - 触发器注册必须提供
destination(即广告主域名),且该域名必须出现在当初注册来源时的destination列表中 - 用 Chrome 地址栏输入
chrome://attribution-internals查看实时触发器队列和报告发送日志,比 Network 面板更直接 - 事件级报告默认延迟 2 分钟发送,可汇总报告则需聚合服务端参与,别在页面刷新后立刻查收
最容易被忽略的一点:Attribution Reporting 不是“开了就自动工作”的功能。每个环节——HTML 属性、JS 调用、服务端响应头、Permissions-Policy 声明、Chrome 实验标志(如 #privacy-sandbox-ads-apis)——缺一不可,且任意一环版本不匹配(比如用 Chrome 112 调 registerTrigger())就会彻底静默失效。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











