2022 年搭第一个博客的时候,我的目标很简单:有个地方发文章。

四年后这个站有 118 篇文章、6 个栏目、7 部书系、262 个标签。它还叫博客,但我对它的期待早就变了——我不再想要一个「按时间倒序排列的文章列表」,我想要一份能查阅、能重读、文章之间能互相指路的出版物。

这个转变不是某天想通的。是 118 篇文章堆到一定程度,旧结构撑不住了,才被迫改的。

这篇记录我现在的理解,也是这个系列的总纲。

01 博客和出版物的区别

博客的默认结构是时间轴。最新的在最上面,往下滑是越来越旧的东西。这个结构有个隐含假设:文章是一次性的。

出版物不是。出版物假设你会回头翻,假设第 3 章和第 17 章有关系,假设有人从中间开始读也能读得懂。

我第一次意识到这个问题,是发现自己想引用三个月前写的东西,却想不起那篇叫什么。站内搜索能搜到,但我当时压根没想到去搜——我根本不记得自己写过。

折腾个人博客三年,我终于想明白了什么里我写过一件事:写了两百多篇又删掉了一百多篇。删掉的大部分是「一次性」的。留下的那些,值得被组织起来。

02 内容系统的三层

现在的结构是三层,各管一件事:

栏目(Category)回答:这是什么类型的文字。

技术、教程、思考、随笔、工具、游戏。只有 6 个,从 10 个精简下来的。分类太多等于没有分类——这是我犯过的错,10 个分类里有 4 个长期只有两三篇文章。

栏目不是文件夹,是编辑口径。博客配置三层架构:框架层、站点层、内容层的职责划分里我把它叫「三层」,现在看,内容层这一层最关键:它决定了读者在什么语境下遇到这篇文章。

书系(Series)回答:这篇和哪些篇是一伙的。

这是最近才补上的一层。之前只有 4 部书系、21 篇文章有归属,剩下 97 篇全是散的。这次新建了「个人出版物」「AI 开发工作流」「选择与放弃」三部,把散落的文章按主题串起来。

书系是有阅读顺序的。从零开始 → 使用指南 → 博客手记,一个人照着走能把这个站从头用到尾。

标签(Tag)回答:这篇提到了什么。

262 个。太多了,我知道。标签是最容易失控的一层,因为它没有成本,写一篇加三个,四年下来就成了这样。

我现在的做法是:不再主动增加标签。已有的留着当检索入口,新的尽量复用。真正该增加的是书系和文章之间的关系,不是标签。

03 为什么保留 Archive

Archive 是这个站里访问量最低的页面之一。我留着它,因为它承担一个不可替代的功能:证明时间是连续的。

2022 到 2026,每个月写了几篇,哪几个月是空的,一眼能看出来。有一次我翻 Archive,发现 2025 年 11 月到 2026 年 1 月只有两篇——那三个月我在做别的事。这个信息,文章列表给不了我。

为什么我选择自建博客里我说在乎数据所有权。Archive 是这件事的具体形态:不是我拥有文章文件,是我拥有它们的完整时间线。

04 双向链接为什么值得做

[[像这样的语法]],鼠标悬停能预览目标文章的开头。

技术上不复杂,一个 remark 插件加一份标题映射表。难的是养成用的习惯。118 篇里只有 24 篇用了它,65 处链接——这个数字低得难看,是这次改造最想补的部分。

双向链接的作用不是「让网站看起来更高级」。是强迫我在写的时候想:这句话和什么有关。

写着写着发现自己在引用半年前的某篇,说明这两篇之间确实存在关系,只是我之前没意识到。这种发现,比任何标签系统都准。

双向链接只是工具里我提醒过自己别神化它。现在补一句:也别因为它只是工具就不用。

05 Frontmatter 怎么设计

现在一篇文章的头部长这样:

title: ''
description: ''
pubDate: 2026-09-09
category: '思考'
growth: bloom
tags: ["..."]
series: ''
seriesOrder: 1
seriesId: ''

几个带着教训的字段:

  • description 一定写。 它出现在首页、书系页、搜索结果里,是文章真正的门面。标题起得好不如描述写得准
  • growth(seed / bud / bloom)。 标记这篇文章的成熟度。seed 是刚冒头的想法,bloom 是我愿意为之负责的结论。这个字段让我能诚实地对待旧文章——不是所有文章都该被同等信任
  • seriesOrder 要显式写。 靠日期推断顺序在书系里会出错,因为写作顺序 rarely 等于阅读顺序
  • pubDate 的时区。 踩过最大的坑。裸日期会被 JS 按 UTC 零点解析,北京时间早上八点前构建,当天文章上不了线

博客写作语法指南和云图札记博文写作规范里有完整规范,那两篇是长期维护的文档型内容,不是一次性文章。

06 为什么要做 Changelog

站点有 40 多个版本记录。做这个的初衷很朴素:我想知道这个站变成现在这样,中间发生了什么。

Changelog 对外是透明度,对内是记忆。改版三年后,我早就记不清 v1.3 长什么样了,但翻一下记录就知道那次是把蓝色主题换成绿色,为什么换,换了之后哪里不满意。

博客本身是这个站最大的项目,它值得有项目日志。

07 一百多篇文章怎么管

四个笨办法:

  1. 每篇都写 description。 三个月后我自己也记不住标题背后是什么
  2. 定期回头改。 发现旧文章说错了,直接改,加 updatedDate。不改的话错误会一直留着
  3. 文档型内容单独对待。 博客写作语法指南这种,维护比发布重要
  4. 删。 一次性内容该删就删,我删过一百多篇

第 2 条是我这两年才开始做的。以前觉得发布完就不该动,现在觉得正好相反——发布只是开始。

08 搜索

用的 Pagefind,构建期生成索引,纯前端检索,没有后端。

选它的理由很简单:静态站不应该为一个搜索框引入服务端。博客搜索方案横评:客户端索引 vs 服务端搜索 vs 第三方服务里对比过三种方案,结论对个人站来说没什么悬念。

Astro 5 Content Layer 迁移实录,我的博客构建快了 5 倍记录了另一次提速。118 篇的构建时间从四十多秒降到八秒左右——这个数字在文章破两百之前都还能接受。

09 图片、字体和性能

博客图片优化实战:体积减少 60% 的量化对比和字体这件事,我折腾了三轮是这部分的详细记录。

简单说三条经验:

  • 图片走构建期转换,生成 WebP 和 srcset,不要手动压缩
  • 字体自托管,不挂 CDN。Google Fonts 在国内的不稳定性不值得赌
  • 中文字体是性能杀手。子集化或者接受首屏 FOUT,二选一

10 部署

GitHub Actions 构建,产物分发到 CDN,全站无后端。

这条链路跑了两年多,中间翻过车:博客 FOUC 闪屏事故复盘:样式加载顺序引发的 200ms 白屏Cloudflare Pages 部署 404 排查:三篇文章消失的始末。两次都是部署窗口期的缓存问题,排查时间比修复时间长。

Astro 博客部署运维进阶:从手动发布到自动化流水线和GitHub Actions 跑了半年,这些坑我替你踩过了是这条链路的完整记录。

这个系列的其他文章

按阅读顺序:

  1. 为什么我选择自建博客——为什么要自己搭
  2. 折腾个人博客三年,我终于想明白了什么——前三年的教训
  3. 云图札记的数字园丁计划——从博客到数字花园
  4. Grove 架构全景:从一行 Markdown 到浏览器里的页面——完整技术架构
  5. Astro 5 Content Layer 迁移实录,我的博客构建快了 5 倍——构建提速
  6. 博客搜索方案横评:客户端索引 vs 服务端搜索 vs 第三方服务——搜索选型
  7. Astro 博客部署运维进阶:从手动发布到自动化流水线——部署链路
  8. GitHub Actions 跑了半年,这些坑我替你踩过了——CI 踩坑
  9. 118 篇文章以后,我重新理解了博客——这次改造的收尾

最后

这个站现在的问题不是文章不够,是文章之间的关系还不够密。262 个标签解决不了这个问题,7 部书系也只能解决一部分。

剩下的部分,只能靠一篇一篇去补链接。慢,但没有捷径。

继续阅读Continue Reading

关于本文About

评论Comments

留下你的想法

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

COMMENTS