WordPress / GoDaddy 搬站|Cloudflare Pages Migration
這份 SOP 用在 WordPress / GoDaddy 舊站搬到 Cloudflare Pages 時,保住既有 SEO 訊號,避免 canonical 混亂、redirect loop、soft 404 或 GSC property 提交錯版本。
適用情境
- 舊站在 WordPress、GoDaddy Website Builder、cPanel 或其他傳統主機。
- 新站改由 Astro / Nuxt / static site 部署到 Cloudflare Pages。
- 希望保留既有 URL、搜尋排名、分享連結與 GSC 歷史資料。
最終目標
- 正式站只有一個 canonical host,例如
https://www.example.com。 - root / www / HTTP / HTTPS 全部收斂到正確版本。
- 舊 URL 若路徑不變,直接回 200,不額外 redirect。
- 不存在的 URL 回真 404,不回 homepage 200。
- sitemap、robots、canonical、
og:url全部指向 canonical host。
前置資料
- 舊站完整 URL 清單,可從 WordPress export、sitemap、GSC、Analytics 或 crawl 工具取得。
- 新站預計 canonical host,例如
https://www.example.com。 - Cloudflare DNS / Rules / Pages 權限。
- Google Search Console Domain property 與 canonical URL-prefix property 權限。
操作流程
1. 決定 canonical host
先決定正式版本是 root 還是 www。OriginalPhase 專案預設建議使用 www:
- canonical:
https://www.example.com - root:
https://example.com只做 301 到www - Pages preview domain:只用於驗收,不進 sitemap,不提交 GSC
決策完成後,所有 metadata、sitemap、redirect、GSC sitemap 提交都要跟著同一個 host。
2. 設定 root / www DNS
在 Cloudflare Pages custom domains 綁定正式 host。若 canonical 是 www:
wwwCNAME 應直接指向 Pages project 提供的目標,例如project-name.pages.dev。- 不要讓
wwwCNAME 指向 root domain,這很容易造成 root → www,www 又回 root 的 redirect loop。 - root domain 可以透過 Cloudflare redirect rule 301 到
https://www.example.com/$1。
3. 保留舊 URL
如果舊 URL path 不變,例如 /about/ 新站也有 /about/,不需要新增 redirect。讓它直接回 200 才是最乾淨的狀態。
只有 path 改變時才建立 301 map:
/old-service/→/services//blog/old-post/→/articles/old-post/
不要把全部舊 URL 都 redirect 到首頁,這會造成 soft-404 與使用者體驗問題。
4. 檢查 SEO metadata
上線前逐頁抽查:
<link rel="canonical">使用 canonical host。og:url使用 canonical host。- sitemap 內只出現 canonical host。
robots.txt的 Sitemap 指向 canonical sitemap。- 不要混入 Pages preview URL、root / www 混用或舊主機 URL。
5. 設定 GSC property
- Domain property:用來看整個網域,包含 root、www、HTTP、HTTPS。
- URL-prefix property:用來提交 canonical host 版本,例如
https://www.example.com/。
正式 sitemap 請提交 canonical host 版本,不要提交 root 版本或 preview domain。
6. 確認 unknown URL 是真 404
搬站後最常見的坑是 SPA fallback 或 Pages route 設定讓所有未知 URL 都回 homepage 200。未知 URL 應該回:
- HTTP status
404 - 清楚的 404 頁面內容
- 不要回首頁 HTML
若內容已永久刪除且沒有替代頁,使用 404 或 410;若有明確替代頁,才使用 301。
驗證指令
DNS 與 redirect 驗證
檢查 root / www 收斂
curl -I https://example.com/curl -I https://www.example.com/curl -I http://example.com/curl -I http://www.example.com/SEO metadata 驗證
檢查 sitemap 與 robots
curl -s https://www.example.com/robots.txtcurl -s https://www.example.com/sitemap.xml | headSoft 404 驗證
確認 unknown URL 是真 404
curl -I https://www.example.com/this-url-should-not-existAgent Prompt
Prompt
SEO Migration Audit
請針對這個 WordPress / GoDaddy → Cloudflare Pages 搬站專案做 SEO Migration Audit。
限制:
- 請先 audit,不要一開始直接修改程式。
- 請檢查 canonical host、root / www redirect、sitemap、robots.txt、canonical tag、og:url、GSC property 規劃與 unknown URL status。
- 如果舊 URL path 沒變,請不要建議不必要的 redirect。
- 如果 unknown URL 回 200 homepage HTML,請標成 P0 風險。
輸出格式:
- Canonical host 決策是否一致
- DNS / redirect 風險
- Sitemap / robots / metadata 檢查
- GSC property 建議
- 需要修復的項目,依 P0 / P1 / P2 排序
- 驗證指令
常見錯誤
wwwCNAME 指向 root,root 又 301 到www,造成 redirect loop。- sitemap 提交 root host,但 canonical 寫
www。 - 舊 URL 已存在於新站,卻又額外 301 到自己或首頁。
- unknown URL 回首頁 200,被 Google 判成 soft-404 或 duplicate URL。
完成標準
Checklist
搬站完成前檢查
- canonical host 已決定並全站一致。
-
wwwCNAME 直接指向 Pages project。 - root / HTTP / 非 canonical host 都 301 到 canonical host。
- sitemap、robots、canonical、
og:url都使用 canonical host。 - 舊 URL 不變時直接回 200。
- unknown URL 回真 404。
- GSC 已建立 Domain property 與 canonical URL-prefix property。