网站建好了,内容也更新着,可你知道每天到底有多少人来访吗?他们从哪个渠道来?看了哪些页面?设备是手机还是电脑?这些数据对站长来说非常重要,它直接决定了你的内容方向和优化重点。大多数站长的第一反应是用百度统计或者 Google Analytics,但第三方统计有几个绕不开的痛点:脚本加载拖慢网站速度、数据全部存在别人那里、国外统计在国内访问不稳定。这篇文章分享一个更适合个人站长的方案:自建统计系统,用开源的 Umami 把访客数据牢牢握在自己手里。
为什么要自建网站统计
自建统计不是赶时髦,而是有实实在在的好处:
- 数据所有权:访客数据存在自己的服务器上,不会被第三方平台拿去用于广告画像,也不用担心平台政策变动导致数据无法导出。
- 加载速度快:Umami 的跟踪脚本只有 2KB 左右,而且是异步加载,几乎不影响页面性能;对比之下,有些第三方统计脚本动辄几十 KB,还经常连不上。
- 隐私合规友好:Umami 不依赖 Cookie 追踪,不需要弹窗征求同意,在《个人信息保护法》和 GDPR 环境下压力小得多。
- 界面干净无广告:统计后台没有推广位,不会像某些统计平台那样天天弹广告。
- 数据实时:刷新页面立刻能看到实时访客,不用等统计平台延迟更新。
主流方案怎么选
| 方案 | 优点 | 缺点 |
|---|---|---|
| 百度统计 | 国内访问快、功能全、免费 | 脚本较重、数据在第三方、后台广告多 |
| Google Analytics | 功能强大、分析维度多 | 国内访问不稳定、学习成本高、脚本重 |
| Matomo | 开源、功能媲美 GA、可自托管 | 基于 PHP+MySQL,资源占用偏高,低配服务器跑起来吃力 |
| Umami | 轻量、部署简单、界面现代、无 Cookie | 分析维度比 GA 少,适合中小网站 |
综合来看,个人站长和中小网站用 Umami 性价比最高:一台 1 核 1G 的入门服务器就能流畅运行,Docker 一条命令部署完成,后台界面简洁好用。Matomo 适合需要复杂漏斗分析和电商跟踪的场景,配置和服务器要求都更高。
Umami 的原理与架构
Umami 是一个开源的网站分析工具,采用 Node.js 编写,数据存储在 PostgreSQL 或 MySQL 中。它通过一段 JavaScript 跟踪脚本采集访客行为,然后通过 API 把数据写入数据库,后台以 Web 界面的形式展示统计报表。整个系统由三个部分组成:Umami 应用本身、数据库、以及网站页面上的跟踪脚本。因为不依赖 Cookie,它无法追踪跨站行为,但也因此更轻量、更合规。
Docker 一键部署 Umami
官方推荐用 Docker Compose 部署,一条命令就能把 Umami 和 PostgreSQL 一起跑起来。先在服务器上创建目录和配置文件:
mkdir -p /opt/umami
cd /opt/umami
vim docker-compose.ymldocker-compose.yml 的内容如下:
version: "3"
services:
umami:
image: ghcr.io/umami-software/umami:postgresql-latest
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://umami:umamipassword@db:5432/umami
DATABASE_TYPE: postgresql
APP_SECRET: 一串足够长的随机字符串
depends_on:
- db
restart: always
db:
image: postgres:15-alpine
environment:
POSTGRES_DB: umami
POSTGRES_USER: umami
POSTGRES_PASSWORD: umamipassword
volumes:
- umami-db-data:/var/lib/postgresql/data
restart: always
volumes:
umami-db-data:然后启动:
docker compose up -d
docker compose ps等容器状态变成 running,浏览器访问 http://服务器IP:3000 就能看到登录页。默认账号是 admin,默认密码是 umami,登录后记得第一时间改成强密码。
配置反向代理与 HTTPS
直接暴露 3000 端口不安全,也不方便记忆。更规范的做法是用 Nginx 反代到子域名,并配上 HTTPS 证书。Nginx 配置示例:
server {
listen 443 ssl;
server_name stats.example.com;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}证书可以用 Let's Encrypt 免费申请,也可以直接用支持泛域名的证书。配置完成后,访问 https://stats.example.com 即可。如果服务器开了防火墙,记得只放行 80 和 443 端口,3000 端口不要对外暴露。
创建站点并接入跟踪代码
登录 Umami 后台后,点击添加站点,填写网站名称和域名,创建一个新的统计站点。然后进入该站点的设置页,复制跟踪脚本代码,它长这样:
<script defer src="https://stats.example.com/script.js" data-website-id="你的站点ID"></script>把这段代码粘贴到网站所有页面的 body 结束标签之前。对于 Typecho,可以放到主题的 footer.php 里;对于 WordPress,可以放到主题的 footer 或通过插件插入。部署完成后,访问几次自己的网站,几分钟内后台就能看到访问数据。Umami 的脚本是异步加载的,即使统计服务器暂时不可用,也不会阻塞网站页面的渲染。
常用功能与进阶技巧
- 实时概览:后台首页展示当前在线人数和实时访问动态,非常适合发布新文章后观察效果。
- 来源分析:查看访客来自搜索引擎、外链还是直接访问,配合关键词数据调整 SEO 策略。
- 页面排行:找出最受欢迎的页面,用数据指导内容选题。
- 设备统计:了解访客的浏览器、操作系统和屏幕尺寸,决定移动端优化的优先级。
- 排除自己的访问:在站点设置的过滤规则里,填入你自己的 IP 地址,或者通过设置忽略特定参数,避免自己的点击污染数据。
- 自定义事件:给按钮、下载链接等元素绑定事件,统计用户交互行为,这对追踪下载量和转化很有用。
- 多站点支持:一个 Umami 实例可以管理多个网站,每个网站独立统计、独立权限,帮朋友托管统计也没问题。
数据导出与迁移
统计系统用久了,数据就是一笔财富,谁都不想被绑定。Umami 提供了完整的数据导出能力,站点的历史数据可以导出为 CSV 或 JSON 格式,随时可以下载存档。导出路径在站点设置的"数据"标签页里,支持按日期范围导出,方便你做月度、季度报告。如果你之前用的是百度统计或 Google Analytics,想迁移到 Umami,可以先从旧平台导出历史数据留档,之后的新数据由 Umami 继续积累。历史数据格式不同,直接导入 Umami 并不现实,但保留 CSV 存档意味着你的数据永远属于你,想分析随时可以自己处理。这也是自建统计相比第三方平台最大的底气:没有围墙,没有数据绑架。
数据备份与升级
统计数据的核心在 PostgreSQL 数据库里,备份 Umami 本质上就是备份数据库。定时任务加上一条命令即可:
docker exec 数据库容器名 pg_dump -U umami umami | gzip > /backup/umami-$(date +%F).sql.gz升级 Umami 也很简单:拉取新镜像,重新执行 docker compose up -d,容器会滚动更新,数据库结构由应用启动时自动迁移,一般不需要手工干预。升级前建议先备份数据库,以防万一。
常见问题
问:自建统计会影响 SEO 吗?答:不会。Umami 的脚本不改变页面内容,也不产生外链,搜索引擎爬虫不受影响。反而因为页面少了第三方统计的重脚本,加载速度可能更快,对 Core Web Vitals 有正面帮助。
问:统计服务器挂了对网站有影响吗?答:跟踪脚本是异步加载的,统计服务不可用时网站照常运行,只是这段时间的数据会缺失。这也是为什么跟踪代码一定要用 defer 异步方式引入。
问:Umami 和 GoAccess 有什么区别?答:GoAccess 直接解析服务器访问日志,不用改网站代码,能看到爬虫和错误请求;Umami 靠页面脚本采集,能看到真实用户的来源和停留行为。两者互补,条件允许可以一起用。
问:1 核 1G 的服务器跑得动吗?答:完全没问题。Umami 应用本身占用内存大约 200 到 300MB,加上 PostgreSQL,1G 内存的机器跑得很轻松,这也是它比 Matomo 更适合低配服务器的原因。
问:Umami 支持哪些数据库?答:官方镜像分为 postgresql 和 mysql 两个版本,分别对应 PostgreSQL 和 MySQL。个人站长用 PostgreSQL 版本即可,它安装简单、性能稳定;如果你服务器上已经跑着 MySQL,也可以直接选用 MySQL 版本,复用现有数据库实例。
问:手机上看统计方便吗?答:Umami 的后台是响应式设计,手机浏览器直接访问就能看实时数据,布局会自动适配小屏幕,出门在外随时掌握网站动态。