网站统计方案横向对比
GA4、Umami、Plausible、Cloudflare Web Analytics、GoAccess、Counterscale、GoatCounter、Clarity、PostHog 九个方案逐个拆开比,外加决定它们成败的 uBlock Origin。附脚本体积、大陆可达性、拦截规则三组实测数据
本站到今天为止一个统计脚本都没装,实在是难以抉择使用哪个,需要权衡内存占用,网络可达性,还需要精细化统计。趁这次把候选名单里的方案全部分析一下。
这些工具的差别不在功能列表,而在「数据采集位置」。采集位置一旦定了,可达性、拦截、加载开销、颗粒度四个维度就基本被决定了,剩下的都是包装。
采集位置分类
四个采集位置,几乎解释了后面所有差异。
| 采集位置 | 谁在用 | 用户拦得住吗 | 能拿到什么 |
|---|---|---|---|
| 浏览器 JS | GA4、Umami、Plausible、CF WA、GoatCounter、Clarity、PostHog、Counterscale | 拦得住,且默认就拦 | 屏幕、性能、滚动、点击、会话行为 |
| 服务端中间件 / SDK | GoatCounter API、Counterscale server 模块、PostHog 后端 SDK、Plausible Events API | 拦不住 | 请求级信息,拿不到前端行为 |
| Web 服务器日志 | GoAccess、GoatCounter 的日志导入 | 拦不住 | 全部请求,含爬虫与静态资源 |
| 边缘 / CDN | Counterscale(跑在 Workers)、CF WA(边缘自动注入 beacon) | 注入端拦不住,beacon 本身照拦 | 取决于最终是谁在上报 |
九个方案简介
GA4(Google Analytics 4)
行业默认值,功能上限最高:事件模型可以把任何动作建模成 event,配合自定义维度、受众、归因、跨端(Web + App)打通。免费版的硬限制查得到:每事件 25 个参数、30 个关键事件、每媒体资源 50 个事件级自定义维度、数据最长保留 14 个月、探索报告每次查询 1000 万事件的抽样上限。
三个代价很实在:
1、最大的脚本。实测 gtag.js 压缩后 145 KB、解压 409 KB,是本文所有方案里最重的,比第二名还大 80%
2、最招拦截。EasyPrivacy 里 ||googletagmanager.com^ 是无条件整域拦截,不带任何例外条件
3、大陆能采集到吗。能采到,但不完整、也不稳定,不能当成国内流量的准确口径
Umami(自托管)
MIT,TypeScript,3.8 万 star,现在是自托管统计里最主流的一个。官方要求:Node.js 18.18+ 与 PostgreSQL 12.14+,Docker Compose 一条命令能起
颗粒度覆盖页面、来源、设备、浏览器、系统、国家、UTM,加上自定义事件与事件属性;文档里还列了目标、漏斗、用户路径(Journey)、留存、收入归因,以及会话回放与热图。脚本实测压缩后 2.3 KB,非常轻。
代价是它是这批里常驻服务最重的之一:一个 Next.js/Node 进程加一个 PostgreSQL,一台 1 GB 内存的小机器跑起来会紧张。
Umami Cloud(托管版)
官方托管,省掉数据库和升级。截至 2026-08-19 的档位:
| 档位 | 价格 | 事件额度 | 站点数 | 数据保留 |
|---|---|---|---|---|
| Hobby | $0 / 月 | 10 万 / 月 | 1 个 | 6 个月 |
| Pro | $20 / 月 | 100 万 / 月 | 20 个 | 2 年 |
| Business | $200 / 月 | 1000 万 / 月 | 不限 | 5 年 |
会话回放与热图在 Business 档才有;官方 FAQ 明说云版比自托管多出来的是邮件报表与 streaming API。
免费档 1 个站点、6 个月保留,对个人博客刚好够,但要留意超额是继续采集然后按量计费,不是停掉。
Plausible(自托管 CE)
Elixir 写的,2.9 万 star,主程序 AGPL-3.0,部署仓库 community-edition 是 MIT。脚本实测压缩后 1.3 KB,全场最小。
指标设计是这批里最考究的:独立访客、会话、跳出率、访问时长、单页停留时长、滚动深度、退出率、来源与 Channel 分组、UTM 全套、国家/地区/城市、目标与转化率、漏斗、用户路径、自定义属性。
自托管的门槛在依赖:PostgreSQL 加 ClickHouse,官方要求 CPU 支持 SSE 4.2 或 NEON 指令集(ClickHouse 的硬要求),推荐至少 2 GB 内存。这已经不是「顺手在博客服务器上多起一个服务」的量级了。
Cloudflare Web Analytics
免费,所有套餐可用。原理是一段 RUM beacon,用 Performance API 采数据;站点如果已经过 Cloudflare 代理,可以在边缘自动注入,连改模板都省了。
它的独门优势是性能维度:LCP、CLS、INP、TTFB、FCP 全套 Core Web Vitals,外加导航计时、资源计时、Server-Timing。可筛选的维度是国家、Host、路径、来源、设备类型、浏览器、操作系统、站点、导航类型(能区分「走没走缓存」这种别处没有的信息),并且带一个 Exclude Bots 开关。
不足是没有自定义事件、没有会话概念——它是「网页表现监测」而不是「用户行为分析」。脚本 11 KB,比同类重,因为里面塞了 Google 的 web-vitals 库。
GoAccess
彻底的另一条路:它不在页面上放任何东西,直接读 nginx / Apache / Caddy / CloudFront 的访问日志。C 写的老牌工具,MIT,唯一依赖是 ncurses,可以在终端里实时刷,也能生成一个自包含的 HTML 面板。
它的三条优势别的方案给不了:
1、零加载开销、零拦截——访客那边一个字节都没多下。装 uBO 也好、关 JS 也好、curl 也好,全都统计得到。
2、能看到别人看不到的东西:状态码分布、慢请求、带宽消耗、爬虫、虚拟主机、ASN 归属。查故障和查恶意流量时,这些比 PV 有用得多。
3、历史数据是现成的——日志一直在,装上当天就能回看过去几个月。
代价同样明确:拿不到任何前端信息(屏幕、停留、滚动、点击一概没有),而且默认统计到的是「请求」不是「人」——爬虫、预取、CDN 回源全在里面,需要自己过滤。同一出口 IP 后面几个人也分不开。
Counterscale
MIT,跑在 Cloudflare Workers + Workers Analytics Engine 上的自部署统计,npx @counterscale/cli install 一条命令装完。作者的说法是 Cloudflare 免费额度大约能撑到每天 10 万次命中。
它是「自托管」里唯一不需要服务器的:没有数据库、没有常驻进程、没有升级维护,成本趋近于零。脚本实测压缩后 1.9 KB,另外提供服务端模块(@counterscale/tracker/server),可以完全绕开浏览器上报。
它的代价:
只有 90 天。这是 Analytics Engine 的硬保留期,README 写得很直白:面板「只能显示最近 90 天」。R2 里那份 Apache Arrow 归档是冷存,面板查不到,要看得自己把文件拉下来分析。
维度比想象中窄。读 schema.ts 的列映射:host、userAgent、path、country、referrer、browserName、browserVersion、deviceModel、deviceType、UTM 五件套。没有操作系统、没有屏幕尺寸、没有语言,地理只到国家。也没有自定义事件——数据点结构是写死的,只有 pageview。
GoatCounter(自托管)
Go 写的单个静态二进制,EUPL-1.2,数据库用 SQLite 就够,goatcounter serve 一条命令起服务,连 TLS 与 ACME 自动签证书都内置了。这是本文里部署最轻的自托管方案,没有之一。
它真正的过人之处是三种采集方式都支持:JS 脚本、无 JS 的图片像素、后端中间件调 API,外加从 nginx/Apache/Caddy/CloudFront 日志导入。也就是说被拦截器挡住的那部分,可以用日志导入补回来——这个组合别家没有。
维度是浏览器、系统、屏幕尺寸、地理位置、来源、campaign,用不可还原的哈希在不写 cookie 的前提下识别独立访问。脚本实测压缩后 3.3 KB
GoatCounter 托管版(goatcounter.com)
同一个程序的官方托管,「对合理的公开用途免费」,靠 GitHub Sponsors 捐助维持,官方原话是跑个人网站或中小企业没问题、每天几百万 PV 就别来了。对个人博客这是全场性价比最高的选项之一。
但对大陆站点它基本不可用。实测:主站 www.goatcounter.com 通(1–3 秒),脚本 CDN gc.zgo.at 五次全部超时。查 DNS 就明白了:
$ nslookup gc.zgo.at # 用 8.8.8.8
Addresses: 2a03:2880:f10a:83:face:b00c:0:25de ← Facebook 的地址段
104.244.46.52 ← Twitter 的地址段解析结果被投毒到了社交平台的 IP 上,TCP 必然握不上手。后台能看,脚本加载不了,大陆访客一个都统计不到。 自托管版不受影响,这是托管版独有的问题。
Microsoft Clarity
它和上面所有工具不是一个品类:不是流量统计,是行为分析。官方支持的功能是会话录制、热图、事件与漏斗、Copilot 摘要。官方文档写得很直白:「Clarity is a free service forever」,没有付费档要升。
想知道「读者读到第几屏关掉的」「哪个按钮被反复点却没反应」,只有这类工具能回答,前面九个都不行。
代价是它是隐私尺度最大的一个——录制的是访客的真实操作。脚本压缩后 25 KB,且录制期间持续上传。EasyPrivacy 里 ||clarity.ms^ 是整域拦截。另外官方明确要求:不得用于面向 18 岁以下用户的网站与应用。
好消息是它的可达性最好:大陆实测脚本 0.6–0.8 秒、后台 3 秒左右,全部通过,是所有需要登录后台的方案里表现最好的。
PostHog
产品分析全家桶:事件、漏斗、留存、路径、群组、特性开关、A/B 测试、会话回放、错误跟踪。对 SaaS 产品是好东西,对博客是杀鸡用牛刀。
自托管这条路官方自己在劝退,文档原话是云版「对绝大多数用户体验好得多」,并且列了硬要求:4 vCPU、16 GB 内存、30 GB+ 存储;不提供任何技术支持;所有付费功能仅限云版;超过每月 30 万事件或 1000 条录像就需要专业运维能力。
脚本 array.js 实测压缩后 80 KB,仅次于 GA4,而且开会话回放还要再加载 recorder。大陆实测:脚本域通(3.7–5.9 秒),后台 us.posthog.com 通但慢到接近不可用——单次登录页要下 50 万字节,三次里两次在 20 秒内没下完。
三组实测数据
以下三组是本文唯一的原创数据,测于 2026-08-19。可达性那一栏是在中国大陆家庭宽带上直连、不走任何代理测的,换运营商换时段结果会变,只能当参考不能当结论。
脚本体积
用 curl 带 --compressed 直接拉线上文件测的,「解压后」是原始字节数。
| 方案 | 压缩后 | 解压后 | 备注 |
|---|---|---|---|
GA4 gtag.js | 145 KB | 409 KB | 还要另发 collect 请求 |
PostHog array.js | 80 KB | 250 KB | 开录像还要加载 recorder |
Clarity clarity.js | 25 KB | 72 KB | 录制期间持续上传 |
CF Web Analytics beacon.min.js | 11 KB | 31 KB | 内含 Google 的 web-vitals 库 |
GoatCounter count.js | 3.3 KB | 9.0 KB | 官方自称「约 3.5 KB」,属实 |
Umami script.js | 2.3 KB | 4.6 KB | |
Counterscale tracker.js | 1.9 KB | 4.8 KB | |
Plausible script.js | 1.3 KB | 2.8 KB | 全场最小 |
| GoAccess | 0 | 0 | 页面上什么都没有 |
GA4 一个脚本,等于 111 个 Plausible。 这个差距在手机弱网上是能被感知到的。
大陆可达性
| 方案 | 采集脚本 | 管理后台 |
|---|---|---|
| GA4 | 通,0.7 秒(上报端点也通,返回 204) | 五次全败 |
| Umami Cloud | 通,2.4–7.4 秒 | 通,2.9–8.2 秒(慢) |
| Cloudflare WA | 通,1.0–3.1 秒 | 通 |
| Plausible 云版 | 通,1.2–5.3 秒,偶发失败 | 通,偶发失败 |
| GoatCounter 托管版 | 五次全败(DNS 被投毒) | 通,1.3–2.9 秒 |
| Clarity | 通,0.6–0.8 秒 | 通,2.8–7.8 秒 |
| PostHog 云版 | 通,3.7–5.9 秒 | 通但极慢,三次里两次 20 秒未加载完 |
Counterscale(默认 workers.dev) | 六次全败(DNS 被投毒) | 同左 |
| Counterscale(绑自有域名) | 通,2.9 秒(走 CF 正常 anycast) | 同左 |
| 自托管三件套 | 取决于你自己的服务器 | 同左 |
拦截规则
把三份主流规则文件抓下来直接搜:EasyPrivacy(uBO 默认订阅)、uBO 自家的 privacy 列表、AdGuard 的追踪保护列表。
| 方案 | 规则里的处境 |
|---|---|
| GA4 | googletagmanager.com 整域无条件拦截;google-analytics.com 另有脚本级规则 |
| Clarity | clarity.ms 整域拦截 |
| Cloudflare WA | static.cloudflareinsights.com 与 cloudflareinsights.com 都在列 |
| Umami Cloud | umami.is 第三方拦截 |
| Plausible 云版 | plausible.io 第三方拦截,另有 plausible.io/js/plausible. 等路径规则 |
| GoatCounter 托管版 | goatcounter.com 第三方拦截,规则里还专门写了一行注释点名 |
| PostHog | i.posthog.com、app.posthog.com/static/array.js 等多条 |
| Counterscale | 一条都没有 |
| GoAccess | 不适用(页面上没有东西可拦) |
真正值得警惕的是自托管也跑不掉。 规则里有一批通配写法,专打「按默认方式部署」的自建实例:
||umami.*/script.js|$script ← 任何 umami. 开头的域名下的 script.js
://plausible.*/js/script. ← 自建 Plausible 的默认脚本路径
://plausible.*/api/event| ← 连上报接口一起拦
/plausible/*.js$script ← 反代到 /plausible/ 路径同样命中
/posthog/ingest/* ← PostHog 的常见反代路径通配之外还有逐个点名。把三份列表合起来去重,数了一下被单独写进规则的自建实例域名:
| 品牌 | 被点名的独立域名数 |
|---|---|
| Plausible | 114 个 |
| Matomo | 20 个 |
| GoatCounter | 15 个 |
| Umami | 12 个 |
| PostHog | 5 个 |
| Counterscale | 0 个 |
plausible.safing.io、umami.vidfast.pro、posthog.tarnkappe.info 这类条目一条条躺在文件里。所以「我自建就没人拦得到」是幻觉——只要按默认命名部署、站点又有点流量,被人报上去写进规则只是时间问题。
五、五个维度的总账
| 方案 | 托管 | 采集位置 | 服务端开销 | 被拦 | 脚本 | 颗粒度 |
|---|---|---|---|---|---|---|
| GA4 | 三方 | 浏览器 JS | 无 | 必被拦 | 145 KB | 最高(事件模型 + 归因 + 跨端) |
| Umami 自托管 | 自建 | 浏览器 JS | Node + PostgreSQL | 会 | 2.3 KB | 高(事件 + 漏斗 + 路径 + 留存) |
| Umami Cloud | 三方 | 浏览器 JS | 无 | 会 | 2.3 KB | 同上,回放热图要 $200 档 |
| Plausible CE | 自建 | 浏览器 JS | ClickHouse + PG,≥2 GB | 会(点名最狠) | 1.3 KB | 高(含滚动深度、退出率) |
| Cloudflare WA | 三方 | 浏览器 JS / 边缘注入 | 无 | 会 | 11 KB | 中,性能维度独一份 |
| GoAccess | 自建 | 服务器日志 | 极低(C,只依赖 ncurses) | 拦不到 | 0 | 请求级全景,无前端行为 |
| Counterscale | 自建 | Workers | 零服务器 | 目前无规则 | 1.9 KB | 基础,只留 90 天 |
| GoatCounter 自托管 | 自建 | JS / 像素 / 中间件 / 日志导入 | 极低(单二进制 + SQLite) | JS 那条会 | 3.3 KB | 中 |
| GoatCounter 托管版 | 三方 | 浏览器 JS | 无 | 会 | 3.3 KB | 中,大陆采不到 |
| Clarity | 三方 | 浏览器 JS | 无 | 会 | 25 KB | 行为级(录制 + 热图) |
| PostHog 云版 | 三方 | 浏览器 JS + 后端 SDK | 无 | 会 | 80 KB | 最高(产品分析全家桶) |
| PostHog 自托管 | 自建 | 同上 | 4 vCPU / 16 GB | 会 | 80 KB | 同上 |
六、怎么选
按最在意的那一条走:
1、要一个诚实的访客数,不想被拦,不想加载任何东西 → GoAccess。日志已经在那儿了,装上就能回看历史,代价是拿不到任何前端信息。
2、既要前端维度、又不想被拦漏太多 → GoatCounter 自托管:JS 脚本正常采,再定期把 nginx 日志导进去补上被拦掉的部分。这是唯一能把两条路合并的方案。
3、不想维护服务器,站点已在 Cloudflare 后面 → Cloudflare Web Analytics。免费、边缘注入不用改模板,还白送 Core Web Vitals。
4、想要漂亮面板和事件分析,愿意养一个服务 → Umami 自托管(Node + PostgreSQL),或者懒一点直接上 Umami Cloud 免费档。
5、一台服务器都不想有,也不想付钱 → Counterscale,跑在 Workers 上成本趋近于零,代价是数据只留 90 天、维度基础。
6、想知道读者到底怎么读的 → Clarity,和上面任意一个并存。它回答的是别人回答不了的问题。
7、做的是产品不是博客 → PostHog 云版,自托管那 16 GB 的要求不值得。
8、必须用 GA4(要接广告,或者甲方要求)→ 接受它 145 KB 的体积和必被拦的现实
提示
我也不知道怎么选,网站应该没啥流量,分析那么多也没啥用(暂时)
评论
评论加载中……