资讯文章 资讯 · NEWS
榜单第一名是怎么算出来的:目录站的热度算法、刷量识别和展示口径
2026-10-24 约 2,123 字 预计阅读 5 分钟 yiyunkj
榜
目录站的榜单做起来容易做好难。最简单的实现是「按点击数排序」,上线两周你就会发现榜单变成了固定几条的天下——谁早进来谁就在上面,新条目永远排不上去,榜单失去了它唯一的价值。
问题出在少了时间这个维度。

图片来源:网络,版权归原作者所有,侵权请联系删除
两种经典的时间处理思路
业界有两个公开的、被广泛参考的模型,思路正好相反。
| 模型 | 公式 | 行为特征 |
|---|---|---|
| Hacker News 式 | (P − 1) / (T + 2)^G | 分数随时间真实衰减,老内容自然掉下去 |
| Reddit 式 | log₁₀(max(|s|,1)) + t / 45000 | 票数取对数,时间作为固定加分项 |
第一个里,P 是票数,T 是发布至今的小时数,G 是重力因子,常用值在 1.5 到 1.8 之间。分母的指数大于分子(这里是 1 对 1.8),所以分数会随时间持续下降——一条高票老帖过一天就掉下去了。那个减 1 是为了扣掉作者自投的一票,加 2 是防止刚发布时分母太小、分数虚高。
第二个的处理更巧妙:票数取以 10 为底的对数,意味着前 10 票的分量和后面 100 票相当,早期票的价值被放大;时间项不是衰减而是直接把发布时间戳折算成一个固定加分,新帖天然起点高,老帖要靠票数翻倍才能追平。45000 秒这个常数大致意味着晚 12.5 小时发布的内容,需要十倍的净票数才能排在同一位置。
两种都能用。目录站我更倾向第一种,因为榜单需要「持续更新」的观感,真实衰减能保证新鲜内容有固定的上升通道。
目录站该拿什么当热度信号
这里的第一个决定是:用站内数据还是用出站点击。
站内点赞、收藏这些信号的问题是基数太小。一个日访问几千的目录站,愿意点赞的用户可能是个位数,噪声占比太高,刷起来也容易。
更合适的是出站点击——用户点了条目的外链。这个行为本身就是目录站的核心价值,数据量大,而且真实反映「这个条目值得去」。
一条可用的公式大概长这样:
score = (outclicks_7d + base) / pow(hours_since_update + 2, 1.5) * category_weight
几个参数的意思:
- outclicks_7d:近七天的出站点击。用窗口而不是累计,避免老条目靠历史积累永远在榜。
- base:冷启动基线。新条目没有数据,给一个小的初始值让它有机会被看到,随着真实数据积累自然被覆盖。
- hours_since_update:距离最近一次更新的时间,不是发布时间。条目更新过说明还活着,也给了编辑干预的空间。
- category_weight:分类权重。不同分类的量级可能差十倍,不归一化的话大分类会霸占整个榜单。
归一化这件事值得多说一句。最简单的做法是按分类内排名而不是绝对分数来取条目,保证每个分类都有代表;或者对分数做一次分位数转换,把不同量级拉到同一个尺度上。别指望靠调权重解决量级差异,那是个永远调不准的活。
刷量长什么样
只要有榜单,就一定有人想上榜。刷量通常有这几个特征,可以做成自动标记:
- 来源单一。某条目的点击几乎全部来自同一个 IP 段、同一批 UA、或者同一个外部来源页。
- 时间间隔过于规整。真实用户的点击是随机的,脚本产生的点击往往间隔接近,甚至精确到秒。
- 无其他行为。进来就点外链,没有浏览列表、没有搜索、没有第二页。跳出时间极短。
- 突增。某个平时一天几点击的条目,某天突然涨到几百,且集中在几小时内。
- 新条目异常。刚提交通过、编辑还没推荐过的条目,短时间内冲到前列。
单条信号不足以判定——真实传播也可能带来突增。做法是多信号命中才标记,比如「来源单一 + 间隔规整 + 无其他行为」三条同时中,可信度就很高。
认出来之后怎么处理
处理方式要克制。推荐的顺序是:
- 先把可疑数据从热度计算里剔除,条目本身保留,正常展示。这样即便误判,影响也只是排名,不会误伤。
- 记一条内部标记,写明时间和依据。积累几次之后再决定要不要进一步处理。
- 确认是刷量的,才做展示层面的处理:比如该条目在榜单上标注数据来源存疑,或者暂停它在榜单里的展示但不影响分类页。
不要做的事:直接删除条目、公开点名、或者把整个 IP 段永久拉黑。前两个会引发纠纷,第三个误伤面太大——很多 IP 段是运营商共享出口。
还有一条容易被忽略的:把防刷的规则写进公开的规则页。让自己的编辑和外部都看到,本身就是一种威慑。
榜单上该公示什么
用户和站点方都会问「你们这个榜是怎么排的」。与其每次解释,不如在榜单页上写清楚:
- 统计周期:近 7 天还是近 30 天,这个必须写。
- 主要依据:出站点击量、编辑推荐权重各占多少,给个大致说明就行,不必公开完整公式。
- 更新时间:榜单多久重算一次,页面上标出「数据更新于某时间」。
- 异常说明:数据明显异常时会暂停展示,这条写上会省掉很多解释。
公示口径有个额外好处:当有人来问「为什么我上不了榜」时,你有一份可以指给他看的东西,而不是一场扯不清的争论。
上线前检查
- 用一个月的真实数据跑一遍历史回放,看榜单每天的变化幅度是否合理——完全不动说明衰减太弱,天天大换血说明衰减太强。
- 检查冷启动:新提交的条目多久能进榜,一周内进不去说明基线给低了。
- 检查各分类的入榜分布,某个分类长期占一半以上就说明归一化没做对。
- 把刷量检测规则拿历史数据验一遍,看看误报率。误报太高就收紧条件。
榜单是个公开承诺:你说这个最热,就得说得出依据。算法可以简单,但口径必须站得住。