Halo 自带的统计能力比较有限:文章列表里只有累计阅读量、评论数、点赞数,看不到趋势,也看不到访客、跳出率这类指标。为此我写了「文章数据趋势分析」这个插件,把 Umami 的站点统计数据和 Halo 自身的点赞计数整合到后台的一张看板里,支持全站趋势、逐日数据和单篇文章分析。

这篇文章记录插件的安装、配置和各项功能的使用方式,顺便说明一下每日点赞统计的实现原理和它的局限。

功能总览

  • 站点汇总:文章总数、总阅读量、总评论数、总点赞数

  • 趋势看板:浏览量、访客数、访问次数、跳出率、平均访问时长,支持近 7 天 / 30 天 / 90 天 / 自定义时间段

  • 每日点赞统计:从部署之日起按自然日记录全站和每篇文章的新增点赞

  • 单篇文章分析:全部文章的阅读、评论、点赞数据,支持筛选、排序和 CSV 导出;点击单篇文章可查看它的访问趋势和逐日数据

  • 数据来源:浏览量等流量指标来自 Umami,点赞趋势由插件自身统计,阅读 / 评论 / 点赞总数来自 Halo 的计数器

安装

两种方式任选其一:

  1. 后台「插件 → 应用商店」搜索安装(上架审核通过后可用);

  2. GitHub Releases 下载 jar,在后台「插件 → 安装插件」中手动上传。

插件要求 Halo 2.21 及以上版本。安装后,后台左侧菜单会出现「文章数据」入口。

配置 Umami

流量类指标(访客数、访问次数、跳出率、平均访问时长、访问趋势)依赖 Umami,需要先在插件设置中配置三项:

Umami 设置

配置项

说明

Umami 服务地址

自建或云端的 Umami 地址,不含末尾斜杠,例如 https://umami.example.com

站点 ID(Website ID)

Umami 网站详情里的 Website ID,UUID 格式

API Key

在 Umami 后台「设置 → API keys」中创建

API Key 只保存在服务端,所有对 Umami 的查询都由插件代理转发,Key 不会下发到前端浏览器。

不配置 Umami 也能用:汇总卡片、文章数据表格、每日点赞统计都不依赖 Umami,只是趋势图和逐日流量数据会为空。

数据看板

进入「文章数据」,顶部是四张汇总卡片:文章总数、总阅读量、总评论数、总点赞数。下方是三个标签页。

趋势图

全站趋势图

选定时间段后,上方卡片显示该时间段内的浏览量、访客数、访问次数、跳出率、平均访问时长和点赞量;下方折线图按天展示浏览量趋势。鼠标悬停在任意一天,可以看到当天的浏览量、访问次数和点赞量:

趋势图悬停提示

数据列表

逐日数据列表

以表格形式列出时间段内每一天的浏览量、访问次数和点赞量,按日期倒序排列。

单篇文章分析

文章数据表格

表格列出全部文章的阅读量、评论数、点赞数和发布时间,支持:

  • 按发布状态筛选(全部 / 已发布 / 草稿)

  • 按标题搜索

  • 点击列头排序

  • 右上角「导出数据」把当前筛选结果导出为 CSV

点击任意一行,会从右侧滑出该文章的详情抽屉:

单篇文章趋势

抽屉内同样有趋势图和数据列表两个视图,展示这篇文章在所选时间段内的逐日浏览量、访问次数和点赞量:

单篇文章逐日数据

每日点赞统计

为什么需要这个功能

Halo 只保存每篇文章的累计点赞数,不保存任何带时间戳的点赞历史——点赞事件也没有以插件可订阅的方式发布出来。所以「某篇文章在哪天获得了多少赞」这个数据,Halo 自己是回答不了的。

实现方式

插件启动后每 60 秒读取一次全部文章的点赞计数,与上一次快照做差值,把增量记到当天的日期下,按「统计时区」的自然日归档。数据持久化在名为 article-analysis-upvote-daily 的 ConfigMap 里,插件重启、升级都不会丢失,保留最近约 400 天。

统计口径与前台展示一致:记录的是点赞计数器的增量。读者取消点赞不会让历史数据变负,重复点赞 / 取消在一分钟轮询窗口内也不会重复计数。

统计时区

点赞统计设置

「统计时区」决定按哪个时区的自然日归档,例如 Asia/Shanghai,留空则使用服务器默认时区。

局限性

这几点使用前需要清楚:

  1. 历史不可追溯。数据从插件部署之日起才开始积累,部署之前的点赞分布无法还原。

  2. 停用期间的数据会归入重启当天。插件停用或升级重启期间产生的点赞,会在下一次启动时被计为当天的增量。

  3. 不区分点赞用户。只记录数量,不记录是谁点的。

CSV 导出

「单篇文章分析」右上角的「导出数据」会把当前表格(含筛选和排序结果)导出为 CSV 文件,包含文章标题、阅读量、评论数、点赞数、发布时间和链接,方便在 Excel 或其他工具里做进一步分析。

常见问题

趋势图没有数据? 先确认插件设置里的 Umami 三项配置是否正确。可以在 Umami 后台用同一个 Website ID 和 API Key 直接查 stats 接口验证。站点刚接入 Umami 时,历史数据自然也是空的。

汇总卡片的点赞数和趋势里的点赞量对不上? 正常现象。汇总卡片里的「总点赞数」是 Halo 计数器里的累计值,包含插件部署之前的所有点赞;趋势和数据列表里的「点赞量」只统计插件部署之后按天记录的增量。

升级插件后点赞历史会丢吗? 不会。数据存在 ConfigMap 里,与插件 jar 无关,升级、停用再启用都不受影响。

支持 PostgreSQL / MySQL 之外的环境吗? 插件本身不直接访问数据库,所有数据通过 Halo 的 Extension API 和 Umami API 获取,与底层数据库无关。

项目地址

源码与发布:https://github.com/shirainbown/plugin-article-analysis

使用中遇到问题欢迎在 GitHub Issues 里反馈。