Skip to content

解决 Vercel Analytics 被 AdBlock 屏蔽问题

Published: at 11:46

DNS.Surf 由于 100% 运行在 Vercel 上,所以访问统计使用了 Vercel Analytics,但是好多用户装了 AdBlock 会导致访问统计失效的问题。今天就来解决一下 AdBlock 导致访问统计失效的问题,依然是 100% 基于 Vercel。

AdBlock 的核心原理是通过规则屏蔽一些网络请求和页面元素。Vercel Analytics 就是被 /_vercel/insights/script.js 这个规则屏蔽的,同时还可能会屏蔽 /_vercel/insights/event。要解决这个问题,只需要让这两个地址没有明显特征就行。

/_vercel/insights/script.js

方案

Vercel 自带了 Rewrite 功能,所以只需要将伪装路径 /mt-demo 重写到 /_vercel/insights 下即可。伪装路径可以随别写,不与已有路径重复就行,如果被屏蔽,再换一个。vercel.json 配置如下:

{
  "rewrites": [
    {
      "source": "/mt-demo/:match*",
      "destination": "https://dns.surf/_vercel/insights/:match*"
    }
  ]
}

注意 destination 写完整地址,否则会无效。

官方教程里边,各框架使用的是 @vercel/analytics 来注入统计脚本到页面的,但是不支持自定义脚本和数据上报地址。所以我们需要 HTML 方式来注入脚本。

<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>

src 是脚本地址,data-endpoint 是数据上报地址,虽然官方文档没有写,但是脚本是支持的。记得将 mt-demo 替换为你的伪装路径。

如果使用了其他框架,可以查看不同框架注入 script 的方法,来适配自己使用的框架。

验证效果可以使用 DNS.Surf