这两天,我终于做了一件拖了很久的事:
把原来基于 WordPress 的博客,完整迁移到了 Astro,并通过 GitHub 自动部署到 Cloudflare Pages(免费)。

这不是一次“追新技术”的冲动升级,而更像一次回归——
把写博客这件事,从“维护系统”,重新拉回到“专心写字”。


一、为什么离开 WordPress?

WordPress 本身并不糟糕,它的问题在于:
当你只想写博客时,它给你的东西实在太多了。

  • 数据库

  • PHP

  • 插件

  • 主题

  • 更新

  • 安全

  • 兼容性

久而久之,你会发现:
写一篇文章之前,先要确认系统“还活着”。

而我想要的,其实很简单:

一个我随时能写、
不写也不会坏、
几年不碰也能马上接上的博客。

这正是我选择 Astro 的原因。


二、Astro 带来的变化

从 WordPress 切换到 Astro,本质上是一次思维方式的转变:

WordPressAstro
博客是“系统”博客是“项目”
内容在数据库里内容就是文件
后台管理Git 管理
点击发布git push

Astro 是一个静态站点生成器,没有数据库、没有后台,所有内容都以 Markdown 的形式存在本地。

博客不再是“托管在某个平台上的东西”,而是一个完全属于自己的代码仓库


三、迁移过程:没有自动化,反而更安心

我并没有使用 WordPress 导出工具去自动转换文章,原因很简单:

  • HTML 太杂

  • 样式太重

  • 清理成本反而更高

最终选择了最“笨”的方式,但也是最干净的方式:

  1. 打开旧的 WordPress 文章

  2. 复制正文内容

  3. 新建一个 .md 文件

  4. 手动整理格式和图片

  5. 补上文章的 frontmatter

例如:


---
title: "从 WordPress 到 Astro"
pubDate: 2025-01-05
description: "记录一次博客系统迁移"
tags: ["Blog", "Astro", "Cloudflare"]
---

慢一点,但每一篇都重新“过了一遍手”。


四、项目结构(迁移后)

迁移完成后,我的博客结构大致如下:


astro-blog/
├─ public/
│  └─ images/
│     └─ blog/
├─ src/
│  └─ content/
│     └─ blog/
│        ├─ first-post.md
│        └─ second-post.md
├─ astro.config.mjs
└─ package.json

几个非常容易踩坑的点

  • Markdown 文章统一放在 src/content/blog/

  • 图片放在 public/images/blog/

  • Markdown 中图片路径写 /images/blog/xxx.jpg

  • 不要写 public/images/...(构建后路径会错)


五、Git:博客的“发布按钮”

使用 Astro 之后,“发布博客”这件事变得非常直接:

写完文章 = 提交代码

这是我特意给未来的自己留的操作备忘


git status
git add .
git commit -m "add new blog post"
git push origin main

没有后台、没有按钮、没有“是否发布成功”的焦虑。

只要 push 成功,博客一定会更新。


六、Cloudflare Pages:真正的“无感部署”

当 GitHub 仓库和 Cloudflare Pages 绑定完成后,整个流程变成:

写文章 → 保存 → git push → 等几十秒 → 全球可访问

Cloudflare Pages 的核心配置也非常简单:

  • Framework:Astro

  • Build command:npm run build

  • Output directory:dist

配置一次,之后几乎不需要再碰。


七、关于域名和重定向的小插曲

迁移过程中,最花时间的反而不是代码,而是域名:

  • 根域名 vs www

  • Cloudflare DNS

  • Pages 自定义域

  • Astro 的 site 配置

这些配置叠加在一起,很容易出现“明明没写规则,却在自动跳转”的情况。

最终的经验是:

  • 明确一个主域名

  • 另一个只做跳转

  • Astro 的 astro.config.mjs 中把 site 写清楚

这一部分,比写文章还考验耐心


八、迁移完成之后

现在我的博客状态是:

  • 本地 Markdown 写作

  • Git 管理所有历史

  • Cloudflare 免费全球 CDN

  • 没有服务器、没有数据库、没有维护成本

最重要的是:

博客重新变成了一件“轻的事情”。

我不需要每天想着“系统要不要更新”,只需要在想写的时候,打开编辑器。


结语

如果你也正在被 WordPress 的复杂度消耗,或者只是想让博客重新变得简单一些,

那么 Astro + GitHub + Cloudflare Pages 可能是一个值得尝试的组合。

至少对我来说,这次迁移不是升级,而是一种把博客重新拿回来的感觉