← 回到 Blog
Next.js約 3 分鐘閱讀

Next.js 內容站上線後健康檢查模板:10 分鐘確認 Route、SEO 與首頁狀態

分類Next.js網站經營SEO
標籤#Next.js#App Router#SEO 巡檢#Route 檢查#上線驗收
螢幕上的網站數據儀表板,象徵 Next.js 內容站上線後的 Route、SEO 與健康檢查流程

內容站上線後,最容易出現的問題不是完全壞掉,而是「看起來有更新,但某些入口其實還停在舊狀態」。例如首頁 Hero 已經顯示新文章,/blog 列表卻沒有更新;文章頁可以打開,/sitemap.xml 卻沒有包含新 slug;或是舊 WordPress ID-prefixed URL 沒有正確轉到 canonical route。

UCAMC 採用 Next.js App Router 與 Markdown 內容流程,文章 canonical URL 定義為 root-level /{slug}/blog 只作為文章列表頁。這份模板整理成 10 分鐘內可執行的健康檢查,適合每日發文、版面微調、部署後驗收與舊站搬移後的例行巡檢。

1. 先確認這次上線的範圍

不要一開始就打開瀏覽器亂點。先列出這次變更真正應該影響哪些地方:

檢查項目需要記錄
新文章 slug例如 nextjs-production-route-health-check-template
主要分類例如 Next.js、網站經營、SEO。
代表性舊網址只檢查 legacy ID-prefixed pattern,例如 /{id}-{slug}
會變動的頁面首頁、/blog、文章頁、分類頁、sitemap。
不該變動的地方canonical URL 策略、舊文章 slug、品牌 Logo 與機密設定。

這一步的目的,是避免把「新文章的 /blog/{slug} 404」誤判成錯誤。對 UCAMC 目前策略來說,新文章本來就不使用 /blog/{slug} 當 canonical route。

2. 用 production build 驗證,不只看 dev server

開發模式可以快速預覽,但它不能代表正式部署後的靜態產物與 redirect 行為。建議至少跑:

npm run lint
npm run build
npm run start -- --hostname 127.0.0.1 --port 3020

如果 lint 是 tsc --noEmit,而錯誤來自 stale .next/types 或 TypeScript incremental cache,先清掉 .next*.tsbuildinfo 後再重跑。不要在沒有證據時直接修改內容讀取邏輯。

3. Route 檢查清單

local production server 啟動後,用 curl -I 或瀏覽器依序確認:

  • / 回 200,首頁 Hero 與最新文章區能看見本次新內容。
  • /blog 回 200,列表第一張或前幾張卡片包含新文章。
  • /{slug} 回 200,文章標題、日期、分類與封面正常。
  • /category/{category} 回 200,分類頁包含該文章。
  • /robots.txt 回 200,沒有阻擋主要內容。
  • /sitemap.xml 回 200,包含 root-level /{slug}
  • /{id}-{slug} 回 301,Location 指向 /{slug}

這裡不需要為新文章檢查 /blog/{slug} redirect;若它不存在,符合目前 UCAMC URL 策略。

4. SEO metadata 不只看 title

文章頁能打開只是第一步。內容站還需要確認搜尋與社群分享資訊是否合理:

Metadata驗收方式
title / description是否具體說明文章價值,而不是只有品牌名。
canonical是否指向 /{slug}
Open Graph是否有 title、description、image。
Twitter Card有封面時應使用 large image 類型。
sitemap lastmod新文章日期與 modified 不應空白。

若文章有 coverImagefeaturedImage,要直接請求圖片 URL,確認回 200 且 content-type 是 image。Build 成功不代表外部圖片沒有失效。

5. 版面巡檢:首頁、列表、文章頁各看一次

Route 正常後,還要看頁面是否像正式品牌網站。建議至少檢查三個畫面:

  1. 首頁:Hero CTA 是否重複、最新文章是否與右側 featured card 重複、分類入口是否過度擁擠。
  2. Blog 列表:第一張卡片是否有清楚標題、摘要、分類與閱讀入口。
  3. 文章頁:封面比例、表格、程式碼區塊、GFM task list 與內部連結是否沒有水平溢出。

如果只是小型文案或 CSS 問題,可以直接修;如果牽涉品牌識別、整體架構或 canonical URL 策略,應保留現狀並列入人工決策。

6. 可複製的 10 分鐘驗收表

分鐘動作通過標準
0-2看 git status 與本次變更清單沒有覆蓋不明檔案。
2-4跑 lint / build指令成功,或已修復小型錯誤後成功。
4-6啟動 local production server//blog/{slug} 回 200。
6-8查 robots / sitemap / redirectsitemap 包含新 slug,legacy ID-prefixed URL 301 到 canonical。
8-10瀏覽器或截圖檢查主要頁面沒有破圖、裸露 placeholder URL、明顯水平溢出。

這份表格可以接在 Next.js 內容站每日 SEO 巡檢清單 後使用:前者偏日常 SEO 維護,這篇則偏每次部署後的 route 與 production freshness 驗證。

7. 部署後要分清楚「內容已推送」與「正式站已更新」

GitHub push 成功不一定代表正式網域已經服務新 HTML。若 origin/main 已經有新 commit,但 Vercel 或正式網域仍是舊頁面,應該把它報告成部署 freshness 邊界,而不是假裝 production 成功。

建議報告至少包含:

  • 新 commit hash。
  • local lint / build 結果。
  • local production route status。
  • production /{slug}/blog/sitemap.xml 的 status 與是否包含新 slug。
  • 若正式站仍 stale,列出需要 Dashboard redeploy、deploy hook 或 Vercel token 的後續處理。

長期經營內容站時,這種可追蹤的驗證證據比單純說「已更新」更重要。它能讓網站維護、SEO 與內容營運保持在同一個可回溯流程裡。