Hreflang 是什麼?它在多語言 SEO 中解決什麼問題?
hreflang 標籤是用來告訴 Google,同一份內容有哪些不同語言或地區版本。它的重點不是提升排名,而是協助搜尋結果顯示最適合使用者語言、地區的 URL。
對台灣網站來說,hreflang 常見於繁體中文、英文、香港繁中、簡中或不同市場頁面並存的情境。我的判斷是,只要網站開始出現「同一內容有多個市場版本」,就不該只靠 Google 自己猜。
- 標示同一內容的替代語言版本,例如
zh-TW與en-US。 - 降低錯誤語系頁面出現在搜尋結果的機率。
- 避免相近內容在不同語言或地區版本之間互相干擾判斷。
hreflang 和 HTML lang 有什麼不同?
hreflang 是給搜尋引擎看的替代版本訊號,HTML lang 是標示目前頁面內容語言的 HTML 屬性。兩者可以同時存在,但功能不同。
| 項目 | 用途 | 範例 |
|---|---|---|
| HTML lang | 說明本頁主要語言 | <html lang="zh-TW"> |
| hreflang | 說明本頁有哪些替代語言或地區版本 | <link rel="alternate" hreflang="en-US" href="https://example.com/en/"> |
hreflang 不會直接翻譯內容,也不是排名保證
hreflang 不會幫頁面翻譯,也不會保證排名上升。它處理的是「版本配對」問題,例如台灣使用者搜尋時,Google 應優先理解 zh-TW 頁面比 zh-CN 或 en-US 更適合。
如果內容品質、索引狀態、canonical 或網站架構本身有問題,單靠 hreflang 標籤不會修好整個多語言 SEO。
你的網站真的需要 hreflang 嗎?
不是所有網站都需要 hreflang。只有當網站有多語系、多地區,或同一語言但服務市場不同的頁面時,hreflang 才有實作價值。
| 判斷層級 | 網站情境 | 是否需要 | 原因 |
|---|---|---|---|
| 不需要 | 只有台灣繁中內容,沒有其他語言版本 | 不用設定 | 沒有替代版本需要標示 |
| 建議 | 有繁中與英文頁,但內容量不多 | 建議設定 | 可協助 Google 理解兩個語言版本的對應關係 |
| 必須 | 同一商品或服務有台灣、香港、新加坡、美國版本 | 應設定 | 市場差異會影響搜尋結果應顯示哪個 URL |
不需要 hreflang 的情境
如果網站只有一個語言版本,或只是同一個繁中頁面服務所有使用者,通常不需要 hreflang。台灣在地品牌、單一語言部落格、只有 9iseo.com.tw/articles 這類繁中內容的網站,都可以先把索引、canonical、內部連結做好。
建議使用 hreflang 的情境
如果網站同時有 zh-TW 與 en-US 版本,或未來會擴充香港、新加坡市場,建議從早期就規劃 hreflang。後期才補,最麻煩的通常不是語法,而是 URL 對應表已經亂掉。
必須使用 hreflang 的情境
當同一內容有多個地區版本,而且價格、服務範圍、法規聲明、客服資訊不同時,hreflang 幾乎是必要設定。例如台灣頁面用新台幣,香港頁面用港幣,美國頁面用美元,這些不該全被 Google 視為可隨意替換的同一頁。
同語言不同法規、幣別、服務市場的判斷
同樣是英文,en-US、en-SG、en-GB 可能服務不同市場。同樣是繁中,zh-TW 與 zh-HK 也可能有用字、法規、貨幣與客服差異。只要頁面是為不同市場設計,就應用 hreflang 把版本關係說清楚。
hreflang 的基本語法怎麼寫?
hreflang 基本語法由 rel="alternate"、完整 URL 的 href,以及語言地區代碼 hreflang 組成。每個替代版本都要清楚列出。
<link rel="alternate" hreflang="zh-TW" href="https://www.example.com/tw/hreflang/">
<link rel="alternate" hreflang="en-US" href="https://www.example.com/en/hreflang/">
<link rel="alternate" hreflang="zh-HK" href="https://www.example.com/hk/hreflang/">
rel、href、hreflang 各代表什麼?
| 屬性 | 代表意思 | 實作重點 |
|---|---|---|
rel="alternate" |
這是替代版本 | 固定使用 alternate |
href |
替代版本的完整 URL | 應使用完整絕對 URL,不要用相對路徑 |
hreflang |
語言或語言加地區代碼 | 例如 zh-TW、en-US |
語言代碼與地區代碼怎麼選?
語言代碼通常使用 ISO 639-1,例如中文是 zh,英文是 en。地區代碼通常使用 ISO 3166-1 Alpha-2,例如台灣是 TW,香港是 HK,美國是 US。
只標語言可以寫 en,但台灣企業實務上常需要語言加地區,例如 en-US 或 en-SG,因為市場版本不只語言不同,頁面承諾也可能不同。
繁中網站該用 zh-TW、zh-HK 還是 zh-CN?
台灣繁體中文頁面通常使用 zh-TW。香港繁中頁面使用 zh-HK。簡體中文頁面才使用 zh-CN。不要因為都是中文,就把台灣繁中頁標成 zh-CN。
| 代碼 | 適合頁面 | 台灣站長常見判斷 |
|---|---|---|
zh-TW |
台灣繁中內容 | 台灣市場主頁、文章、商品頁 |
zh-HK |
香港繁中內容 | 港幣、香港客服、香港法規頁 |
zh-CN |
簡體中文內容 | 不適合標在台灣繁中頁 |
三種 hreflang 實作方式:HTML、HTTP Header、XML Sitemap
hreflang 可以放在 HTML <head>、HTTP Header 或 XML Sitemap。一般內容頁常用 HTML 或 sitemap,PDF 等非 HTML 檔案則可用 HTTP Header。
| 方法 | 適合頁型 | 優點 | 限制 |
|---|---|---|---|
| HTML head | 文章、分類頁、商品頁 | 直覺、容易檢查 | 頁面數多時維護成本高 |
| HTTP Header | PDF、非 HTML 檔案 | 可處理沒有 head 的資源 | 需要伺服器層設定 |
| XML Sitemap | 大量 URL、多語系站群 | 集中管理 | 對應表錯誤時不易人工檢查 |
方法一:放在 HTML <head>
HTML 實作適合一般文章頁與企業網站。每個語言版本頁面的 <head> 都要列出同一組 hreflang,包括自己。
<link rel="alternate" hreflang="zh-TW" href="https://9iseo.com.tw/articles/hreflang">
<link rel="alternate" hreflang="en-US" href="https://9iseo.com.tw/en/articles/hreflang">
<link rel="alternate" hreflang="x-default" href="https://9iseo.com.tw/articles/hreflang">
方法二:放在 HTTP Header
HTTP Header 適合 PDF、檔案下載頁或其他沒有 HTML head 的資源。它的概念和 HTML 相同,只是標籤放在回應標頭。
Link: <https://www.example.com/tw/file.pdf>; rel="alternate"; hreflang="zh-TW",
<https://www.example.com/en/file.pdf>; rel="alternate"; hreflang="en-US"
方法三:放在 XML Sitemap
XML Sitemap 適合 URL 數量多、語系對應穩定的網站。大型電商、多市場內容庫通常會用 sitemap 集中輸出 hreflang cluster。
<url>
<loc>https://www.example.com/tw/hreflang/</loc>
<xhtml:link rel="alternate" hreflang="zh-TW" href="https://www.example.com/tw/hreflang/" />
<xhtml:link rel="alternate" hreflang="en-US" href="https://www.example.com/en/hreflang/" />
</url>
三種方法可以混用嗎?
技術上可以,但不建議沒有理由就混用。台灣中小型網站通常選 HTML 或 sitemap 就夠;大型站若同時使用多種方法,必須保證每一處輸出的 URL、語言代碼與回指關係完全一致。
Self-referencing、互相回指與 x-default 怎麼設定?
完整的 hreflang cluster 必須包含自我參照、互相回指,以及必要時的 x-default。少了回指,Google 可能忽略部分語言版本的關係。
- 每個語系頁都要列出自己。
- 每個語系頁都要列出所有替代版本。
- 所有語系頁的 hreflang 清單應保持一致。
x-default只在有預設頁、語言選擇頁或全球入口頁時使用。
每個語系頁都要列出自己
如果台灣頁是 zh-TW,它的 hreflang 清單裡也要有自己的 URL。這點很容易被省略,但實作驗收時我會把它列為第一批檢查項目。
每個語系頁都要互相回指
假設有台灣、香港、美國三個版本,每一頁都要列出同樣三個版本。不能只有台灣頁指向英文頁,英文頁卻沒有指回台灣頁。
<link rel="alternate" hreflang="zh-TW" href="https://www.example.com/tw/product/">
<link rel="alternate" hreflang="zh-HK" href="https://www.example.com/hk/product/">
<link rel="alternate" hreflang="en-US" href="https://www.example.com/us/product/">
<link rel="alternate" hreflang="x-default" href="https://www.example.com/product/">
x-default 什麼時候要設定?
x-default 適合語言選擇頁、全球入口頁,或沒有明確市場匹配時要顯示的預設頁。它不應被拿來當所有市場的萬用 canonical,也不代表其他語言版本可以少做回指。
多語系網站架構與 hreflang 怎麼搭配?
URL 架構會影響 hreflang 的管理成本。多數台灣企業用子目錄最容易維護,ccTLD 地區訊號清楚但成本高,參數 URL 通常不建議當主要多語系架構。
| 架構 | 範例 | 優點 | 管理風險 |
|---|---|---|---|
| 子目錄 | example.com/tw/、example.com/en/ |
集中管理、權限與追蹤較單純 | 需維持清楚目錄規則 |
| 子網域 | tw.example.com、en.example.com |
市場或團隊可分開管理 | 技術與追蹤設定較分散 |
| ccTLD | example.com.tw、example.hk |
地區訊號明確 | 網域、內容、技術維護成本高 |
| 參數 URL | example.com/page?lang=zh-tw |
開發初期看似快速 | 容易造成索引、canonical、追蹤混亂 |
子目錄:多數企業最容易管理
example.com/tw/ 與 example.com/en/ 是台灣企業常見做法。它讓內容、權限、sitemap、Search Console 管理相對集中,也比較容易建立語系 URL 對應表。
子網域:適合市場或團隊明顯分開
如果不同市場由不同團隊負責,或技術環境真的分開,子網域有它的合理性。例如 tw.example.com 給台灣團隊,sg.example.com 給新加坡團隊。但 hreflang 清單仍要跨子網域完整回指。
ccTLD:地區訊號強,但管理成本高
example.com.tw、example.hk 這類 ccTLD 對地區辨識清楚,但會增加網域管理、內容同步、技術部署與品牌一致性的成本。除非市場規模值得,否則不必為了 hreflang 特地拆成多個國別網域。
參數 URL:通常不建議作為主要多語系架構
用 ?lang= 當主要多語系架構,後續常會卡在 canonical、篩選參數、追蹤與索引清理。短期開發快,長期驗收麻煩,這是我不建議台灣企業網站優先採用的原因。
Hreflang 與 canonical、noindex、redirect、sitemap 的整合規則
hreflang 指向的 URL 必須可索引、狀態碼正常,且 canonical 訊號清楚。只要 canonical、noindex、redirect 或 sitemap 互相打架,Google 就可能忽略 hreflang。
| 項目 | 正確做法 | 錯誤做法 |
|---|---|---|
| canonical | 各語言頁 canonical 指向自身版本 | 英文頁 canonical 指向繁中頁 |
| noindex | 只把可索引頁放入 cluster | 把 noindex 頁加入 hreflang |
| redirect | 讓 Googlebot 可存取各語言 URL | 依 IP 強制跳轉,無法停留原 URL |
| sitemap | sitemap 與頁面標籤一致 | sitemap 指 A,HTML head 指 B |
canonical 應指向自身語言版本
zh-TW 頁的 canonical 應指向 zh-TW URL,en-US 頁的 canonical 應指向 en-US URL。不同語言頁彼此用 hreflang 連接,不要用 canonical 合併。
noindex 頁不應放進 hreflang cluster
如果某個語言版本被設成 noindex,它就不適合出現在 hreflang cluster。Google 需要的是可被索引、可被顯示的替代版本。
不要用自動跳轉擋住 Googlebot
依 IP 或瀏覽器語言自動跳轉很常見,但不能讓 Googlebot 永遠無法存取原始 URL。比較好的做法是提供提示或可切換語言,而不是強制把所有人帶走。
sitemap 與頁面標籤要一致
如果 HTML head 和 XML Sitemap 都有 hreflang,兩邊必須輸出同一組 URL 與語言代碼。大型站最常見的問題,就是模板改了,但 sitemap 產生器還在輸出舊路徑。
WordPress、WooCommerce、Shopify 與電商頁面的 hreflang 注意事項
CMS 和電商網站的 hreflang 不能只看外掛有沒有輸出標籤,還要檢查商品、分類、幣別、市場與 URL 是否真的對應。錯配 alternate 比沒有設定更麻煩。
WordPress 多語系外掛要檢查的 4 件事
- 每個語言版本是否都有正確 URL,而不是全部指回首頁。
- hreflang 是否包含自我參照與互相回指。
- canonical 是否仍指向各自語言版本。
- sitemap 是否同步輸出正確的語系 URL。
外掛能省時間,但不代表可以免驗收。尤其是手動翻譯、部分頁面未翻完、分類 slug 不一致的網站,很容易出現缺頁或錯配。
WooCommerce 商品頁不要錯配語系版本
WooCommerce 商品頁應把同一商品的不同語言或市場版本互相標成 alternate。不要把不同 SKU、不同規格、不同商品硬配在一起。若台灣頁賣 A 商品,香港頁賣的是改版 B 商品,這就不一定是等價版本。
Shopify Markets 要注意市場、幣別與 URL 對應
Shopify Markets 常牽涉市場、幣別、語言與 URL 規則。檢查時不要只看 hreflang 是否存在,也要確認 en-SG 是否真的對應新加坡市場,價格、配送、庫存與結帳條件是否一致。
hreflang 常見錯誤與上線前檢查流程
hreflang 常見錯誤包括缺少回指、語言代碼錯誤、URL 不完整、canonical 衝突、404 或 301,以及 sitemap 與頁面標籤不一致。上線前應用清單逐項驗收。
最常見的 hreflang 錯誤
| 錯誤 | 可能結果 | 修正方向 |
|---|---|---|
| 缺少 reciprocal return tags | Google 忽略部分對應關係 | 讓每個版本互相列出同一組 URL |
| 使用相對 URL | 搜尋引擎解析不穩定 | 改用完整絕對 URL |
| 語言地區代碼錯誤 | 市場版本辨識錯誤 | 確認 ISO 語言與地區代碼 |
| canonical 指到其他語言頁 | 訊號互相衝突 | 各語言頁 canonical 指向自身 |
| alternate URL 回傳 404 或 301 | cluster 不完整 | 改成可索引且回傳 200 的 URL |
上線前檢查清單
- 確認所有 hreflang URL 都是完整絕對 URL。
- 確認每個語言版本都有 self-referencing 標籤。
- 確認每個語言版本都有互相回指。
- 確認
zh-TW、zh-HK、zh-CN、en-US等代碼正確。 - 確認 alternate URL 回傳 200 狀態碼。
- 確認 alternate URL 沒有被
noindex。 - 確認 canonical 指向自身語言版本。
- 確認 sitemap 與 HTML head 輸出一致。
- 確認自動跳轉不會阻擋 Googlebot 存取原 URL。
- 確認商品頁、分類頁、文章頁沒有錯配不同內容。
上線後如何用 Search Console 與爬蟲工具驗收
上線後可以用 Search Console 檢查索引狀態與 Google 看到的 canonical,再用爬蟲工具抽查頁面 head、狀態碼、canonical、hreflang 對應表。不要只驗首頁,至少要抽查文章、分類、商品與市場頁。
我會特別看兩件事:第一,Google 是否能存取每個語言 URL;第二,模板產生的 hreflang 是否跟實際內容一一對應。這兩件事比標籤看起來漂亮更重要。
不該納入本文的內容
hreflang 的任務是標示多語言或多地區替代版本,不應被擴寫成完整國際 SEO 專案。以下內容可以另外規劃,不需要混在 hreflang 實作裡。
- 完整海外市場進入策略。
- 翻譯品質管理流程。
- CDN 地理導向完整設定。
- 全站 migration 專案管理。
- 圖片 SEO 與多語系圖片規劃。
- 非 Google 搜尋平台的深度規則。
hreflang 是排名因素嗎?
hreflang 不是保證排名提升的因素。它主要協助 Google 在不同語言或地區版本中,選擇較適合搜尋者的 URL 顯示。
hreflang 和 canonical 可以同時使用嗎?
可以,而且通常應該同時使用。重點是各語言頁的 canonical 應指向自身版本,再用 hreflang 標示其他替代版本。
如果只有繁體中文和英文,需要設定 hreflang 嗎?
建議設定。即使只有 zh-TW 和 en-US,hreflang 仍能協助 Google 理解這兩頁是同一內容的不同語言版本。
zh-TW、zh-HK、zh-CN 差在哪裡?
zh-TW 代表台灣繁中,zh-HK 代表香港繁中,zh-CN 代表簡體中文。台灣繁中頁面通常應使用 zh-TW。
x-default 一定要設定嗎?
不一定。x-default 適合語言選擇頁、全球入口頁或預設版本;如果網站沒有這類頁面,可以不設定。
hreflang 可以放在 sitemap,不放 HTML 嗎?
可以。XML Sitemap 可以承載 hreflang,特別適合大量 URL 的網站。但 sitemap 裡的語言代碼、URL 與回指關係必須完整正確。
Google 會因為沒有 hreflang 判斷錯語言嗎?
有可能。Google 仍會用頁面內容、URL、連結與其他訊號判斷,但在多語系或多地區版本相近時,缺少 hreflang 會增加顯示錯版本的風險。
自動依 IP 跳轉會影響 hreflang 嗎?
可能會。如果自動跳轉讓 Googlebot 無法存取原本的語言 URL,hreflang 就難以被正確驗收。建議提供語言提示或可切換選項,不要強制阻擋存取。
商品頁缺貨或不同幣別時,還能互相標 hreflang 嗎?
如果仍是同一商品的市場版本,可以互相標 hreflang;如果已是不同商品、不同 SKU 或內容差異太大,就不應硬標成 alternate。
hreflang 設錯會造成重複內容問題嗎?
hreflang 設錯通常會造成版本配對失效或搜尋結果顯示錯頁,不一定直接變成重複內容問題。但如果 canonical 也設錯,就可能讓 Google 對代表 URL 的判斷混亂。
WordPress 外掛產生 hreflang 後還需要手動檢查嗎?
需要。外掛可以產生標籤,但仍要檢查 self-reference、互相回指、canonical、sitemap,以及未翻譯頁面是否被錯誤加入 cluster。
hreflang 多久會在搜尋結果生效?
沒有固定時間。Google 需要重新爬取、處理並理解語言版本關係,實際速度會受網站爬取頻率、URL 數量、內部連結與技術一致性影響。