这个博客用 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')
就这样,没有额外的包。