你的網站做了繁中、日文、德文好幾個語言版本,台灣的搜尋流量卻怎麼衝都衝不動,反而英文版一枝獨秀,這種情況我看過太多次。多數人第一時間會去改內容、加關鍵字,但真正的病灶往往藏在一行你平常不會去看的標籤裡:canonical。我是吳承學,做 SEO 二十年,這篇要用一個真實的慘案,把 canonical 指錯到英文首頁會發生什麼事、以及 canonical 跟 hreflang 到底該怎麼搭配講透。

多語系 canonical 的錯誤與正確對照:錯誤為所有語言版本 canonical 都指向英文首頁,正確為每個語言自我 canonical 並用 hreflang 互指
多語系 canonical:錯誤 vs 正確

1. 一個把所有語言版本都指向英文首頁的慘案

先講案例。我曾經協助分析一款電子簽章 SaaS 的多語系網站,對方在台灣、日本、德國都有在地化的版本,內容也翻得很用心。但流量報表就是很怪:非英語市場的自然搜尋幾乎起不來。掃過原始碼才發現問題,所有語言版本,包括繁中的 /zh-tw/、日文的 /ja/、德文的 /de/,它們的 canonical 標籤全部指向同一個英文首頁。

1.1 canonical 指錯,等於叫 Google 忽略你的在地版本

canonical 這個標籤的作用,是告訴 Google「這一頁的權威版本是哪一個網址」。當繁中頁的 canonical 指向英文首頁,你等於親口跟 Google 說:「繁中這頁不是正版,英文首頁才是。」Google 照做,把繁中、日文、德文頁全部當成英文首頁的重複內容,索引時直接略過,權重全數集中到英文版。台灣使用者搜尋繁中關鍵字時,你精心翻譯的繁中頁根本沒被當成獨立頁面看待。

1.2 為什麼這種錯特別難被發現

我在實務上看過這類問題拖很久才被抓出來,原因是頁面在瀏覽器裡看起來一切正常,內容顯示、切換語言都沒問題,肉眼完全看不出異常。canonical 藏在 <head> 裡,除非你主動去看原始碼或用工具掃描,否則不會察覺。很多網站是用同一套模板產生所有語言頁,模板裡的 canonical 寫死成英文首頁,結果一錯就是全站錯。

2. canonical 的正確原則:每個語言版本都指向自己

修正的核心觀念只有一句話:每個語言版本的 canonical 應該指向該頁自己,而不是別人。

2.1 self-referencing canonical 是多語系的地基

繁中頁的 canonical 就指向繁中頁的網址,日文頁指向日文頁,以此類推。這叫 self-referencing canonical,是多語系網站的地基。地基沒打好,上面疊再多 hreflang 都是空的。我的做法是先確認每一個語言版本都能自我指涉,再往下做 hreflang,順序不能顛倒。

2.2 只修 canonical 不加 hreflang,效果還是有限

這裡要澄清一個常見誤會:很多人以為把 canonical 改成指向自己就沒事了。實際上,如果只修 canonical 卻沒補上 hreflang,Google 雖然不再把各語言頁當成重複內容,但它仍然不知道這幾個頁面「彼此是同一份內容的不同語言版本」。少了這層對應關係,Google 可能在錯誤的市場放送錯誤語言的頁面。canonical 解決的是「哪個是正版」,hreflang 解決的是「哪個版本給哪個地區的人看」,兩者要一起做才完整。

3. hreflang 要寫在 head 裡,而且每個連結都要對應

我在實務上看過有網站只在 <html lang="zh-tw"> 上標了語言屬性,就以為多語系 SEO 做完了。這其實只做了一半。

3.1 html lang 屬性的權重很低

<html lang="zh-tw"> 只是告訴瀏覽器這頁的語言是繁體中文,對輔助工具與使用者體驗有幫助,但對 Google 的多語系 SEO 來說,這個屬性的權重很低。它不能取代 hreflang。真正能讓 Google 建立語言對應關係的,是寫在 <head> 裡、每個語言版本都互相指涉的 <link rel="alternate" hreflang="...">

3.2 放在 sitemap 不如放在 head

hreflang 有三種實作位置:HTTP header、sitemap、以及 HTML 的 head。有些網站把 hreflang 放在 sitemap 裡,這技術上可行,但我的做法是優先放在每一頁的 head。理由很單純:head 裡的標記跟頁面綁在一起,爬取當下就能被讀到,除錯時打開原始碼就看得見,不用另外去比對 sitemap 有沒有同步。放 sitemap 一旦哪天忘了更新,問題又很難查。

3.3 正確的 head 標記長這樣

一個繁中頁,head 裡該同時具備 self-referencing canonical 與完整的 hreflang,實務上會像這樣:

<html lang="zh-TW">
<head>
  <!-- 1. canonical 指向自己 -->
  <link rel="canonical" href="https://www.example.com/zh-tw/" />

  <!-- 2. hreflang 告訴 Google 各語言版本的對應 -->
  <link rel="alternate" hreflang="zh-TW" href="https://www.example.com/zh-tw/" />
  <link rel="alternate" hreflang="ja" href="https://www.example.com/ja/" />
  <link rel="alternate" hreflang="de" href="https://www.example.com/de/" />
  <link rel="alternate" hreflang="en" href="https://www.example.com/en/" />
  <link rel="alternate" hreflang="x-default" href="https://www.example.com/en/" />
</head>

3.4 別漏掉 x-default

上面那組標記裡的 x-default 常被漏掉。它的意思是「如果使用者的語言與地區都不在我列出的清單裡,預設給他看哪一頁」。通常會指向英文版或一個語言選擇頁。少了 x-default,對於不在你目標市場的使用者,Google 只能自己猜要顯示哪個版本,結果不一定理想。

4. canonical 與 hreflang 的分工與常見錯誤

把兩者的角色與常見錯誤放在一起對照,你會更清楚問題出在哪。

項目 canonical hreflang
要回答的問題 這頁的權威版本是哪個網址 這份內容有哪些語言版本、各給誰看
正確做法 每個語言版本指向自己 列出所有語言版本並互相指涉
建議放置位置 該頁 head 該頁 head(優先於 sitemap)
做錯的後果 在地版本被當重複內容忽略 在錯的市場放送錯的語言
能否單獨使用 可以但不完整 需搭配正確 canonical 才有效

4.1 hreflang 必須雙向對應

hreflang 有一條鐵律:對應關係必須雙向。繁中頁指向日文頁,日文頁也一定要回指繁中頁。只要有一邊漏掉,Google 就會判定這組對應無效而忽略它。我在實務上看過網站只在首頁做了完整對應,內頁卻各做各的,結果內頁的多語系關係全數失效,這種局部正確反而最難察覺。

4.2 語言與地區代碼別寫錯

hreflang 的值要用有效的語言代碼,必要時加上地區代碼,例如 zh-TWen-US。常見的錯誤是把地區代碼當語言代碼用,像是寫成 zh-tw 大小寫混亂或用了不存在的代碼。這些寫錯的標記會被 Google 直接忽略,建議上線前用 hreflang 檢測工具跑一次。

4.3 canonical 與 hreflang 不能互相打架

最後一個雷:canonical 指向的網址,必須跟 hreflang 裡列出的該語言網址完全一致。如果繁中頁 canonical 指向自己,hreflang 卻把繁中版寫成另一個網址,兩個標籤互相矛盾,Google 收到衝突訊號後多半兩個都不採信。一致性在這裡不是講究,是能不能生效的前提。

5. 常見問題

5.1 canonical 全部指向英文首頁,大概多久會影響流量

影響是持續累積的,不是某一天突然發生。當各語言版本被判定為重複內容,它們在對應市場的排名會逐漸掉下來,非英語市場受創最深。修正之後也需要 Google 重新爬取與索引才會回穩,通常要數週到數月,愈早發現愈好。

5.2 只把 canonical 改成指向自己,流量就會回來嗎

會改善,但通常不夠。canonical 修正後在地頁不再被當重複內容,這是止血;但要讓 Google 正確地把對的語言送到對的市場,還需要補上雙向的 hreflang。兩件事一起做,恢復的效果才完整。

5.3 hreflang 放在 sitemap 跟放在 head 有差嗎

兩者都被 Google 支援,效果理論上相近。但我偏好放在 head,因為它跟頁面綁在一起,爬取當下就讀得到,除錯時打開原始碼直接看得見。放 sitemap 一旦忘了同步就很難查,維護成本比較高。

5.4 x-default 一定要加嗎

強烈建議加。它處理的是那些語言地區都不在你清單內的使用者,替他們指定一個預設版本。沒有 x-default,Google 只能自行判斷要顯示哪個語言頁,結果不見得符合你的預期。

5.5 只有一種語言的網站需要做 canonical 嗎

需要。就算只有單一語言,self-referencing canonical 仍能幫你收斂同一頁的不同網址變體,例如有無斜線、帶不帶參數的版本,避免同一份內容被拆成多個重複頁分散權重。它是每個網站都該有的基本設定。

5.6 怎麼確認 canonical 跟 hreflang 都設對了

我的做法是三管齊下:打開頁面原始碼確認 head 裡的標籤、用 hreflang 檢測工具跑一輪抓語法與雙向對應的錯誤、再看 Search Console 的國際定位報告有沒有回報衝突。三個訊號都乾淨,才算真的設對。