这个博客用 Astro 7 搭,静态输出,中英双语。

为什么是 Astro

博客是内容站,绝大多数请求要的是同一份 HTML。静态生成意味着:

  • 没有服务器、没有数据库、没有冷启动
  • 部署就是把 dist/ 丢到 CDN 上
  • 首屏只需要一次 HTML 请求,没有 hydration 的 JS 成本

双语怎么排的

URL 是对称的:/zh/ 与 /en/。根路径 / 重定向到 /zh/。

好处是搜索引擎能明确知道两个页面互为翻译——靠 <link rel="alternate" hreflang> 声明,而不是靠猜。

静态站必须走 URL 前缀。如果像 SPA 那样用 localStorage 记当前语言,搜索引擎根本看不到另一个语言版本。

内容怎么存的

文章放在 frontend/content/blog/<语言>/<slug>.md,一个集合装下所有语言版本。

同一篇文章的不同语言版本文件名保持一致,这样系统就知道它们互为翻译。如果只有中文没有英文,英文地址会自动显示中文原文并标注「暂无英文版」。

const posts = await getCollection('blog')

就这样,没有额外的包。