从动态博客、笔记软件绕一圈,最后还是选择自己写 Markdown、自己部署。
用过 WordPress、Ghost、Notion 公开页、飞书文档外链……最后还是回到「Markdown + 静态站点」。原因很俗:可控、省心、便宜。
- 可控:文章就是仓库里的文件,版本在 Git 里,换主题、换框架都是改代码,没有「平台锁死」的焦虑。
- 省心:没有数据库、没有后台登录、没有评论审核(真要评论可以接第三方),部署到 Vercel/Netlify 之类,几乎不用管。
- 便宜:静态托管大多有免费额度,域名自己买就行。
为什么放弃那几个
不是它们不好,是每个都在某一点上拧着:
- WordPress / Ghost:功能全,但每次写之前要先登录、等后台加载、再用富文本编辑器。我想写的是一段文字,不是打开一个 CMS。富文本还会把内容锁进 HTML 结构里,想批量改格式很痛。
- Notion 公开页 / 飞书外链:写起来顺,但 URL 不归我,样式不归我,哪天平台改政策页面就废了。更重要的是,内容活在别人的数据库里,导出来的不是「文章」,是一坨 JSON。
- Hugo / Hexo 之类:也是静态站,功能成熟。选 Astro 纯粹是因为我想在页面里塞一点 React 组件做交互,Astro 的 islands 模型刚好够用,不用把整个站做成 SPA。
「功能要自己加」具体是哪些
这是静态站唯一的真实代价。下面几样得自己在构建期解决,没有后台点点就好:
- 搜索:页面构建时生成一份文章索引 JSON,前端做客户端搜索。文章不多时
lunr/fuse.js完全够,不用上 Algolia。 - 标签 / 相关文章:frontmatter 里加字段,构建时按标签聚合一层,比写 SQL 查询还简单。
- RSS:
@astrojs/rss一个文件搞定,这是动态站反而更麻烦的部分。 - 评论:接 Giscus / Disqus 这类第三方,一行 script。代价是依赖第三方,所以很多人干脆不开放。
看起来要写不少代码,其实每样几十行。而且写完一次,之后发文章就只是 git commit。
一个不常被提起的好处
静态站的内容是纯文本文件。这意味着同一份 Markdown 可以同时喂给博客、RSS、Newsletter、甚至 LLM 当语料。动态站的内容绑死在数据库 schema 上,想换出口要先写迁移脚本。文本是迁移成本最低的格式——这点在折腾过几次平台之后体会最深。
博客本来就不需要那么多功能。先把「写」和「读」做好,剩下的等真有需要再加。