438 字
2 分钟
修复 Fuwari 中 Umami 多次统计

最近给 Fuwari 博客接入 Umami 后,发现通过站内链接切换页面时,同一次访问会产生多条统计信息。完整刷新页面时数据正常,问题只出现在 Swup 的无刷新跳转中。

问题定位#

Umami 脚本原本直接放在 Layout.astro<head> 中:

<script
defer
src="https://a.zyfang.top/script.js"
data-website-id="7190f9ed-5de3-49ad-b9ad-05e9b74dc368"
></script>

Fuwari 使用 Swup 实现页面切换,配置中的 reloadScripts 默认开启。每次页面内容替换时,Swup 都会重新执行页面中的脚本。Umami 被重复执行后,会重复注册路由监听器;页面切换次数越多,后续一次跳转产生的统计请求也越多。

修复方法#

Swup 的脚本插件支持通过 data-swup-ignore-script 跳过指定脚本。给 Umami 标签加上这个属性:

<!-- Umami 只在首次加载时初始化 -->
<script
defer
data-swup-ignore-script
src="https://a.zyfang.top/script.js"
data-website-id="7190f9ed-5de3-49ad-b9ad-05e9b74dc368"
></script>

这样 Umami 会在首次打开网站时加载一次,后续 Swup 切换页面不会再次执行脚本。Umami 自身仍然可以监听地址变化并记录新的页面访问,不需要额外手动调用 track

验证#

打开浏览器开发者工具的 Network 面板,筛选 Umami 的统计接口:

  • 首次进入页面时发送一次初始页面访问;
  • 通过站内链接切换页面时,每次只发送一条对应页面的统计;
  • 连续切换多个页面后,请求数量不会随着切换次数累积增长。

这个问题的关键不在于 Umami 本身重复发送,而是第三方统计脚本被页面过渡插件重复初始化。遇到类似问题时,可以优先检查 Swup、PJAX 或其他 SPA 导航工具是否会重新执行全局脚本。

修复 Fuwari 中 Umami 多次统计
https://blog.zyfang.top/posts/myblog/修复fuwari中umami多次统计/
作者
Fang
发布于
2026-08-01
许可协议
CC BY-NC-SA 4.0