内容提要
Vercel Analytics 常被 AdBlock 屏蔽导致统计失效。解决方案:通过 Rewrite 将伪装路径重写到 /_vercel/insights,并在 vercel.json 中配置完整目标地址;再注入统计脚本,自定义 src 和 data-endpoint 以避开屏蔽规则。
延伸解读
AdBlock 屏蔽机制与伪装思路
AdBlock 通过规则匹配网络请求和页面元素来屏蔽内容。Vercel Analytics 的脚本地址 /_vercel/insights/script.js 和数据上报地址 /_vercel/insights/event 因包含明显特征而被屏蔽。解决方案是使用 Vercel 的 Rewrite 功能,将自定义的伪装路径(如 /mt-demo)重写到 /_vercel/insights 下,使请求地址不再具有可识别的特征,从而绕过屏蔽规则。
配置 Rewrite 的关键细节
在 vercel.json 中配置 rewrites 时,source 使用伪装路径加通配符(如 /mt-demo/:match*),destination 必须填写完整的目标地址(如 https://dns.surf/_vercel/insights/:match*),否则重写不会生效。伪装路径可以随意命名,只要不与现有路径冲突即可;如果该路径也被屏蔽,更换一个即可。
手动注入统计脚本的方法
由于 @vercel/analytics 不支持自定义脚本地址和数据上报地址,需要改用 HTML 方式手动注入。在页面中添加初始化代码 window.va = window.va || function () { ... },然后通过 script 标签引入脚本,并设置 src 为伪装路径下的 script.js,同时用 data-endpoint 属性指定数据上报地址为伪装路径。注意将示例中的 mt-demo 替换为自己的伪装路径。
适配其他框架与验证效果
如果项目使用了其他框架,可以查阅对应框架的脚本注入方法,将上述手动注入方式适配到自己的框架中。验证效果时,可以使用 DNS.Surf 进行测试,确认统计请求是否成功绕过 AdBlock 并正常上报数据。
Q&A
为什么 Vercel Analytics 会被 AdBlock 屏蔽?
AdBlock 通过规则屏蔽网络请求和页面元素,Vercel Analytics 的脚本地址 /_vercel/insights/script.js 和数据上报地址 /_vercel/insights/event 被 AdBlock 的规则识别并屏蔽,导致统计失效。
如何通过 Vercel 的 Rewrite 功能解决 Analytics 被屏蔽?
在 vercel.json 中配置 rewrites,将伪装路径(如 /mt-demo)重写到 /_vercel/insights 下,destination 必须写完整地址,例如:{"rewrites":[{"source":"/mt-demo/:match*","destination":"https://dns.surf/_vercel/insights/:match*"}]}。
如何自定义 Vercel Analytics 的脚本注入以避开 AdBlock?
使用 HTML 方式注入脚本,自定义 src 和 data-endpoint 指向伪装路径。示例:<script>window.va = window.va || function () { ;(window.vaq = window.vaq || []).push(arguments) }</script><script async src="/mt-demo/script.js" data-endpoint="/mt-demo"></script>,将 mt-demo 替换为你的伪装路径。
伪装路径可以随意设置吗?有什么注意事项?
伪装路径可以随意写,只要不与已有路径重复即可。如果被屏蔽,可以再换一个。
官方 @vercel/analytics 注入方式有什么不足?
官方教程中各框架使用 @vercel/analytics 注入统计脚本,但不支持自定义脚本地址和数据上报地址,因此无法通过伪装路径避开 AdBlock。
如何验证 Vercel Analytics 防屏蔽方案是否生效?
可以使用 DNS.Surf 来验证效果。