博客底部的"相关文章"推荐,通常是这么来的:手动挑两篇,写死链接,然后彻底遗忘。三个月后,读者点进去发现文章早已删除,或者内容毫不相干。这种"伪推荐"比没有推荐更糟糕。

一位开发者在自己的PHP博客里解决了这个问题——而且没用数据库。他的全部内容只依赖一个posts.json文件,里面存着每篇文章的slug、分类和标签。就靠这点信息,实现了自动化的相关文章推荐。

打开网易新闻 查看精彩图片

硬编码的陷阱很明显。初期版本长这样:

'/blog/commentaires-sans-bdd-php', 'title' => 'Adding comments...'],['url' => '/blog/creer-un-blog-avec-claude-code', 'title' => 'Building a blog...'],]); ?>

10篇文章时还能忍,50篇时变成噩梦。更致命的是:新发布了更相关的文章,旧文章里的推荐链接永远不会自动更新。

他的解法很朴素。posts.json里每篇文章的结构如下:

{"slug": "analytics-php-sans-cookies-rgpd","title": "Analytics PHP sans cookies ni base de données","date": "2026-02-25","category": "Retour d'expérience","tags": ["php", "analytics", "rgpd", "sécurité", "no-database"]}

这个文件本来就用在博客列表和站点地图里,顺手拿来做推荐,零额外成本。

评分算法设计得很克制:共享标签+2分,同分类+1分。按分数降序,同分取最新,只保留前3名。0分的直接淘汰——没有共同点的文章不配出现在推荐位。

核心函数find_related_posts的逻辑很直白:先定位当前文章,再遍历所有其他文章算分,最后排序切片。没有机器学习,没有向量相似度,就是简单的数组交集和条件判断。

集成到现有系统也很顺滑。blog_footer()本来就要接收$slug参数加载评论,现在加个判断:如果没传手动推荐列表,就自动触发计算。旧文章无需改动,新文章直接享受智能推荐。

这个方案的限制很明显:标签质量决定推荐质量,分类粒度影响相关性判断。但对于个人博客或小型内容站,它提供了一个足够好的基准线——比死链接好,比维护成本为零。

技术选型有时候就是这样。不是追最新最复杂,而是在约束条件下找到可持续的解法。一个JSON文件,二十几行PHP,解决了80%的问题。剩下的20%,等真的成为瓶颈再考虑也不迟。