> 本文撰寫於語言標籤改名之前，舊文中提到的 `/zh/...` 已於 2026-06-01 重新命名為 `/zh-Hans/...`，並新增 `/zh-Hant/...`。

## 文件伺服器 SEO 升級與重構

**2026-05-30**

本次更新分為兩條主線：內容渲染層在各頁面類型間完成統一，並在此基礎上完成了完整的 SEO 改造。

### 渲染重構

- **看板、列表、看板組、看板列表現共用同一張卡片渲染器**：內邊距、背景、陰影與圓角在各類型間完全一致；列表標題改用與看板一致的 `h5` 樣式。
- **每頁一個 `<h1>`**，位於麵包屑最後一項 —— 自然貼合頁面位置，無需額外視覺空間，並成為頁面標題的唯一來源。
- **全面 HTML 轉義**：所有使用者可控字串（名稱、描述、麵包屑文字、canonical URL、OG 圖片 URL）現均經過 `html_escape` 後再交給模板。形如 `Q&A: when to use "file"` 這類名稱不再破壞 HTML 屬性。
- **細節打磨**：卡片行內圖示與文字間距、列表與看板圓角統一、列表標題上下內邊距與看板卡片對齊。

### SEO 與多語言 URL

- **`/zh/...` 與 `/ja/...` 路徑**：每個頁面現可透過對應語言的獨立可爬取 URL 存取；原始裸 URL（例如 `/policies/`）繼續提供預設語言（英文）。
- **每頁 `<link rel="alternate" hreflang="...">`**：Google 可為不同語言訪客提供對應版本。
- **`canonical`、Open Graph、Twitter Card、JSON-LD BreadcrumbList** 標籤覆蓋每一頁。社群平台的連結預覽現可正確顯示標題、描述與圖片。
- **`/sitemap.xml`**：由後台任務每小時自動產生與重新整理，包含所有頁面及其 hreflang 備用 URL。
- **`/op/switch_lang/<code>`**：全新的語言切換端點，保持 URL 與 Cookie 同步。點擊「中文」會跳轉到 `/zh/<當前頁面>/`。

### 緣由

渲染重構清理了長期以來按頁面類型分別實作的重複程式碼；SEO 與多語言改造讓文件可被搜尋引擎收錄、可被分享：主站訪客保留語言偏好，同時搜尋引擎將每種語言索引為獨立、可爬取的頁面。
