从 Hexo 迁到 Astro 的对照表

如果你手上已经有一个用 Fluid 的 Hexo 站点,这张表大概能省下半天时间。

目录对照

Hexo Astro
source/_posts/*.md src/content/posts/*.md
source/_data/links.yml src/data/links.ts
themes/fluid/_config.yml src/config.ts
themes/fluid/layout/*.ejs src/pages/*.astro + src/components/*.astro
themes/fluid/languages/*.yml src/i18n.ts
hexo-generator-searchdb src/pages/searchindex.json.ts

front matter

大部分字段不用改:

yaml
---
title: 文章标题
date: 2026-10-08 09:40:00
tags: [迁移, Hexo]
categories: [实现]
index_img: /img/cover-1.svg
sticky: true
---

⚠️ 唯一要动的是 index_img 的写法。Astro 用驼峰,所以这里写成 indexImg;值仍然可以是根路径或完整 URL。

链接与路径

permalink 不用配。文章 URL 由文件位置决定:src/content/posts/hello-flux.md → /posts/hello-flux/,和 Hexo 默认的 :title 一致。

想让旧链接继续可用,把 trailingSlash: 'always' 留着(默认已开),/posts/hello/ 这种带尾斜杠的地址不会 404。

分页

Hexo 的 per_page 换成 SITE.pageSize。列表页第 1 页在 /,第 2 页起在 /page/N/——与原版的 page/2/ 完全一致。

搜索

原版靠 hexo-generator-searchdb 生成索引,这里由 src/pages/searchindex.json.ts 在构建期输出。前端匹配逻辑都写在 src/scripts/search.js 里,改权重很方便。

最后

迁移的本质不是「把 EJS 翻译成 Astro」,而是把「谁在什么时候算」想清楚:能在构建期算的,就不要留给浏览器。想通这一条,剩下的都是体力活。