Hreflang 怎麼做:多語言網站配置、錯誤與排查(2026)
Hreflang 不是多語言排名開關,而是告訴 Google 不同語言或地區版本之間的對應關係。本文講清什麼時候需要配 hreflang、三種實現怎麼選,以及常見錯誤怎麼排查。
Hreflang 不是多語言排名開關,而是告訴 Google 不同語言或地區版本之間的對應關係。本文講清什麼時候需要配 hreflang、三種實現怎麼選,以及常見錯誤怎麼排查。
很多人一提多語言 SEO,先想到的就是 hreflang。這個方向沒錯,但也最容易做偏。因為 hreflang 不是“裝了就能讓不同國家都排好”,它只是告訴 Google:這些 URL 是同一內容的不同語言或地區版本,請儘量把合適的版本給合適的人。
如果站點本身的語言版本沒拆清、URL 結構混亂、頁面主要內容並沒有真的翻譯,只是在頁頭頁尾換了語言,那 hreflang 寫得再工整,效果也很有限。Google 在 Managing multi-regional and multilingual sites 和 Localized versions of your pages 裡其實講得很清楚:先把不同語言版本做成不同 URL,再用 hreflang 或 sitemap 告訴 Google 這些頁面之間的關係。
這篇文章重點放在一件事上:hreflang 到底該怎麼做,什麼時候該上,什麼時候沒必要上,HTML、HTTP Header、Sitemap 三種實現怎麼選,常見錯誤怎麼排查。更適合外貿獨立站、多語言企業站和已經開始做國際 SEO 的團隊看。
很多團隊把 hreflang 當成一種“讓 Google 識別頁面語言”的方法。這個理解不對。Google 官方寫得很明白:Google 不靠 hreflang,也不靠 HTML 的 `lang` 屬性來判斷頁面語言,而是主要看頁面的可見內容。
這意味著兩件事:
| 很多人以為 hreflang 是 | 它實際更像什麼 | 真正影響什麼 |
|---|---|---|
| 語言識別工具 | 版本對映訊號 | 正確語言 / 地區版本的展示 |
| 多語言排名開關 | 多版本說明關係 | 減少錯頁、串頁、版本混亂 |
| 國際 SEO 的全部 | 國際 SEO 裡的一個部件 | 配合 URL 結構、翻譯質量、內鏈一起生效 |
不是所有站都必須急著配 hreflang。更準確的判斷方式是看:你的網站是不是已經存在多套語言或地區頁面,而且這些頁面應該互相對應。
下面這些場景,通常值得配:
下面這些場景,反而不一定要急著上:
換句話說,hreflang 更適合“多版本已經存在,但版本關係沒有講清”的站,而不適合“站點基礎還沒搭好”的站。
站內已經有 國際SEO完整指南 這類更上層的主題。那篇更像總論,講的是多語言市場、URL 結構、國家站和內容佈局。hreflang 這篇文章要更聚焦。
你可以把它們理解成兩層:
所以很多專案裡,真正的順序不該是“先寫 hreflang 程式碼”,而應該是:
Google 支援三種給出語言 / 地區版本關係的方法:
這裡有個很重要的點,很多團隊忽略了。Google 官方明確說,這三種方法從搜尋的角度看是等價的。你不需要三個一起上。三個一起做,管理成本往往更高,錯一處反而更麻煩。
| 實現方式 | 更適合什麼站 | 優點 | 風險點 |
|---|---|---|---|
| HTML | 常規網頁站點 | 直觀,好理解 | 模板一錯,整站一起錯 |
| HTTP Header | PDF 等非 HTML 檔案 | 適合非頁面資源 | 運維和伺服器配置要求更高 |
| Sitemap | 頁面多、模板複雜的站 | 集中管理,批次維護更方便 | 生成邏輯一旦有誤,錯誤也會批次放大 |
對多數外貿獨立站、WordPress 企業站來說,如果頁面量不算太大,HTML 或 Sitemap 就夠了。PDF 白皮書、產品手冊這類非 HTML 檔案,才更適合考慮 HTTP Header。
很多 hreflang 專案之所以越做越亂,不是程式碼不會寫,而是團隊從一開始就沒有一張乾淨的“版本對映表”。沒有這張表,開發、SEO、內容、翻譯團隊看到的都不是同一套頁面關係。
更合適的做法,是在上線前先整理一張最簡單的對應表,至少包含這些欄位:
| 頁面型別 | 英文版 | 德文版 | 法文版 | 是否進 hreflang |
|---|---|---|---|---|
| 服務頁 | 有 | 有 | 有 | 是 |
| 產品頁 | 有 | 有 | 無 | 只進已存在版本 |
| 部落格頁 | 有 | 僅部分有 | 無 | 按成套頁面單獨處理 |
這一步聽起來笨,但非常值錢。因為它能提前暴露兩個最常見的問題:哪些頁面其實沒有成套版本,哪些頁面雖然有 URL,但內容根本還沒翻完。很多 hreflang 報錯,本質上不是“標籤錯了”,而是被錯誤地拉進了同一版本集合。
Google 官方建議,不同語言版本最好有不同 URL,而不是靠 cookie、瀏覽器語言、或者 JavaScript 動態切換同一個 URL 的內容。原因也不復雜:如果只有一個 URL,Google 很難穩定抓到全部變化版本。
這一點對外貿站特別重要。很多站看起來有中英切換,實際是同一個 URL 根據瀏覽器或地區切換內容。使用者看著好像沒問題,但對搜尋引擎來說,版本邊界非常模糊。
更穩妥的做法通常是下面幾種:
至於哪種最好,不是 hreflang 決定的,而是你的運維和市場策略決定的。hreflang 只負責把這些已經存在的版本說明白。
Google 還特別提到一種情況:如果頁面主要內容沒有翻譯,只是導航、頁尾、按鈕這些模板文字變了,這類頁面會帶來很差的使用者體驗。很多站就是這樣,正文仍是英文,只把選單換成了法語、西語。
這時你即使配了 hreflang,也很難說這是“高質量的法語頁”或“真正的西語頁”。更現實的結果通常是:
所以做 hreflang 之前,建議先問一句:這些版本頁,是真的本地化頁面,還是隻有外殼翻了?這個判斷,比程式碼本身更關鍵。
hreflang 的值不是隨便寫的。Google 官方支援的是語言程式碼,加可選的地區程式碼。語言一般用 ISO 639-1,地區一般用 ISO 3166-1 Alpha 2。
最容易出錯的點有三個:
| 寫法 | 是否合理 | 說明 |
|---|---|---|
| `en` | 可以 | 泛英語版本 |
| `en-us` | 可以 | 英語,美國 |
| `de-be` | 可以 | 德語,比利時 |
| `be` | 不對 | 這裡會被理解成語言程式碼,不是國家 |
| `uk` | 不推薦 | Google 官方示例裡用的是 `gb` |
這類問題最麻煩的地方在於,頁面表面看不出來,程式碼也“像是寫了”,但 Google 可能直接忽略。
`x-default` 是 hreflang 裡一個很實用但經常被亂用的值。它的作用不是“給預設市場排名”,而是告訴 Google:如果使用者語言設定和現有版本都不匹配,把他送到這個應急頁面。
最適合 `x-default` 的場景通常是:
如果你本身沒有選擇頁,也沒有全球入口頁,只是想隨便挑一個英文頁當預設頁,也不是不能做,但要想清楚:這個版本是不是能承接那些“不在現有語言列表裡”的使用者。
更實際的經驗是,`x-default` 不是必加項。只有你真的存在一個合理的應急入口,它才有意義。
如果你做的是普通頁面,最常見也最直觀的做法,是把 hreflang 標籤到 HTML 的 `
` 裡。Google 官方要求也很明確:要放在一個結構正確的 `` 段裡,而且每個版本都要列出全部版本,包括自己。一個最基礎的思路大概是這樣:
<link rel="alternate" hreflang="en" href="https://example.com/en/product/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/product/" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/product/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/global/product/" />
要注意三點:
如果你的網站是 WordPress、多語言外掛、或模板站,這類邏輯通常會落在主題頭部、SEO 外掛、或者語言外掛的輸出層。這裡就要特別小心模板級錯誤。因為一旦邏輯寫錯,不是一頁錯,是整類頁面一起錯。你可以把它和 技術SEO指南 裡的模板級排查思路一起看。
很多企業站會忽略一個場景:白皮書、規格書、產品手冊、報價 PDF 也可能有不同語言版本。PDF 不能像普通 HTML 頁面那樣在 `
` 裡寫標籤,這時 HTTP Header 方式就有價值了。Google 官方也專門提到這一點。你可以在 GET 響應頭裡返回類似這樣的 `Link` 關係:
Link: <https://example.com/file-en.pdf>; rel="alternate"; hreflang="en",
<https://example.com/file-de.pdf>; rel="alternate"; hreflang="de",
<https://example.com/file-fr.pdf>; rel="alternate"; hreflang="fr"
這種方式不一定適合所有團隊,因為它往往要改伺服器、CDN、或應用層響應邏輯。但如果你的多語言資源裡 PDF 很多,這個方法值得知道。
如果一個站點有很多語言版本、很多目錄、很多模板,讓每個頁面頭部都穩定輸出 hreflang,維護成本可能不低。這時用 XML Sitemap 集中管理,會更容易控制。
Google 官方支援在 sitemap 裡給每個 URL 加上一組 `
這種方式更適合:
但它也有明顯風險:一旦生成邏輯錯了,錯的不是一個頁面,而是整批頁面。所以 sitemap 方式省的是單頁維護,不是省校驗。
Google 官方反覆強調一個點:如果頁面 A 指向頁面 B,但頁面 B 沒有回指頁面 A,這組標註可能會被忽略。這個規則非常關鍵。
這條規則到底有多容易踩?看一組多語言站的真實體檢資料就知道了——hreflang 的坑,大多數站都在踩:
來源:SearchEngineLand:31% 國際站含 hreflang 錯誤、Ahrefs hreflang 研究
這幾個數字合起來說明一件最該記住的事:hreflang 是”全有或全無”的機制。它不像別的最佳化項能”做了七成拿七成分”——只要集合裡有一個 URL 返回 301/404,或者有一頁忘了回指,Google 就可能把這一整組標註當作無效直接丟掉,你前面寫的全白費。所以對 hreflang 來說,上線後的校驗比當初怎麼寫更重要,這也是為什麼下面要專門花篇幅講怎麼驗證。
很多多語言站的問題就出在這裡。比如英文頁列出了德文頁、法文頁,但德文頁那邊只列了自己和法文,沒有回到英文。或者新加的西語目錄,只在西語頁內部互相連,沒有補回主英文版本。
這種問題為什麼常見?因為團隊往往是分批擴語言站的。老版本先上線,新版本後補,結果 hreflang 集合沒有同步補齊。Google 官方甚至專門提到,如果你沒法維護所有語言之間的完整雙向集合,至少要優先保證新語言頁和原始主語言頁之間的雙向關係。
很多站點覺得使用者體驗更好,就在首頁或全站做強制跳轉。比如識別到瀏覽器是德語,就自動把使用者推去 `/de/`;識別到 IP 在美國,就直接跳去美區版本。對真實使用者來說,有時確實省一步,但對搜尋引擎抓取來說,這類策略經常出問題。
Google 官方的態度也很明確:
更穩妥的做法通常是:
這一點和 網站改版與遷移排查 的思路很像。搜尋引擎最怕的不是你做了選擇,而是你把所有路徑都擋住了。
多語言站裡另一個常見錯誤,是把 canonical 和 hreflang 攪在一起。比如德文頁存在,但 canonical 卻統一指向英文主頁面;同時你又在頭部寫了 `hreflang=”de”`。這就是典型的自相矛盾。
更穩妥的原則通常是:
一邊告訴 Google “這是獨立德語版本”,一邊又告訴 Google “真正該認的是英文主頁”,訊號自然會打架。多語言站的規範化問題,最好和 SEO審計 裡的 canonical 排查一起看。
很多企業問的是“hreflang 應該寫目錄、子域還是獨立域名?”這個問題本身就有點混了。hreflang 不決定 URL 結構,它只適配你已經選好的結構。
| 結構型別 | 示例 | 常見適用場景 | 備註 |
|---|---|---|---|
| 目錄 | `example.com/de/` | 多數企業站、外貿獨立站 | 管理集中,實施門檻低 |
| 子域 | `de.example.com` | 多團隊、多區域運維 | 邊界更清晰,但維護略複雜 |
| 國家域名 | `example.de` | 強本地化市場 | 品牌和基礎設施成本更高 |
站點結構還沒定清時,先看整體國際 SEO 策略,再決定 hreflang 怎麼掛。不要倒過來。
對大多數實際專案來說,最需要的不是“知道語法”,而是知道怎麼排。尤其是 WordPress、多語言外掛、定製主題、企業站 CMS 這類環境,問題通常不是單頁,而是輸出邏輯。
更實用的排查順序,我建議這樣看:
如果你一上來只盯程式碼片段,反而會漏掉真正更底層的問題。
hreflang 很容易出現一種假象:原始碼裡看得到標籤,於是團隊就預設“已經做好了”。這一步遠遠不夠。更靠譜的驗證,至少要做三層。
Google 的 URL Inspection tool 和 Performance report 雖然不會替你直接“修好” hreflang,但很適合確認:目標 URL 有沒有被正常抓取、索引,以及不同語言目錄有沒有開始更穩定地承接自己的頁面。
如果你用的是 sitemap 方式,還要順手看 Build and submit a sitemap 相關要求,確認 sitemap 本身沒有生成錯誤、路徑錯誤、或更新延遲。
更實際的抽樣方法可以這樣做:
只要這些樣本頁裡已經發現成片問題,比如新語言頁都沒有回指、法文頁 canonical 全指向英文、PDF 版本沒返回對應 Header,那就不要再逐頁手看了。先修生成邏輯,效率更高。
如果你準備上線一套多語言版本,可以先按這份清單過一輪:
並不是每個國際站當前最該做的事都是 hreflang。很多專案裡,真正更急的是這些問題:
如果基礎問題還沒穩,hreflang 往往不是最先帶來結果的動作。它更像“關係修正器”,不是“根本起量器”。這也是為什麼它更適合放在 整站審計 或 國際SEO策略 的框架裡看,而不是單獨神化。
hreflang 生效之後,不一定會給你一種“流量立刻暴漲”的感受。它更常見的價值,是減少錯頁、減少語言版本串位,讓不同市場的頁面更穩定地各自承接自己的搜尋需求。
更實際的觀察角度有這些:
如果上線後還是經常出現英文市場進德文頁、法文使用者進英文頁,那就說明版本對映、URL 可訪問性、頁面內容本身,至少還有一層沒做好。
如果你們正在做多語言或多地區站點,這篇文章最好和 國際 SEO、Technical SEO、網站遷移 SEO、SEO 審計 和 谷歌 SEO 最佳化服務 放在一起看。hreflang 本身只是版本對映,真正決定效果的還是 URL 結構、版本完整度和整站國際化策略。
如果這兩個版本是相互對應的頁面,通常值得加。頁面不多時實現成本並不高,而且能減少版本錯配。
不是。`lang` 更偏頁面語言屬性;hreflang 更偏不同版本之間的對映關係。Google 官方也明確說,不靠這兩個值本身來判斷頁面語言,而是主要看可見內容。
不用。Google 官方說三種方式從搜尋角度看是等價的。一般選一種最容易長期維護的就夠了。
因為 hreflang 不是唯一訊號。頁面內容質量、URL 可訪問性、canonical、跳轉策略、語言版本完整度,都會一起影響最終結果。
如果你的網站正在做多語言或多地區佈局,但現在最頭疼的是版本頁經常串頁、語言頁互相打架、使用者老是進錯頁面,那 hreflang 值得認真做。但前提還是一樣:先把不同版本真正建出來,再把它們之間的關係講清楚。程式碼只是最後一步,不是第一步。