给博客加统计和图片评论:先分清哪些要服务器
统计用 GoatCounter,评论用 Artalk。而最该先做的是去已有后台看数据,不是急着加新工具。
起因:想给每篇文章加个统计面板
看到一张笔记 App 的统计截图——字数、阅读时间、创建时间、公开时间、引用/被引用——想给站上每篇文章也加上。另外评论区要能传图片。
按老规矩,动手前先去 GitHub 查了一圈有什么能直接用或二次开发的。(上一篇 四账号矩阵自动化 也是这么干的,省下了写一半才发现方向错的功夫。)
结果第一条结论就被推翻了,而且推翻它的不是资料,是我自己把需求听窄了。
第一次判断:统计根本不需要服务器
我最初的理解是「文章内容统计」,得出的分界线长这样:
- 构建期(不需要服务器):字数、阅读时间、创建/公开时间、引用关系 → Hugo 在 push 那一刻就算好,直接写进 HTML。访客打开页面时零请求,数字就是死的。
- 运行期(需要服务器):评论内容、上传的图片 → 这两样是访客产生的、会一直增长的,必须有地方存。
这四类统计全是 Hugo 自带能力——.WordCount、.ReadingTime、date、publishDate,连插件都不用装。引用关系也是构建时扫一遍全站链接就能得出。
所以当时我的结论是:统计零成本,只有评论需要选型。
被推翻:我要的是真实访问数据
接着对方补了一句:「是根据真实访问数据添加的统计。」
这就完全是另一回事了。
「统计」这个词在这里有歧义:
- 内容统计 = 这篇文章有多少字(写完就定了,永远不变)
- 访问统计 = 这篇文章有多少人看过(每个访客都在变)
后者是运行期数据。Hugo 构建的时候根本不可能知道明天会有谁来、来几个人。这类数字绕不开一个实时统计服务。
这条修正把方案整个换掉了:从「改模板就行」变成「得接一个服务」。
重新查:真实访问统计的几条路
| 方案 | 前台显示 | 要不要服务器 | 数据自主 | 国内访问 |
|---|---|---|---|---|
| Cloudflare Web Analytics | ❌ 仅后台 | 零(后台一键开) | 中 | 最好 |
| GoatCounter | ✅ 后台开关打开 | 零(免费托管) | 中 | 一般 |
| 不蒜子 busuanzi | ✅ 一行脚本 | 零(公共版) | 低 | 公共版不稳 |
| Umami | ✅ 有 API | 需要(自托管) | 高 | 看装哪 |
| GA4 | ⚠️ 要调 API | 零 | 低(谷歌) | 后台要梯子 |
| Clarity | ❌ 仅后台 | 零 | 低(微软) | 一般 |
查的过程中发现一件更重要的事:站上已经装了 GA4(G-0QN01E6F0V)和 Microsoft Clarity(ydffrd17ww),跑了一段时间了。
也就是说 PV、UV、停留时长、来源、跳出率、Clarity 的会话录制和热力图,数据早就在后台躺着。
所以第一步不是加东西,是先去看看现有数据够不够。够的话,要做的只是把它展示出来;不够(嫌 GA4 后台要梯子、嫌数据不在自己手上)才需要换或加。
这是这次调研里最容易踩的坑:为了一个「前台显示阅读数」的小需求,再叠一套完整统计系统,纯属重复建设。
另外 Cloudflare Web Analytics 值得先查——2026 年 8 月起 Cloudflare 会对接入站点静默注入 beacon.min.js,可能后台直接就有数据了,零代码零成本。
评论侧:图片上传这条筛掉了一半方案
统计是后来的问题,评论从一开始就有明确要求:留言要能上传图片。
| 项目 | 维护 | 图片上传 | 部署难度 | 备注 |
|---|---|---|---|---|
| Artalk | ✅ 活跃 | ✅ | 极低(Docker 一条命令) | Go 单二进制 + SQLite,文件即数据 |
| Twikoo | ✅ 活跃(1.7.7) | ✅ | 中(Vercel / 腾讯云 CloudBase) | 已从 imaegoo/twikoo 迁到 twikoojs/twikoo |
| Waline | ✅ 活跃 | ✅ | 中(Vercel + 数据库) | 官网 2026-10-03 还在更新 |
| Giscus | ✅ 9k+ stars | ❌ | 极简(一行 script) | 不支持贴图,出局 |
| utterances | ✅ 9k+ stars | ❌ | 极简 | 不支持贴图,出局 |
| Disqus | ⚠️ | ✅ | 极简 | 国内慢 + 免费版有广告,不推荐 |
这里有个反直觉的点:Giscus 是这堆里 star 最多、口碑最好的(9k+),但它直接出局了。
原因很简单——它走 GitHub Discussions,评论就是 GitHub 的评论,不支持在评论里贴图。star 数跟「能不能满足我的需求」是两件事。 如果先按流行度选,做完才发现传不了图,白折腾。
剩下三个支持贴图的里,我倾向 Artalk:Go 单二进制 + SQLite,一个文件就是整个数据库,cp 就能备份。Waline 和 Twikoo 对个人博客来说数据库选型偏重(LeanCloud / MongoDB / CloudBase),多一个运维点。
双链引用那块查到一个 hugo-wikilinks,但它 2021 年 10 月之后就没更新了,一共只有 5 个 commit。它做的事其实就是 50 行模板代码——扫全站找 [[双链]] 语法、列出反向引用。这种量级自己写比 fork 一个四年前的项目稳,还能完全适配主题样式。
结论
三块功能,三种处理方式:
| 块 | 方案 | 理由 |
|---|---|---|
| 真实访问统计 | GoatCounter | 免费托管、一行 script、后台开关一开就能前台显示阅读数 |
| 评论 + 图片上传 | Artalk | 图片上传 + Docker 一键部署 + 数据自主的最佳折衷 |
| 双链引用 | 自写 Hugo partial | 现成模块已停更 4 年,自己写 50 行更稳 |
一个还没解决的软肋
GoatCounter 服务器在国外,国内访客加载统计脚本可能失败,导致数字偏低。
这不是「数据不真实」,是覆盖率不全——上报成功的都算数,只是漏了一部分。对个人博客通常能接受,但如果要求数字贴近真实访问量,这是唯一的软肋。
计划是先跑两周,跟 GA4 后台的数字对比一下。差得不多就继续用;差太多再换自建(Cloudflare Workers + D1,反正已经在 Cloudflare 生态里,国内上报比国外稳)。
待办
- 注册 GoatCounter,拿站点地址 → 改
extend_head.html加统计脚本,文章页加阅读数显示 - 评论后端部署位置待定:免费托管试水 / 国内 VPS(¥20-30 每月)/ Cloudflare Workers
- 双链引用 partial 待写
- 现在还不能动手——等站点地址
这次最值钱的不是选了哪个工具,是那条分界线:拿到一个「加统计」的需求,先问清楚这个数字是构建期算出来的还是运行期跑出来的。前者改模板就行,零成本;后者必须接服务,而接服务之前,最好先确认已有的服务是不是已经在干这件事了。
— 完 —
返回首页
留言
还没有留言,来当第一个吧。
加载留言中…