hreflang 設了等於沒設:一個中英雙語網站的六個設定錯誤檢討

hreflang 設了沒效,最常見的原因是缺少回連、語言代碼寫錯、網址不是標準網址,以及 x-default 指錯地方。逐頁確認每個語言版本都互相指向、也指向自己,代碼用正確的「語言加地區」格式,大部分問題就能排除。

案例背景:一個中英雙語網站的示範情境

以下是示範情境,公司與網站都是為了說明而設定的。

一家台灣的工業零件製造商,官網有繁體中文與英文兩個版本。中文放在網址根目錄,英文放在 /en/ 底下。外包工程師上線時加了 hreflang。三個月後,業務反映國外客戶用英文搜尋品牌名,出現的還是中文首頁。

我們把設定一頁一頁拆開來看,找到六個錯誤。它們不是同時出現在每一頁,而是散在不同的模板裡。下面依照發現的順序整理。

檢查的起點是業務那句抱怨。我們先在 Search Console 看英文品牌字的搜尋結果顯示的是哪一頁,再回頭打開那一頁和它對應的中文頁,比對兩邊的 head。從症狀倒推設定,比從設定一行一行往下讀快得多。

先說 hreflang 是什麼。它是告訴 Google「這一頁還有哪些語言或地區版本」的標記,讓搜尋結果顯示適合使用者的那個版本。它不會讓排名變高,也不會讓流量變多。它只負責把對的版本給對的人。

Google 對多語與多地區網站有專門的文件,可以從Google 搜尋中心的 SEO 入門指南往下找到國際化網站的章節。下面的檢討都以那份文件的規則為準。

錯誤一:中文頁指向英文頁,英文頁沒有指回來

中文首頁的 head 裡寫了 en 指向 /en/。英文首頁用的是另一套模板,工程師忘了加,結果成了單向標記。

Google 用雙向確認。A 頁說 B 是它的英文版,B 頁也要說 A 是它的中文版。沒有回連,這組標記可能被忽略。

修正方式:每一個語言版本都要列出整組所有版本,包含自己。兩種語言就是每頁兩行,三種語言就是每頁三行。「包含自己」這一點最容易漏,很多人以為只要列出其他語言就好。

這個錯誤的根源在流程。網站有幾套模板,就要有幾份檢查紀錄。只檢查首頁,等於只檢查了一套模板。

錯誤二:語言代碼寫成國家代碼

英文版寫了 hreflang=”en-UK”,中文版寫了 hreflang=”tw”。兩個都是錯的。

語言代碼用 ISO 639-1,地區代碼用 ISO 3166-1 Alpha 2。地區不能單獨出現,一定要接在語言後面。英國的地區代碼是 GB,不是 UK。台灣的繁體中文寫 zh-TW,單寫 tw 會被當成無效值。

寫法對或錯原因
zh-TW對語言 zh 加地區 TW
tw錯只有地區,沒有語言
en對只指定語言,不限地區
en-UK錯英國的地區代碼是 GB
en-GB對語言加上正確的地區代碼
zh_TW錯中間要用連字號,不是底線

底線這一項很常見。不少系統內部的語系設定寫成 zh_TW,工程師直接拿來輸出。輸出到 hreflang 時要轉成連字號。

另外要想清楚是否真的需要地區。如果英文版是給所有英語使用者看的,寫 en 就好,不必寫 en-US。地區代碼只在你真的為某個地區準備了不同內容時才加,例如不同的幣別、運費或聯絡窗口。

錯誤三:hreflang 指向的網址不是標準網址

中文頁的 hreflang 寫 http,英文頁寫 https。有幾頁指向帶著追蹤參數的網址。另一批產品頁,hreflang 指向的網址會再轉址到新的路徑。

hreflang 裡的網址要寫完整網址,包含 https 和網域。它應該是那個版本的標準網址:能直接回應、沒有轉址、沒有設成 noindex。指向轉址前的舊網址,或指向被 canonical 指去別處的網址,訊號就會互相打架。

canonical 也要一起看。每個語言版本的 canonical 應該指向自己。不要把英文版的 canonical 指到中文版。canonical 是在說「這頁的正本是誰」,英文版說正本是中文版,等於告訴 Google 英文版不必收錄,hreflang 再怎麼寫都救不回來。

canonical 設定失敗的其他情況,可以參考canonical 標籤被 Google 忽略的原因檢討。

錯誤四:x-default 指錯了地方

工程師把 x-default 指向英文首頁。但英文版其實只翻了一部分產品。結果是使用其他語言的訪客,被送到內容不完整的英文版。

x-default 的意思是:沒有符合的語言時,該給誰看哪一頁。它通常指向語言選擇頁,或是內容最完整、最能服務多數訪客的版本。它不是必填,但要用就要想清楚預設的人是誰。

以這個示範情境來說,國外詢價的客戶多半讀英文。最後我們把 x-default 留在英文首頁,但先把英文版的產品頁補齊。判斷的依據是內容完整度,不是哪個語言比較重要。

錯誤五:三種設定方式混用,彼此打架

hreflang 可以寫在 HTML 的 head、HTTP 標頭,或網站地圖裡。這個網站同時用了 head 和網站地圖。網站地圖是外掛自動產生的,裡面的語言代碼和 head 不一致。

一個網站選一種方式就好。中小企業用 WordPress 的話,多數多語外掛會在 head 自動輸出。選了它,就把網站地圖裡的 hreflang 關掉,避免兩邊各說各話。PDF 這類沒有 head 的檔案,才需要考慮 HTTP 標頭。

還要確認 hreflang 真的在 head 裡。有些主題或外掛會在 head 前段插入不屬於 head 的元素,解析時可能提早結束 head,後面的標記就落到 body,失去作用。只看「檢視原始碼」不夠,要用開發者工具看渲染後的結果。

錯誤六:沒翻完的頁面也放進 hreflang 組合

英文版有一批產品頁只翻了標題,內文還是中文。外掛照樣幫它們加上 en 的標記。

Google 判斷頁面語言靠內容,不是靠你標的代碼。標成英文、內文是中文的頁面,會讓整組標記失去可信度。這類頁面要嘛補完翻譯,要嘛先不放進組合,也可以暫時設成 noindex,等翻完再開放。

翻譯頁也要符合內容品質的要求。機器翻完沒有人看過的頁面,對讀者幫助有限,相關原則見建立有用內容的官方說明。

六個錯誤一次對照

把六個錯誤放在一起看,會發現它們的症狀很像,原因卻各不相同。下表可以當成排查時的對照表。

錯誤常見症狀修正方向
缺少回連某些語言版本在搜尋結果中從不出現每頁列出整組版本,包含自己
代碼錯誤標記被當成無效,等於沒設語言用 ISO 639-1,地區用 ISO 3166-1 Alpha 2
非標準網址Google 選了別的網址當正本寫完整網址,canonical 指向自己
x-default 指錯其他語言訪客進到內容不完整的頁面指向語言選擇頁或最完整的版本
設定方式混用不同工具讀到的語言關係不一致一個網站只選一種方式
未翻譯頁入組標成英文的頁面卻是中文內容補完翻譯或先移出組合

排查時建議照表由上往下。前三項影響的是整組標記能不能成立,後三項影響的是成立之後給對人看。

修正之後,怎麼驗證設定真的生效?

修正後我們做了三件事。

  • 每一套模板挑一頁,用瀏覽器開發者工具確認渲染後的 head 裡有完整一組 hreflang,包含自己。
  • 用站內爬蟲工具的免費版爬一次,匯出每頁的 hreflang,檢查回連是否成對、代碼是否有效、目標網址是否直接回應 200。
  • 在 Search Console 用網址檢查工具,看 Google 選定的標準網址是不是我們設定的那一頁。

搜尋結果不會立刻改變。Google 要重新爬取每一頁,才會確認這組關係。這段期間不要再改設定,不然很難判斷是哪一次修改起了作用。

如果你的網站同時有繁體、簡體或多個華語地區版本,規劃會更複雜。可以先讀中文網站跨境規格書:語言標記與簡繁分版的設定,把架構定好再動標記。

適用與不適用的情況

這篇的檢查方式,適用於已經有兩個以上語言或地區版本、而且各版本內容大致對應的網站。

不適用的情況有三種。網站只有一種語言,不需要 hreflang。只翻了介面、內容沒翻的網站,先處理內容比處理標記重要。各語言版本內容完全不同的網站,例如英文版只放公司簡介、中文版是完整的電商,它們不算互相對應的版本,不該硬湊成一組。

技術設定牽涉主題與外掛,動手前先備份,一次改一項。需要協助評估多語網站架構,可以參考冠誠數位行銷的服務項目,或到常見問題看看其他人問過什麼。

寫在最後的三件事

版權

本站每一個字、每一版面與案例紀錄,皆由冠誠數位行銷逐字撰寫、逐版校訂而成,原稿與時間戳紀錄完整保存。未經書面同意而複製、改寫、轉載或挪作他用者,本所將依著作權法追究,絕不寬貸。

隱私

您寫給我們的每一個字,只用來回覆您的委託,不轉售、不交換。全站以 HTTPS 加密傳輸,主機由 WP Engine 代管。

保密

委託期間與結束之後,您的企業名稱、數據與案情一律不對外揭露;正式合作前,雙方簽署保密協議。所有往來以文字全程紀錄,說過的話都有據可查。