两个版本号,一件事。

v2.3.0 和 v2.4.0 隔了一天,改的东西看着不像一回事——一个是给旧文章的 frontmatter 补字段,一个是给文章页加 UI。但目标只有一个:让这 121 篇文章之间出现关系。

问题:121 篇文章,平均 0.55 个链接

动手之前我先统计了一遍:全站 121 篇文章,正文里用了双向链接的只有 24 篇,渲染出来的链接一共 65 处。平均下来每篇 0.55 个。

这个数字挺说明问题的。绝大多数文章是孤岛——写完、发布、躺下,跟别的文章之间没有任何连接。读者读完一篇,想继续了解同一个主题,只能回归档页自己翻。

更具体一点。你读完 AI 编程工具选型,别问哪个最好,问哪个最适合你的场景,结尾那个「上一篇 / 下一篇」给你的下一站可能是《Docker Compose 管了 12 个服务》。两篇单独看都不错,可它们之间没关系。时间上相邻不等于内容上相关,而按发布时间排序恰恰只保证了前者。

链接存在不等于阅读连贯。这是我这次真正想改的东西。

v2.3.0:给散落的叶子找树干

第一步不是写新文章,是给已有的文章找位置。

书系从 4 部增到 7 部,新增的三部是:

书系收编装的是什么
个人出版物8 篇博客本身作为一个案例
AI 开发工作流6 篇从选型到落地的完整链
选择与放弃9 篇决策记录和退出记录

一共 21 篇旧文章归位。成本只是给 frontmatter 加三行字段,但这些文章第一次有了上下文——它们不再是一堆同主题的帖子,而是一条线上的几个点。

然后写了三篇总纲:我的 AI 开发工作流:从想法到上线、我如何做一个属于自己的个人出版物、118 篇文章以后,我重新理解了博客。三篇一共引用了 45 篇已有文章,全站在渲染的双向链接从 65 处涨到 191 处。

顺手修掉 4 处历史断链。有两处是标题写错了([[个人知识管理]] 实际叫「信息过载时代的个人知识管理」),另外两处引用了不存在的别名。

v2.4.0:给读者一个往下读的理由

骨架有了,接下来是路标。文章页动了三个地方。

开头:TL;DR + 阅读路线

正文之前多了两块。

TL;DR 是三到五行结论,左侧一条主色竖线,放在标题区下面、正文上面。不是技术博客那种「1. xxx 2. xxx 3. xxx」的要点罗列,而是一段话说清楚两件事:这篇解决什么问题,我的结论是什么。

阅读路线是一条横向的编号步骤条。这里要跟侧边栏那个目录区分开——侧栏是树形的、可跳转的目录,路线是线性的、告诉你「接下来会经历什么」的预告。形态刻意做得不一样,避免看起来像两个 TOC。

路线的生成逻辑是:frontmatter 里写了 route 就用人工的,没写就从正文的 H2 标题自动提取。这样 121 篇立刻全都有了路线,不用等一篇篇补。自动生成的质量当然比不上手写,但比没有强得多。

结尾:继续阅读

原来那个按时间排的「上一篇 / 下一篇」被挪到了版权和分享之后,降级成兜底,改名叫「前一篇 / 后一篇」。真正的出口换成了「继续阅读」,优先级是:

  1. 作者推荐——frontmatter 里手写 readNext,两到三篇,带一个「读这篇 →」的理由位;
  2. 同系列下一篇——没手写时自动取;
  3. 时间序前后篇——只在上面都没有时出现。

区别在哪?在于第一条是人给的。推荐算法能算出「相似」,算不出「读完这篇你该看那篇,因为那篇回答了你刚产生的疑问」。这个判断只有写的人有。

目前 9 篇文章手写了 readNext(包括正在读的这篇),全站 42 篇有继续阅读的出口。剩下的靠系列自动接——能用,但不够好,这是后话。

内容类型:点开之前先知道读的是什么

编号行多了一枚类型徽标。七类:观点、教程、案例、评测、记录、笔记、资料。

这个不是标签。标签描述「这篇讲什么」,类型描述「这篇是什么东西」。读者点开之前就知道要读的是一篇教程还是一篇个人观点,预期管理完全不一样。

121 篇全量标注完的分布:教程 39 · 案例 23 · 观点 22 · 资料 12 · 评测 11 · 记录 7 · 笔记 7。

教程占三分之一,这个比例我一开始有点意外,回头想想也对——这个站有相当一部分内容是「我踩完坑把过程写下来」,本身就带教程性质。

另外加了 postscript 后记字段,虚线卡片样式。配合已有的 seed / bud / bloom 生长状态,让文章可以生长,而不是发布即冻结。以后哪篇文章有后续进展,直接补一段后记,比改正文干净。

踩的三个坑

一、批量改 frontmatter 把字段插进了列表中间。 给文章加 type 时,脚本按「第一个非空行之后」定位插入点,结果 aliases 是个缩进列表,字段被塞进了列表项中间,YAML 直接解析失败,构建报错。修法是插入点要跳过所有缩进续行。顺手加了个全量校验脚本,现在 121 篇 frontmatter 全部解析通过才允许往下走。

二、Wiki Link 的 aliases 机制实际不生效。 索引里有这个字段,清了缓存也解析不了,所以两处引用一直断着。最后改成显式写法 [[完整标题|显示别名]] 才通。以后文章里引用统一用这个写法。

三、Astro 内容层缓存。 改完 frontmatter 重新构建,页面的 HTML 还是旧渲染结果。得先 rm -rf .astro 再构建。判断方法是看 dist/blog/<slug>/index.html 的修改时间是不是本次构建的时间——我在这上面浪费了两次构建。

还没做完的

  • 继续阅读目前只有 8 篇是人工指定的。 其余靠系列自动接。要让它真正好用,得一篇篇写 readNext,慢活,但这是唯一能体现「作者判断」的部分。
  • 90 多篇还没有双向链接。 三篇总纲加了 45 处,但剩下的旧文章还是孤岛。
  • 首页还是「最近发布」,不是「最近在发生」。 理想状态是首页回答「这个人最近在干什么」,Archive 回答「这个人过去写过什么」。这个改动会动首页结构,先放着。

v2.3.0 和 v2.4.0 都没有增加一篇文章的数量感——121 篇还是 121 篇。但现在的 121 篇和一个月前的 121 篇不是一回事:原来是一堆写完了的东西,现在是一张能走通的图。

具体长什么样,点开任意一篇看看开头和结尾就知道了。

继续阅读Continue Reading

关于本文About

评论Comments

留下你的想法

欢迎在下方评论区留下你的看法,一起把话题聊得更深。

COMMENTS