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多次统计/