hreflang 產生器是一個瀏覽器端的工具,它會將每個本地化頁面的一列(以語系代碼加上完整的 URL 撰寫)轉換成一組完整、經 HTML 跳脫的 rel=alternate link 元素,可直接貼入語系群集中每個頁面的 head 中。它不會自創標籤、抓取遠端頁面、或呼叫伺服器;列會以字面的分隔符號 | 切割,語系標籤會被正規化為標準大小寫,URL 會在產生輸出前先檢查其格式。最終結果是每一列對應一個 link 元素,格式化為可直接插入 HTML。由於 Google 將自我連結和回返連結視為必要訊號,產生器會強制至少兩列,並以不分大小寫的方式拒絕重複的語系值,因此一組不完整的標籤無法被悄悄複製到一個會單向廣播宣告的頁面中。Hreflang 產生器遵循相同的規範:每一列輸入都會成為一個跳脫後的 alternate link,整個相同的區塊會用於群集中的每個頁面,且 x-default 僅作為明確的後備列被接受。

hreflang 產生器實際上做些什麼
hreflang 產生器介於你的本地化 URL 清單與群集中每個頁面的 head 區段之間。你以純文字描述這些關係,產生器就會輸出搜尋引擎會讀取的標記。它不是翻譯工具、內容偵測器、或排名提升工具;它是一個嚴謹的格式化工具,能捕捉那些會導致 hreflang 被悄悄忽略的錯誤。
對於每一列,產生器預期一個格式保守的語系標籤——一個兩個字母的語言、一個選擇性的四個字母的腳本、以及一個選擇性的兩個字母的區域(例如 fr、zh-Hant、en-US、fr-CA)——並搭配一個以 http:// 或 https:// 開頭、包含主機名稱、且不帶認證資訊和片段的完整 URL。每一列以一行 locale | URL 的格式撰寫。產生器會以恰好一個分隔符號切割、使用內建的標準語系函式正規化語系大小寫(因此 en-us 會變成 en-US,zh-hant 會變成 zh-Hant)、以瀏覽器式的正規化驗證 URL,並為每一列輸出一個 rel="alternate" 元素。URL 中的 & 符號以及其他會影響屬性的字元都會經過 HTML 跳脫,使輸出可直接貼入標記,無需再編輯。
為什麼嚴格驗證很重要
產生器的每一次拒絕,都能避免在實際網站上發生一整類的失敗。相對式和相對式無通訊協議的 URL 會被拒絕,因為搜尋引擎會根據明確的基準解析 hreflang,而缺少主機名稱常會產生無法對應回你自己頁面的宣告。URL 片段會被移除或拒絕,因為它們會在不更動資源的情境下變更識別符號,違反一個語系對應一個 URL 的規則。內嵌於 URL 的認證資訊會被拒絕,因為它們會將存取資訊暴露在公開的標記中,並破壞 alternate 宣告背後的信任假設。
重複的語系值在正規化之後會以不分大小寫的方式被拒絕,因為兩列宣告相同的 hreflang,無論是被忽略或造成哪個頁面才是標準 alternate 的歧義,都是不允許的。只有一列的集合會直接被拒絕:Google 將自我連結和回返連結記載為必要訊號,否則來自其他網站的單向宣告可能會單方面地將某個頁面宣稱為其 alternate。
x-default 標記會被明確處理,因為它並非一種語言;它是用來識別使用者設定未符合任何所列 alternate 時的後備頁面,通常是國家選擇器或通用的登陸頁,且一組中只允許一個 x-default 列。產生器會強制其位置和數量,但不會評判 x-default 是否為你的受眾的最佳選擇;這個判斷仍留給你。
此工具僅驗證標籤的格式與大小寫——它不會參考特定搜尋引擎目前所支援的完整 ISO 語言與國家註冊資料庫。一個結構上整齊的代碼仍可能不被支援或不適合你的受眾。在部署前,請根據 Google 目前的說明文件以及實際的內容受眾,逐一驗證每個預定的語言和區域,正如 Google 搜尋中心本地化版本指南中所強調的。
| 輸入格式 | 範例 | 結果 | 原因 |
|---|---|---|---|
| 標準語言-區域 | en-US | https://example.com/en/ | 接受 | 附帶有效語系的完整 URL |
| 小寫標準化 | en-us | https://example.com/en/ | 接受為 en-US | 套用標準大小寫 |
| 腳本子標籤 | zh-hant | https://example.com/zh-tw/ | 接受為 zh-Hant | 腳本子標籤可區隔書寫系統 |
| 單一 x-default 列 | x-default | https://example.com/ | 接受(僅一個) | 後備標記,強制數量限制 |
| 相對式無通訊協議的 URL | fr | //example.com/fr/ | 拒絕 | 缺少 http 或 https |
| 相對式 URL | en | /en/page | 拒絕 | 未提供主機名稱 |
| URL 中含認證資訊 | en-US | https://user:[email protected]/en/ | 拒絕 | 不允許內嵌認證資訊 |
| 含片段的 URL | en-US | https://example.com/en/#section | 拒絕 | 片段無法識別本地化 alternate |
| 重複的語系 | 正規化後有兩個 en-US 列 | 拒絕 | 重複的 hreflang 會破壞 alternate 的唯一性 |
| 僅一列的集合 | 總共只有一列 | 拒絕 | 自我連結與回返連結至少需要兩列 |
如何使用產生器建立標籤集合
- 將每個本地化頁面列為 locale | 完整 URL,包含你正在編輯的當前頁面和一個選擇性的 x-default 後備。每一個 alternate 都必須出現,不能只列出你記得的那些。
- 產生完整的跳脫 link 區塊,並根據目前支援的語言和區域指南逐一驗證每個語系。產生器會檢查標籤格式;它不會確認 Google 目前是否收錄你所輸入的每個代碼。
- 在每個 alternate 頁面的 head 中安裝相同的完整集合,然後爬梳實際頁面以確認自我與互惠連結。每個頁面都必須承載相同的完整區塊,包括指向自身的連結。
產生器最多接受 100 列,且至少需要兩列。每一行必須包含恰好一個分隔符號。對格式錯誤的輸入直接拒絕整組集合,能防止部分輸出被複製時悄悄漏掉某個國家或語言版本——而這正是 hreflang 稽核人員所警告的失敗模式。
產生標籤的結構解析
輸出為純 HTML,每一列一行,每個屬性都會跳脫。一個四頁群集的典型區塊——美國英文、法文、德文,加上 x-default——格式如下:
<link rel="alternate" hreflang="en-US" href="https://example.com/en/page" /> <link rel="alternate" hreflang="fr" href="https://example.com/fr/page" /> <link rel="alternate" hreflang="de" href="https://example.com/de/page" /> <link rel="alternate" hreflang="x-default" href="https://example.com/" />
群集中的每個頁面——英文頁、法文頁、德文頁,以及 x-default 登陸頁——都會收到相同的四行。英文頁會包含一個指向自身 URL、hreflang 為 "en-US" 的自我連結;法文頁也會包含指向其自身 URL 的相同自我連結。一致性正是重點:搜尋引擎預期每個 alternate 都能宣告相同的完整集合,而不是為某個頁面量身打造的局部列表。
八個對齊標準的測試案例涵蓋了通用語言、區域大小寫、德文與法文的區域、簡體與繁體中文的腳本標籤、語言-腳本-區域的組合,以及 x-default。額外的測試會斷言精確的 HTML 跳脫,並拒絕重複、相對式 URL、片段、認證資訊、以及不完整的單列集合。知道這些情境已被涵蓋,便能讓你了解哪些輸入格式無需額外審查即可信賴。
部署與驗證標籤
產生器僅負責產生標記;部署與驗證是各自獨立的紀律。首先,選擇單一的實作方式——HTML head 元素、HTTP 標頭、或 XML sitemap 項目——並堅持下去。Google 將這三種方式視為等價,當其中一組被更新而其他組沒有同步時,混合使用便會導致漂移。Hreflang 產生器專門產生 HTML head 元素,因此如果你的發布系統能在各模板間同步 head 標記,那便是最簡單的方式。
其次,部署完成後,從每個語系群集中各爬梳一個樣本,並以機械化方式比對 hreflang 集合。每個 alternate 都必須回傳有用的 200 頁面、必須承載相同的完整區塊、且必須將其自身 URL 列為其中一個 hreflang 項目。這是產生器無法為你執行的驗證步驟:它能交給你一個相同的區塊,但只有爬蟲能確認每個 alternate 確實在提供該區塊。
第三,當某個語系被新增、移除、重導向、或移至新的標準 URL 時,請重新產生集合、在每個受影響的頁面上重新部署相同的區塊,並再次爬梳。群集中只要有一個過時的頁面,其代價就是當搜尋引擎發現不一致的宣告時,整個群集可能會被忽略。如需更廣泛的入門指引,了解 hreflang 如何融入國際 SEO 架構,請參閱 什麼是 SEO 中的 hreflang 以及如何實作,並將自我與回返連結的規則與 Google 的 本地化版本說明文件 進行交叉比對。
最後,請記住 hreflang 並不會翻譯內容、偵測語言、或保證搜尋結果。這些標籤描述的是一組實質等價的本地化頁面之間的關係;它們無法替代翻譯過的主要內容或一套連貫的國際架構。產生器強制執行標籤本身的規範;周邊的內容決策仍取決於你。
如需更深入的探討,請參閱 像 SQL 資料表一樣 JOIN 關鍵字清單:建立每一組配對。