旧主题是 saral,简单干净,排版我也挺喜欢。问题是它的功能都要自己搭:标签页是拼的,归档和搜索是后来补的脚本,改一次样式就得跟模板搏斗半天。看到 astro-paper 之后决定换掉——它把这些做成了自带功能,代码结构也清楚,以后想加什么不用先猜作者的意图。
没换的是样子
配色不能动。黑底加金色是这个小站的身份,而且暗色是默认:第一眼进来就是黑的。这次另外配了一套暖纸色的浅色模式,右上角可以切,选择会记住。

上图:暗色(默认,#0f0f0f + #fbbf24)和这次新配的浅色(#fbf9f4 + #b45309)。
顺手做的事:界面文案全部写成中文(自己写了一份 zh-CN 文案表,不依赖翻译插件),日期改成「2026 年 9 月 24 日」的写法,列表页给每篇文章加了封面缩略图,归档页、站内搜索(Pagefind,构建时生成索引)和分页也都是主题自带的。
URL 一个没动
这大概是换主题最容易踩的坑。astro-paper 默认把文章放在 /posts/<slug>/、标签放在 /tags/<标签>/;而旧链接、RSS 订阅、搜索引擎里存的地址全是 /blog/<slug>/ 和 /blog/tag/<标签>/。所以我把主题的路由目录和链接生成函数都改成沿用旧路径——这是整次迁移里最需要小心的地方,改完还写了个脚本扫一遍构建产物,确认没有断链。

上图:文章和标签沿用旧地址,归档和搜索是新加的。
上线时被绊了一下
本地跑得干干净净:0 个错误、46 个页面、构建产物里的内部链接全部可解析。推上去却半天没动静,线上还是旧主题。翻构建日志才发现问题不在代码上:

Cloudflare 的构建流程是「先 npm run build,再 npm run deploy」,而 deploy 就是 wrangler deploy。我换主题时把 package.json 一起换成了上游的版本,上游没有 wrangler 这个依赖——于是构建全绿,最后一步 wrangler: not found,整单失败,线上一个字都没变。补回依赖、重建 lockfile、再推一次,81 秒后上线。
教训是:换模板的时候,package.json 不是「配置文件」,是构建契约的一部分。依赖列表里那些看着跟页面无关的东西,可能就是部署脚本赖以运行的那颗螺丝。
现在
文章里终于能放插图了。这篇的三张图都是用 PIL 画的,跟封面同一套黑金线条风格:纯色背景加线条和文字,不需要额外字体,也不会渲染成豆腐块。图点一下能放大(主题自带的小功能),缩略图用的是同一张封面。
写完这篇顺手确认了一件事:插图走的是构建期的图片优化,源文件 PNG 会被转成 WebP,并且带上明确的宽高——图片加载时不会把正文顶来顶去。