跳至主內容
打造多語版的 Cloudflare 錯誤頁
  1. 文章/

打造多語版的 Cloudflare 錯誤頁

··約 3 分鐘· loading · ·
Zakk
作者
Zakk
在澳洲學習商科與 Paper 遠距離戀愛,養著 馬鈴薯 及 脆薯餅,撰寫 Linux 筆記與生活雜記。
本頁導覽

為什麼要做 error.zakk.au?
#

Cloudflare 預設錯誤頁與網站風格落差很大,對訪客來說體驗被打斷。我希望有一個輕量代替方案,可以:

  • 自動偵測淺色/深色模式,也允許使用者手動切換
  • 自動偵測語系(英文、繁體中文、簡體中文),並提供手動切換
  • 顯示 Ray ID 與預填資訊的支援信件連結,縮短排錯時間
  • 完全托管在 Cloudflare Pages,只要 git push 就能更新

於是就有了 Zakkaus/cf-pages 這個專案,以及正式部署在 error.zakk.au 的版本。

介面亮點搶先看
#

Cloudflare 錯誤頁首頁(淺色模式)
Cloudflare 錯誤頁首頁(深色模式)
淺色首頁維持柔和配色與分段資訊,語系與模式切換按鈕並列,一眼掌握。深色模式鎖定品牌藍重點,同時提升對比,夜間也能舒適瀏覽。
Cloudflare 管理式挑戰畫面(淺色模式)
Cloudflare 管理式挑戰畫面(深色模式)
挑戰頁清楚說明下一步,並把求助與狀態頁連結放在同一視線範圍。深色版本維持相同層級與 CTA 強度,品牌視覺與易讀性同步在線。

儲存庫包含哪些模板?
#

倉庫收錄所有 Cloudflare 常見錯誤頁,並以 Tailwind CSS 重寫版面:

模板使用情境
cf-1000.htmlCloudflare 1000 系列設定錯誤
cf-500.html來源端 5xx 錯誤
cf-waf-block.htmlWAF(403)封鎖
cf-ip-block.htmlIP / 國別封鎖
cf-ip-challenge.htmlcf-attack.html管理解鎖/I'm Under Attack Mode
cf-rate-limit.html429 流量限制
offline.htmlAlways Online™ 離線提示

每個頁面都會注入品牌視覺(Logo、3D 無尾熊)、即時 Ray ID,以及一個指向自助排錯的行動按鈕。搭配緊湊卡片式設計,訪客能快速找到下一步行動。

多語文案與自動切換
#

所有字串集中在 lang.js

  1. 讀取 navigator.language
  2. 對應 enzh-Hantzh-Hans
  3. 若無對應語系就使用預設語言

使用者仍可手動改語系,結果會存進 localStorage,下次進站自動套用。

設計系統與樣式
#

  • Tailwind CSS 流程:在 input.css 撰寫樣式,透過 npm run build(或 pnpm run build)輸出壓縮後的 output.css,並讓 PurgeCSS 幫忙刪除未使用類別。
  • 日夜模式一致assets/screenshots/*.webp 同步展示淺色與深色,確保符合 WCAG 對比要求。
  • 共用元件:按鈕、提示框、版面結構與本站 Blowfish 主題相近,讓使用者在各站之間切換不違和。
  • 品牌細節延伸:錯誤插畫、動態背景與 CTA 配色皆採一致 Token,維持完整敘事。

部署到 Cloudflare Pages
#

  1. 將儲存庫串接到 Pages,建置指令維持 npm run build
  2. Framework preset 選擇 None,Pages 會在部署前編譯 Tailwind。
  3. 輸出目錄維持 /,Cloudflare 會直接對應根目錄的 HTML 模板。
  4. 在 Custom Error Pages 指定 error.zakk.au,也能延伸至 help.zakk.au 等子站使用。

每一次 commit 都會有預覽環境,可以先確認結果再於 Cloudflare 後台套用。

Ray ID 的支援流程
#

所有模板底部都有「Need help?」區塊,會:

  • 即時顯示觸發錯誤的 Ray ID
  • 提供預填信件連結,將 Ray ID、時間戳與客戶端 IP 一次帶給支援信箱(當 Cloudflare 注入資料後)
  • 附上狀態頁次連結,若問題出在我端可以即時公告

如此一來,第一次聯繫就能拿到完整資訊,減少來回詢問。

想自己試試?
#

  • 查看程式碼與截圖:Zakkaus/cf-pages
  • 直接觸發範例頁(例如離線通知):error.zakk.au/offline.html
  • 需要換成自己品牌?替換倉庫中的素材、調整 lang.js 文案,再部署到你的 Cloudflare Pages 專案即可。

這套錯誤頁讓「遇到 Cloudflare 訊息」不再突兀,也能在關鍵時刻提供語言一致、資訊充足的支援流程。

延伸閱讀

時間軸

··約 2 分鐘· loading

關於我

··約 3 分鐘· loading