How to

绕过广告拦截器

尽管 Umami 是一款注重隐私的产品,但它仍可能被某些广告拦截器阻止。广告拦截器使用由许多不同人员维护的阻止列表。 有些列表可能过于激进,比如会阻止包含 analytics 这个词的任何内容,或者不论产品如何运行,一律阻止所有跟踪产品。

以下是几种避免广告拦截器的方法。

代理(Proxying)

代理是在服务器级别进行的,因此你需要访问你的网络服务器以进行更改。 通过这种方法,你可以代理追踪脚本本身,隐藏原始脚本的实际名称和位置。

例如,你可以在你的网站上拥有这样一个脚本:

https://your-website.com/script.js

它代理的实际文件是:

https://cloud.umami.is/script.js

因此,即使广告拦截器阻止了 cloud.umami.is 这个域名,你自己的域名仍然安全。

这里有一些教程可以参考:

要使用服务器端实现此功能,你可以创建一个单独的端点。 例如,在 Express.js 中:

app.get("/stats.js", async (req, res) => {
    const scriptText = await fetch("https://cloud.umami.is/script.js");
    res.send(await scriptText.text())
});

然后在你的 html 的 head 标签中:

<script defer src="/stats.js" data-website-id="..."></script>

如果你使用的是像 Next.js 这样的框架,可以使用它们的 rewrites 功能。

自己托管追踪脚本

如果你无法访问网络服务器,无法代理脚本,也可以直接将整个追踪脚本托管在你自己的域名下。

  1. 在浏览器中打开脚本 URL:https://cloud.umami.is/script.js
  2. 保存该文件。
  3. 将文件上传至你的域名。
  4. 设置 data-host-url 属性,以便数据发送到正确的位置。详情见 追踪器配置

请注意,这种方法的可靠性不及代理,如果追踪脚本发生变化,你需要重新下载并更新脚本。

使用环境变量(自托管)

如果你是自托管的 Umami,可以使用环境变量来配置你的实例。

有两个可能被阻止的来源:

  1. 追踪脚本,位于 https://your-umami.com/script.js
  2. 统计数据收集端点,位于 https://your-umami.com/api/send

可以通过 TRACKER_SCRIPT_NAME 变量重命名你的追踪脚本,比如改成 x.js。然后你脚本的 src 改成 https://your-umami.com/x.js

可以通过 COLLECT_API_ENDPOINT 变量重命名你的端点,比如改成 /api/x。追踪脚本会自动调用你自定义的端点名称,而不是 /api/send