内容提要
DNS.Surf使用Vercel Analytics进行访问统计,AdBlock导致统计失效。解决方法是使用Vercel的Rewrite功能将伪装路径/mt-demo重写到/_vercel/insights下,并使用HTML方式注入脚本。验证效果可使用https://dns.surf/。
延伸解读
伪装路径的关键细节
文章指出,伪装路径可以随意命名,只要不与现有路径重复即可。但需注意,vercel.json 中的 destination 必须写完整地址(如 https://dns.surf/_vercel/insights/:match*),否则重写规则会失效。此外,若伪装路径仍被 AdBlock 屏蔽,可以更换另一个路径重新尝试。
脚本注入的变通方法
由于官方 @vercel/analytics 不支持自定义脚本地址和数据上报地址,作者采用 HTML 方式手动注入脚本。通过设置 script 标签的 src 为伪装路径下的 script.js,并用 data-endpoint 属性指定上报地址,从而绕过 AdBlock 对原始路径的拦截。
适用性与验证方式
该方案完全基于 Vercel 的 Rewrite 功能,适用于运行在 Vercel 上的站点。若使用其他框架,需参考对应框架的脚本注入方法进行适配。文章建议通过访问 https://dns.surf/ 来验证效果,确认统计是否恢复正常。
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 要写完整地址,否则无效。
伪装路径可以自定义吗?有什么注意事项?
可以自定义,只需确保不与已有路径重复。如果该路径也被屏蔽,可以更换另一个。
为什么不能直接用 @vercel/analytics 注入脚本?
因为 @vercel/analytics 不支持自定义脚本地址和数据上报地址,所以需要改用 HTML 方式手动注入脚本,并指定 src 和 data-endpoint 为伪装路径。
如何手动注入 Vercel Analytics 脚本?
在 HTML 中添加两段 script:第一段定义 window.va 函数,第二段异步加载脚本,src 设为伪装路径下的 script.js,data-endpoint 设为伪装路径。记得替换 mt-demo 为你的伪装路径。
怎么验证 Vercel Analytics 是否恢复正常?
可以访问 https://dns.surf/ 来验证效果,确认统计是否正常工作。