站点统计方案:自建统计还是用现成的
想看看有多少人来访问、看哪几篇,是人之常情。但每加一个统计脚本,就多一份外部依赖和隐私成本。
一、四类方案
| 类型 | 代表 | 特点 |
|---|---|---|
| 全能分析 | Google Analytics 4 | 功能最强,最重 |
| 免 Cookie 统计 | Cloudflare Web Analytics | 零配置,免费,隐私友好 |
| 自建轻量 | Plausible / Umami | 数据自控,需服务器 |
| 日志分析 | goaccess / awk | 零前端脚本,最原始 |
二、Google Analytics
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag("js", new Date());
gtag("config", "G-XXXX");
</script>| 优点 | 缺点 |
|---|---|
| 功能全面(漏斗、事件、转化) | 脚本体积大(~50KB+) |
| 免费 | 拖慢 LCP |
| 生态和文档丰富 | 隐私合规麻烦(需 Cookie 同意横幅) |
| 数据被广告拦截器屏蔽(比例很高) |
对个人技术站来说,GA 的功能 90% 用不上,代价却是实实在在的性能和隐私负担。
三、Cloudflare Web Analytics(推荐入门)
如果站点已经在 Cloudflare 后面,这是最省事的:
1. CF 控制台 → Web Analytics → 添加站点
2. 复制一段 JS(约 3KB,或直接用 DNS 方式零 JS)
3. 等待数据特点:
- 不使用 Cookie,不需要同意横幅;
- 脚本很小,对性能影响可忽略;
- 免费;
- 提供 PV、UV、来源、Top 页面、国家分布;
- 甚至有 Core Web Vitals 数据。
缺点:功能简单(没有事件追踪、没有漏斗);依赖 Cloudflare。
还有 零 JS 模式:只在 DNS 里加一条 CNAME,CF 通过代理请求统计,页面完全不加脚本。这是最干净的方案。
四、自建 Plausible / Umami
想要「数据在自己手里」,自建是正解。
Umami(推荐,资源占用小)
# docker-compose.yml
services:
umami:
image: ghcr.io/umami-software/umami:postgresql-latest
container_name: umami
restart: always
ports:
- "127.0.0.1:3000:3000"
environment:
DATABASE_URL: postgresql://umami:密码@db:5432/umami
APP_SECRET: 一串随机字符串
depends_on:
- db
db:
image: postgres:16-alpine
container_name: umami-db
restart: always
environment:
POSTGRES_DB: umami
POSTGRES_USER: umami
POSTGRES_PASSWORD: 密码
volumes:
- umami-data:/var/lib/postgresql/data
volumes:
umami-data:docker compose up -d
# 默认账号 admin / umami,登录后立刻改密码!Nginx 反代:
server {
listen 443 ssl http2;
server_name stats.bzii.cn;
ssl_certificate /etc/letsencrypt/live/stats.bzii.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/stats.bzii.cn/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}页面里加:
<script defer src="https://stats.bzii.cn/script.js"
data-website-id="你的站点ID"></script>| 优点 | 缺点 |
|---|---|
| 数据完全自控 | 要维护一个服务(数据库 + 应用) |
| 不用 Cookie | 数据量大时数据库会增长 |
| 脚本约 2KB | 被广告拦截器屏蔽(可自建域名缓解) |
五、日志分析:零前端脚本
最「干净」的方案:不改页面,直接分析 Nginx 日志。
sudo apt install -y goaccess
# 交互式查看
goaccess /var/log/nginx/access.log --log-format=COMBINED
# 生成 HTML 报告
goaccess /var/log/nginx/access.log -o /tmp/report.html \
--log-format=COMBINED --real-time-html
# 日常用 awk 也够
awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -20| 优点 | 缺点 |
|---|---|
| 零前端脚本,不影响性能 | 看不到「独立访客」(只能近似) |
| 不泄露访客数据给第三方 | 爬虫流量会算进去,数据偏大 |
| 能看到爬虫、404、慢请求 | 没有来源、停留时长 |
详见「Nginx 访问日志分析」那篇。对我这种想看「哪篇最受欢迎」的需求,awk 完全够。
六、对比
| 方案 | 前端脚本 | 隐私 | 维护 | 适合 |
|---|---|---|---|---|
| GA4 | ~50KB | 需同意横幅 | 0 | 商业站 |
| CF Web Analytics | ~3KB 或 0 | 好 | 0 | 大多数个人站 |
| Umami 自建 | ~2KB | 好 | 中 | 想自控数据 |
| 日志分析 | 0 | 最好 | 低 | 只要看趋势 |
七、隐私与合规要注意
- 境内站点:收集个人信息需要隐私政策说明;
- 使用 Cookie 的统计(GA)需要同意横幅(GDPR 要求);
- 不要用统计脚本采集表单内容、搜索词等敏感信息;
- 如果用第三方统计,隐私政策里要说明。
<!-- 本站的做法:不加任何第三方统计脚本 -->
<!-- 需要数据时直接分析服务器日志 -->八、本站的选择
本站没有加任何统计脚本。理由:
- 要支持
file://离线打开,外部脚本会失效; - 零依赖是本站的核心原则;
- 个人笔记站,看不看数据不影响我写;
- 加脚本 = 拖慢 + 多一个故障点 + 隐私问题。
真想知道哪些内容被看,就去看 Nginx 日志:
# 最受欢迎的 10 篇
awk '{print $7}' /var/log/nginx/access.log | grep "^/post" | sort | uniq -c | sort -rn | head -10
# 每天 PV 趋势
awk '{print substr($4, 2, 11)}' /var/log/nginx/access.log | uniq -c九、如果要用,我的建议顺序
1. 站点在 Cloudflare 后面 → 开 CF Web Analytics(零 JS 模式)
2. 不在 CF → 自建 Umami(一台小服务器即可)
3. 不想运维 → 先看一段时间 Nginx 日志,够用就别加
4. 都不想 → 不加,把精力放在内容上统计数据的价值在于指导你做什么。如果看了数据也不会改变行为,那它就是纯粹的成本。
