向 Google 說明網頁的本地化版本

如果您的網頁有多種語言或地區版本,請向 Google 說明這些不同的變化版本。如此有助於 Google 搜尋根據語言或地區將使用者導向最適當的網頁版本。

請注意,即使您不採取任何行動,Google 也可能自行找到網頁的替代語言版本,但還是建議您明確指明語言或區域的專屬網頁,一般來說這會是最好的做法。

如果您的網站符合以下情形,就建議您指明替代網頁:

  • 如果您只翻譯了網頁範本,例如導覽和頁尾,主要內容仍使用單一語言。對於大多數內容都是使用者自製內容的網頁來說,這是很普遍的情況,例如論壇網頁。
  • 如果您的網頁大部分內容都很類似,而且只使用了一種語言,但是少數內容有專屬的地區版本。舉例來說,您網站上的英文網頁可能有不同版本,分別適用於美國、英國和愛爾蘭的使用者。
  • 如果您的網站內容已全部翻譯成多種語言。例如,您的每個網頁都分別提供了德文和英文版本。

除非本地化版本網頁的主要內容部分仍保留原文,否則 Google 不會將其視為重複網頁

指定替代網頁的方法

有三種方法可以向 Google 指明網頁有哪些語言/地區版本:

HTML 標記

在網頁標頭中新增 <link rel="alternate" hreflang="lang_code"... > 元素,讓 Google 知道網頁的所有語言及地區版本。如果您沒有 Sitemap 或無法指定網站的 HTTP 回應標頭,就可以採用這個方法。

每個網頁版本的 <head> 元素都應該有一組 <link> 元素,裡面含有該網頁本身以及各個網頁變化版本的連結。每個網頁版本中的這組連結都是一樣的。請參閱其他規範

每個 link 元素的語法如下:

<link rel="alternate" hreflang="lang_code" href="url_of_page" />

lang_code
此網頁版本鎖定的支援語言/地區代碼,或使用 x-default 來比對網頁上 hreflang 標記未明確列出的任何語言。
url_of_page
此網頁專屬語言/地區版本的完整網址。
請盡可能將 <link> 標記置於靠近 <head> 元素頂端的位置。至少必須將 <link> 標記放在結構完整的 <head> 區段內,或者放在可能導致 <head> 過早結束的任何項目前方,例如 <p> 或追蹤像素。如果不確定是否正確,請將轉譯網頁的程式碼貼到 HTML 驗證工具,確認這些連結確實位於 <head> 元素內部。

範例

Example Widgets, Inc 的網站為美國、英國和德國地區的使用者提供服務。下列網址的內容基本上相同,但每個地區的版本有部分差異:

  • http://en.example.com/page.html - 一般英文版首頁,其中包含美國至各國的運費資訊。
  • http://en-gb.example.com/page.html - 英國版首頁,以英鎊顯示價格。
  • http://en-us.example.com/page.html - 美國版首頁,以美元顯示價格。
  • http://de.example.com/page.html - 德文版首頁。
  • http://www.example.com/ - 未指定任何目標語言或地區的預設網頁,提供選取器讓使用者自行選擇語言和地區。

請注意,Google 不會根據這些網址中的語言專屬子網域 (en、en-gb、en-us、de) 來判斷網頁的目標對象,您必須明確地對應正確的目標對象。

以下是應該貼到上述所有網頁 <head> 區段的 HTML 程式碼。這段程式碼會將美國、英國、一般英文使用者和德文使用者導向各自的本地化網頁,並將其餘使用者導向一般版首頁。Google 搜尋會根據使用者的瀏覽器設定傳回適合的結果。

<head>
 <title>Widgets, Inc</title>
  <link rel="alternate" hreflang="en-gb"
       href="http://en-gb.example.com/page.html" />
  <link rel="alternate" hreflang="en-us"
       href="http://en-us.example.com/page.html" />
  <link rel="alternate" hreflang="en"
       href="http://en.example.com/page.html" />
  <link rel="alternate" hreflang="de"
       href="http://de.example.com/page.html" />
 <link rel="alternate" hreflang="x-default"
       href="http://www.example.com/" />
</head>

HTTP 標頭

您可以使用網頁的 GET 回應傳回 HTTP 標頭,向 Google 提供網頁的所有語言和地區變化版本。這種方法適用於非 HTML 檔案 (例如 PDF)。

標頭的格式如下:

Link: <url1>; rel="alternate"; hreflang="lang_code_1", <url2>; rel="alternate"; hreflang="lang_code_2", ...

<url_x>
替代網頁的完整網址,對應至指派給相關 hreflang 屬性的語言代碼字串。網址前後須有 < > 標記。範例:<https://www.google.com>
lang_code_x
此網頁版本鎖定的支援語言/地區代碼,或使用 x-default 來比對網頁上 hreflang 標記未明確列出的任何語言。

包括要求版本在內,您必須為每個網頁版本指定一組 <url>rel="alternate"hreflang 的值,並使用逗號分隔,如以下範例所示。系統會為每個網頁版本傳回相同的 Link: 標頭。請參閱其他規範

範例

假設有某個網站具備三種版本的 PDF 檔案,分別適用於英文使用者、瑞士地區的德文使用者,以及其他所有德文使用者,以下示範網站會傳回的 Link: 標頭:

Link: <http://example.com/file.pdf>; rel="alternate"; hreflang="en",
      <http://de-ch.example.com/file.pdf>; rel="alternate"; hreflang="de-ch",
      <http://de.example.com/file.pdf>; rel="alternate"; hreflang="de"

Sitemap

您可以使用 Sitemap 向 Google 提供每個網址所有的語言和地區變化版本。做法是新增 <loc> 元素來指定單一網址,並列出包含該網頁在內,每個語言/地區版本的 <xhtml:link> 子元素。因此,如果您的網頁有 3 種版本,Sitemap 就會有 3 個項目,而每個項目分別包含 3 個相同的子項目。

Sitemap 規則:

  • 請依照下列方式指定 xhtml 命名空間:
    xmlns:xhtml="http://www.w3.org/1999/xhtml"
  • 為每個網址單獨建立一個 <url> 元素。
  • 每個 <url> 元素都必須包含指出網頁網址的 <loc> 子元素。
  • 每個 <url> 元素都必須包含子元素 <xhtml:link rel="alternate" hreflang="supported_language-code">,並在其中列出包括該網頁本身在內的每個替代版本。這些 <xhtml:link> 子元素的順序並不重要,但建議您採用同樣順序,方便檢查錯誤。
  • 請參閱其他規範

範例

假設您的網站為全球英文使用者提供英文版網頁,並為全球德文使用者以及瑞士地區德文使用者提供兩種德文版網頁,且三者內容相同。那麼該網站上的所有網址將會像下面這樣:

  • www.example.com/english/page.html,適用於英文使用者。
  • www.example.com/deutsch/page.html,適用於德文使用者。
  • www.example.com/schweiz-deutsch/page.html,適用於瑞士地區的德文使用者。

這三個網頁的 Sitemap 則會如下:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
  xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <url>
    <loc>http://www.example.com/english/page.html</loc>
    <xhtml:link
               rel="alternate"
               hreflang="de"
               href="http://www.example.com/deutsch/page.html"/>
    <xhtml:link
               rel="alternate"
               hreflang="de-ch"
               href="http://www.example.com/schweiz-deutsch/page.html"/>
    <xhtml:link
               rel="alternate"
               hreflang="en"
               href="http://www.example.com/english/page.html"/>
  </url>
  <url>
    <loc>http://www.example.com/deutsch/page.html</loc>
    <xhtml:link
               rel="alternate"
               hreflang="de"
               href="http://www.example.com/deutsch/page.html"/>
    <xhtml:link
               rel="alternate"
               hreflang="de-ch"
               href="http://www.example.com/schweiz-deutsch/page.html"/>
    <xhtml:link
               rel="alternate"
               hreflang="en"
               href="http://www.example.com/english/page.html"/>
  </url>
  <url>
    <loc>http://www.example.com/schweiz-deutsch/page.html</loc>
    <xhtml:link
               rel="alternate"
               hreflang="de"
               href="http://www.example.com/deutsch/page.html"/>
    <xhtml:link
               rel="alternate"
               hreflang="de-ch"
               href="http://www.example.com/schweiz-deutsch/page.html"/>
    <xhtml:link
               rel="alternate"
               hreflang="en"
               href="http://www.example.com/english/page.html"/>
  </url>
</urlset>

適用於所有方法的通用規範

  • 每個語言版本都必須列出自己本身以及所有其他語言版本。
  • 替代網址必須是包含傳輸方式 (http/https) 的完整網址,因此:
    請使用 https://example.com/foo,不要使用 //example.com/foo 或 /foo
  • 替代網址不一定要位於相同的網域。
  • 如果您為使用相同語言但來自不同地區的使用者指定了數個替代網址,建議您同時提供一個總括性網址,以服務使用該語言但沒有指定地理區域的使用者。舉例來說,如果您分別為愛爾蘭 (en-ie)、加拿大 (en-ca) 和澳洲 (en-au) 的英文使用者提供專屬網址,那麼也應該另外提供一般版的英文 (en) 網頁,供美國、英國及所有其他英語系地區的搜尋者使用。如果想要的話,您也可以在地區專屬版本中擇一,指定為這個一般版網頁。
  • 如果兩個網頁並未同時指向對方,系統即會忽略標記。這是為了不讓其他網站的人任意建立標記並冒稱其網頁是您網頁的替代版本。
  • 如果很難針對每種語言維護一套完整的雙向連結,您可以省略某些網頁上的部分語言;Google 仍會處理指向對方的網頁。但是,請務必在新擴充的語言頁面和原始/主要語言的頁面之間建立雙向連結。舉例來說,如果您最初以法文建立網站,並將網址置於 .fr,那麼當您推出較新的墨西哥 (.mx) 和西班牙 (.es) 網頁後,應該優先建立這兩者與主要 .fr 網頁間的雙向連結,而不是建立兩個西班牙語系版新網頁 (.mx 和 .es) 之間的雙向連結。
  • 請考慮為不相符的語言新增備用網頁,特別是國家/地區或語言選取器,或是有自動導向功能的首頁。您可以使用 x-default 值,如下所示:
    <link rel="alternate" href="http://example.com/" hreflang="x-default" />

支援的語言/地區代碼

hreflang 屬性的值能夠識別替代網址的語言代碼 (採 ISO 639-1 格式),也能夠識別地區代碼 (如果選用的話,採 ISO 3166-1 Alpha 2 格式),且語言不一定要與地區相對應。例如:

  • de:德文內容,不限地區
  • en-GB:對英國使用者顯示的英文內容
  • de-ES:對西班牙使用者顯示的德文內容

請勿單獨指定國家/地區代碼。Google 不會根據國家/地區代碼自動得知網頁的語言。如要簡化標記,可以單獨指定語言代碼。在語言之後加上國家/地區代碼,則可限定網頁在特定地理區域顯示。例如:

  • be:白俄羅斯文,無關地理區域 (不同於適用於比利時地區的法文)
  • nl-be:適用於比利時地區的荷蘭文網頁
  • fr-be:適用於比利時地區的法文網頁

對於不同語言的指令碼版本,系統會根據國家/地區產生適當的指令碼。例如,對台灣的使用者使用 zh-TW 時,系統會自動產出相應的語言指令碼 (本例中為繁體中文)。您也可以使用 ISO 15924 格式明確指定指令碼,如下所示:

  • zh-Hant:中文 (繁體)
  • zh-Hans:中文 (簡體)

另一種做法是指定指令碼和地區的組合,例如使用 zh-Hans-TW 對台灣使用者指定簡體中文。

針對不相符的語言使用 x-default 標記

如果沒有其他語言/地區符合使用者的瀏覽器設定,保留值 hreflang="x-default" 就會派上用場。我們建議您使用這個選用值,可以在沒有相符語言時控制網頁。不妨試試看在您網站的首頁上放置可點擊的地圖,讓使用者自行選擇所在的國家/地區。

疑難排解

常見錯誤

以下是使用 hreflang 時最常見的錯誤:

  • 缺少傳回連結:如果網頁 X 連結至網頁 Y,網頁 Y 也必須連結回網頁 X。如果任何一個使用 hreflang 註解的網頁缺少傳回連結,則可能導致系統忽略所有註解,或無法正確解讀註解。
  • 語言代碼有誤:請確認您使用正確的語言代碼來識別替代網址的語言 (採用 ISO 639-1 格式) 和地區 (如果選用的話,採用 ISO 3166-1 Alpha 2 格式)。單獨指定地區是無效的。

排除 hreflang 錯誤

您可以使用指定國際目標報告來排除最常見的問題。請等待一段時間,確保 Google 已檢索您的網頁,然後造訪報告的「語言」分頁,查看是否偵測到任何錯誤。

此外,還有許多第三方工具也可用來偵錯。下列是幾種熱門的工具 (Google 不負責維護或檢查這些工具)。