把静态站迁到 Workers Static Assets,不能只看页面能否打开。跳转、header、SPA 404、缓存命中和 workers.dev 索引边界都要验收。
- 01先读摘要,判断是否与你的场景相关。
- 02再看来源,保留继续查证的路径。
- 03最后看步骤、风险和可复用动作。
把静态站迁到 Workers Static Assets,不能只看首页能否打开。真正影响搜索、分享和转化的,是旧链接是否跳对、安全 header 是否生效、SPA 路由是否误返 404、缓存策略是否可控。
更新日期与来源依据
更新日期:2026-06-27。Cloudflare Workers Static Assets 文档说明,`_redirects` 和 `_headers` 文件应放在静态资产目录,Workers 会在静态资产响应上解析这些规则;redirects 会先于 headers 生效。公开来源限制为三条:Workers redirects、Workers headers、Static Assets overview。
这篇教程面向迁移和验收,不教绕过 Cloudflare 限制,也不替代生产变更审批。迁移前请先确认域名、构建产物、DNS 和回滚路径。
适用场景
- 你要把一个文档站、作品集、落地页或前端单页应用从 Cloudflare Pages、Netlify、Vercel 静态输出或普通对象存储迁到 Workers。
- 旧站已经有 `_redirects`、`_headers`、`robots.txt`、`sitemap.xml`、自定义 404 或 SPA fallback。
- 你希望迁移后保留旧 URL 权重,避免 workers.dev 预览域被索引,并给静态资源配置更明确的缓存和安全 header。
- 你没有复杂后端,只需要 Worker 在少数路径前置处理,其余静态文件由资产系统服务。
不适用场景
- 站点依赖服务端渲染、登录态、数据库写入或复杂 API,迁移重点应放在应用架构和绑定资源,不是 `_redirects` 文件。
- 站点有超过 2,100 条跳转规则,Cloudflare 文档建议改用 Bulk Redirects 等更适合大量规则的方案。
- 你需要按用户、地区、Cookie 或 A/B 实验动态决定 header,`_headers` 文件不适合这种逻辑,应放到 Worker 代码里。
准备材料
- 旧站 URL 清单:至少包含首页、栏目页、旧文章、带尾斜杠和不带尾斜杠的 URL、被外链引用的历史路径。
- 构建产物目录:例如 `dist/`、`public/` 或 `static/`,确认 `_redirects` 与 `_headers` 会被复制进去。
- 一份 404 与 SPA 路由决策:到底是未命中文件返回最近的 404 页面,还是返回 `index.html`。
- 上线前验证命令:`curl -I`、浏览器移动端检查、Search Console URL 检查、站点地图访问。
- 回滚方式:保留旧托管配置、DNS TTL、上一个部署版本和跳转规则备份。
操作步骤
- 第一步,盘点旧链接。把旧 sitemap、访问日志、Search Console 高点击页面和手动维护的旧链接放进一张表,标记“保留、301、410、合并到新页”。
- 第二步,写 `_redirects`。静态跳转放前面,动态匹配放后面。每条规则控制在文档限制内,避免把外部域名误写成站内路径。
- 第三步,写 `_headers`。给 `workers.dev` 预览域设置 `X-Robots-Tag: noindex`,给静态资源目录设置长期缓存,给应用页设置基础安全 header。
- 第四步,决定 not_found 行为。内容站和文档站优先用 404 页面;SPA 才考虑把未命中路径交给 `index.html`,并用真实不存在路径验收。
- 第五步,部署到预览域。不要先切主域名,先用预览 URL 测跳转、header、图片、字体、sitemap 和 robots。
- 第六步,切主域并做抽检。抽检至少覆盖旧 URL、动态匹配 URL、静态资源、404、移动端页面和站点地图。
可复制配置示例
以下示例适合小型内容站迁移,部署前请把域名和路径改成自己的。
# _redirects
/old-post-a /new-post-a 301
/docs/:slug /guides/:slug 301
/legacy/* /archive/:splat 301
# _headers
https://:version.:subdomain.workers.dev/*
X-Robots-Tag: noindex
/static/*
Cache-Control: public, max-age=31556952, immutable
/*
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
验收清单
- 旧站 Top 20 URL 返回 200 或预期的 301,且最终目标不是首页兜底。
- `curl -I https://preview-domain/path` 能看到预期 header;跳转路径不会继续应用 header 规则造成误判。
- 随机不存在路径返回预期 404 或 SPA fallback,Search Console 不会把大量错误路径当可索引内容。
- 静态资源有明确缓存策略,HTML 页面没有被设置成过长缓存。
- workers.dev 预览域不会被索引,主域 sitemap、robots、favicon、Open Graph 图片仍可访问。
常见坑与排错路径
- 坑一:`_redirects` 放在源码根目录,但构建时没有进入静态资产目录。排错时查看最终 `dist/` 是否真的包含该文件。
- 坑二:SPA fallback 把所有旧文章都返回首页,搜索引擎看到大量软 404。解决方式是对历史内容写明确 301 或真实 404。
- 坑三:给 `/*` 设置过长缓存,导致 HTML 更新后用户一直看到旧页面。静态资源可长缓存,HTML 建议保守。
- 坑四:只测主域,不测预览域。预览域如果被索引,后续会出现重复页面和品牌搜索干扰。
排错顺序:先看构建产物是否包含规则文件,再用 `curl -I` 看响应头,再用 `curl -L -I` 看跳转链,最后在浏览器里检查移动端布局和图片加载。不要在 DNS 已切换后才开始写跳转规则。
判断规则与维护建议
- 如果跳转规则少于 50 条,手写 `_redirects` 通常足够;如果接近文档限制或来自多个历史域名,改用批量跳转产品。
- 如果页面需要登录、Cookie 或地域判断,不要用 `_headers` 期待动态控制,放进 Worker 代码。
- 如果迁移后 7 天内 404 增长明显,先修旧 URL 映射,不要只提交 sitemap。
- 每次改版后复查四个指标:旧 URL 命中、404 趋势、HTML 缓存、预览域索引状态。