我的网站全部是静态前端:没有数据库,没有登录,没有自己的服务器。
部署这件事,我同时用了 GitHub Pages 和 Cloudflare Pages。不是因为喜欢折腾,而是因为一开始就是这么做起来的,后来发现两者各有合适的位置。
如果你正在选静态托管,这篇写的是我实际踩过的差别,不是平台参数复读。
GitHub Pages 适合什么
GitHub Pages 最大的好处是简单:代码在 GitHub,开一个仓库,推上去就能发布。
它适合:
- 纯静态站点、文档、demo
- 代码和站点放在同一个仓库
- 想用 GitHub Actions 做自定义构建
- 希望自己的项目页和 GitHub 身份绑在一起
我的很多早期小站都放在 GitHub Pages;Hub 和这个博客后来放在 Cloudflare Pages。自定义域名在 GitHub Pages 上只需要在仓库里放一个 CNAME 文件,再去 DNS 加一条记录。
但它有几个需要提前知道的限制:
- 每个仓库的站点是独立的,多个站点要分别配置
- 构建有配额,复杂项目不适合把它当 CI 用
- 不能像服务器一样自定义响应头、做服务端重定向
- 自定义域名和 HTTPS 需要正确配置,否则会出现证书或跳转问题
- GitHub 的网络和 API 偶尔不稳定,部署失败时要准备备用路径
我遇到过最典型的情况,是 git push 一直失败,但 GitHub Contents API 还能用。最后是通过 API 把构建产物提交上去的。
这不是一个优雅的方案,但它说明了一件事:静态部署的“发布”不一定要绑死在 git push 上。
Cloudflare Pages 适合什么
Cloudflare Pages 的心智模型更像一个前端托管平台:
- 连接 GitHub 仓库,自动构建和发布
- 每次提交有独立预览地址
- 自带 CDN、HTTPS 和自定义域名
- 支持
_headers、_redirects这类静态配置 - 需要时可以加 Pages Functions
对于有构建步骤的项目,它比 GitHub Pages 顺手。尤其是预览部署:改一个页面,先看预览链接,再决定要不要合并。
我的「不烧心鉴定所」就放在 Cloudflare Pages。它更适合那种“构建产物和源站分开、需要一点边缘能力”的场景。
但 Cloudflare Pages 也不是没有成本:
- 构建配置要写对,根目录、输出目录、Node 版本都可能出问题
- 自定义域名涉及 DNS 和证书,第一次配置要耐心
- 平台能力多,容易被诱导去加不需要的 Functions
- 免费额度够用,但不要把“能加”当成“应该加”
一张实际选择表
| 需求 | 更合适的选择 |
|---|---|
| 纯静态、代码和站点同仓库 | GitHub Pages |
| 需要预览部署 | Cloudflare Pages |
| 需要自定义响应头/重定向 | Cloudflare Pages |
| 多个小站、想低成本维护 | 两者都行,按已有习惯 |
| 需要边缘函数 | Cloudflare Pages |
| 只想最快上线一个页面 | GitHub Pages |
这张表不是绝对的。真正的决定因素通常是:你以后会不会经常改它。
一个一年不动一次的静态页,放哪里都行。一个每周都要发文章、改样式、看预览的博客,构建体验就很重要。
我为什么同时用
一半是历史原因。
早期站点都在 GitHub Pages,迁移的成本大于收益。后来新项目需要预览和更灵活的静态配置,才开始用 Cloudflare Pages。
另一半是风险分散。
两个平台都免费,都支持自定义域名。把全部站点绑在一个平台上,遇到构建故障或账号问题时没有退路。分开之后,至少不会同时全挂。
但我不建议为了“分散风险”把同一个站点部署两份。那会带来重复内容、canonical 混乱和双倍维护成本。分散的是不同站点,不是同一个页面的多个副本。
如果今天从零做一个博客
我会选:
- Astro 做静态生成
- Markdown 写文章
- GitHub 存代码和版本
- Cloudflare Pages 自动构建和部署
- 自定义域名用子域名,比如
blog.example.com
原因不是 Cloudflare 一定比 GitHub Pages 快,而是博客会持续更新,预览部署和构建配置的体验更重要。
Astro 的好处是默认输出静态 HTML,客户端 JavaScript 很少;内容用 Markdown 管理,不需要数据库和后台。对一个人维护的博客来说,这比“功能齐全的 CMS”更可持续。
部署检查清单
不管选哪个平台,上线前至少检查这些:
site/base配置是否正确,静态资源路径有没有 404- 自定义域名是否完成 DNS 和 HTTPS
- 每个页面是否有自己的 canonical
sitemap.xml是否只包含正式页面robots.txt是否允许抓取,并指向 sitemap- 404 页面是否存在,旧链接是否会静默失败
ads.txt、统计脚本等根目录文件是否能访问- 移动端和慢网下是否还能用
几个容易踩的坑
绝对路径。 部署在子目录时,/assets/app.js 会指向域名根目录,而不是项目目录。Vite/Astro 项目要正确设置 base,或者用相对路径。
SPA 回退。 单页应用把所有路径都重写到 index.html,静态博客不需要这个。配错了会让 404 页面失效,也会让搜索引擎抓到重复内容。
缓存。 静态资源可以长缓存,HTML 不要长缓存。改完标题却发现线上还是旧页面,通常不是没部署,而是缓存。
canonical。 同一篇文章不要同时挂在两个域名或两个路径下。选一个主版本,其他版本重定向。
平台不是备份。 代码在 GitHub,构建产物在平台,文章源文件也要在本地或仓库里。不要把唯一副本放在某个后台编辑器里。
结论
GitHub Pages 和 Cloudflare Pages 都能把静态网站跑起来。真正要选的是工作流:
- 想少配置、和代码仓库绑定:GitHub Pages
- 想要预览、构建和边缘能力:Cloudflare Pages
- 博客这种持续更新的内容站:我会选 Cloudflare Pages + Astro
工具不是身份。能稳定发布、能持续维护、出问题时有备用路径,比“用了哪个平台”重要得多。
参考: