// 免費工具 · HREFLANG 產生器

hreflang 產生器

填一組網址模式和你的語言代碼,就能拿到完整的 hreflang link 標籤(每個版本都在,含 x-default),以及可直接貼進 sitemap 的 xhtml:link 區塊。免費,全程在你的瀏覽器裡跑完。

免費即時免註冊在瀏覽器內執行

其他語言:EnglishDeutschEspañolFrançais日本語한국어Português (Brasil)繁體中文

hreflang · 產生器

{locale} 的位置就是語言區段,會換成小寫代碼(zh-hant);區段留空會收合成網站根目錄。

ISO 639-1 代碼,需要時加 -Script 或 -REGION(zh-Hant、zh-HK)。代碼後面可以接一段路徑(zh-Hant /pricing/ 表示繁體版在根目錄)、完整網址,或自訂的區段(zh-Hant tw)。

當搜尋者的語言不在你的清單裡時要給他哪一版,通常是英文版或根目錄那一頁。

錯誤與警告
    head 區塊 — 每個版本都貼同一份
    
                
    sitemap 區塊 — 每個版本一個 <url>
    
              

    hreflang 標籤怎麼產生

    一組模式、一份清單、兩個複製按鈕。每個網址都從同一組模式推導出來,所以這一整組標籤天生就完整、而且彼此互指,沒有需要人工核對的地方。

    1. 填入網址模式。 拿任何一個版本的網址,把語言區段的位置換成 {locale}:https://example.com/{locale}/pricing/。代碼會以小寫填入,區段留空則收合成網站根目錄。
    2. 列出語言代碼。 一行一個:zh-Hant、zh-Hans、en、ja。如果某個版本不照這個模式走(例如繁體版放在根目錄),就在代碼後面補上它的路徑:zh-Hant /pricing/。整段網址或自訂區段也是一樣的寫法。
    3. 選 x-default。 決定當搜尋者的語言不在清單裡時要給他哪一版,通常是根目錄或英文版。可以不選,但產生器會警告:少了 x-default,等於把這個判斷交給搜尋引擎去決定。
    4. 複製兩個區塊。 head 區塊原封不動貼進每個版本的 head —— 每一頁都必須列出所有版本,包含自己。sitemap 區塊貼進有宣告 xhtml 命名空間的 urlset 裡。兩個管道擇一就夠;兩個都留也可以,但內容必須一致。

    hreflang 在做什麼,以及為什麼必須互指

    hreflang 是 link 元素上的一個屬性,用來告訴搜尋引擎:這一頁的每個版本是為哪個語言、必要時是為哪個地區而寫的。沒有它,用繁體中文搜尋的人可能落在你的英文頁上,而繁體那一頁因為看起來像重複內容而遲遲沒被編入索引。有了它,Google 會換上對的版本,並把整組版本的評價合併起來,而不是分散到好幾個網址。

    最多網站栽跟頭的規則是互指。每個版本都要列出其他所有版本以及自己。如果 A 指向 B、B 卻沒有指回 A,Google 會判定這個標註不可信而整組丟掉 —— 丟的是這一對,不是只丟一邊。手工維護的一組標籤,在你新增一個語言的那一刻就開始跑掉;所以這個產生器從單一模式寫出完整的一組,給你一個到處貼都一樣的區塊,而不是每頁一份、還要你自己去對齊的片段。

    clize.ai 自己的 hreflang 也是同一套推導:sitemap 和每一頁語言版本都由同一份語言前綴清單產生,所以頁面不可能宣稱一個 sitemap 不認識的版本。

    zh-Hant、zh-TW、zh-HK 該用哪一個

    中文是 hreflang 裡唯一需要處理「文字」這一層的語言,因為同一個語言有兩套字。zh-Hant 的 Hant 是 ISO 15924 的文字代碼,意思是繁體中文,不分地區 —— 台灣、香港、澳門的讀者都涵蓋在內。zh-TWzh-HK 則是語言加地區,鎖定單一市場。三段式的 zh-Hant-HK(語言-文字-地區)也是合法的寫法,這個產生器同樣接受。

    怎麼選?如果你只有一份繁體內容給所有繁體讀者看,zh-Hant 是最準的,因為你主張的正是「這是繁體版」而不是「這是台灣版」。如果台港內容真的不同 —— 幣別是新台幣還是港幣、金流是綠界/藍新還是 PayMe、用詞是「軟體/網路/滑鼠」還是「軟件/網絡/滑鼠」、繁體香港還會夾雜粵語書面語 —— 那就分成 zh-TWzh-HK,或用 zh-Hant 當通用版再加一個 zh-HK 專門服務香港。精確度混用是允許的,較精確的那一個會勝出。

    簡體那一側對稱處理:zh-Hans 是簡體不分地區,zh-CN 是中國大陸。只寫 zh 不建議,因為它沒有說明是哪一套字,等於把繁簡讀者混成一群。至於 twhkcn 單獨拿來當 hreflang 值,全都是無效的 —— 它們是地區代碼,而 hreflang 的值一定要從語言開始。

    台港網站最常見、也最難察覺的問題不在代碼,而在網址。很多站用 JavaScript 在同一個網址上做繁簡即時轉換,讀者按一下切換就好。對讀者很方便,對 hreflang 卻是死路:整個網站的繁體和簡體共用同一個 URL,你根本沒有兩個可以互指的對象,hreflang 也就沒有東西可以標。要讓搜尋引擎分別收錄,繁簡必須是兩個真實存在、各自回傳 200 的網址,例如 /zh-Hant//zh-Hans/,或兩個子網域。前端的切換按鈕可以留著,但它要連到另一個網址,而不是在原地改寫畫面。

    另外提醒一句實話:這個產生器會比對語言那一段是否在 ISO 639-1 裡、並修正大小寫,但不會檢查地區代碼是否存在。zh-XX 在這裡會過關,之後由 Google 忽略。國家與地區清單要你自己核對。

    canonical 和 hreflang 一起用

    每個語言版本都要有指向自己的 canonical:繁體頁上寫 <link rel="canonical" href="https://example.com/zh-hant/pricing/">,指的就是繁體頁自己。canonical 是 head 裡唯一每個版本都不同的標籤,所以它不在上面那個共用區塊裡 —— 要一頁一頁寫,而且絕對不要指向別的語言版本。如果繁體頁的 canonical 指到簡體或英文網址,等於告訴 Google「請改去收錄那一頁」,這一頁就會從 hreflang 群組裡掉出去。繁簡站尤其容易犯這個錯,因為兩份內容看起來很像,很多人順手就把 canonical 指去了同一邊。

    另外兩個條件很機械:這組標籤裡的每個網址都必須回傳 200 且可被編入索引(不能是轉址,也不能有 noindex),而且必須是含協定與網域的絕對網址。這個產生器只會輸出絕對網址。轉址與索引狀態要靠爬取來確認;如果是你自己的網域,clize seo check 可以免費列出每一頁的即時 HTTP 狀態和 Google 索引狀態。

    hreflang 常見錯誤

    • 用 tw、hk、cn 當語言代碼。它們是地區代碼。正確寫法是 zh-Hantzh-TWzh-HKzh-Hans
    • 繁簡共用同一個網址。用 JavaScript 即時轉換等於只有一個 URL,hreflang 沒有對象可指。要有兩個各自回傳 200 的網址。
    • 只寫 zh。沒有說明是哪一套字,繁簡讀者被混為一談。至少寫到 zh-Hantzh-Hans
    • 缺少回指連結。A 指向 B、B 沒指回 A,這一對就被丟掉。同一份完整區塊貼進每個版本。
    • 沒有指向自己。每一頁都要把自己列進去。產生出來的區塊已經包含了。
    • canonical 指向別的語言。那一頁會從這組標籤裡掉出去。每個版本都要有指向自己的 canonical。
    • 相對網址。hreflang 需要含協定與網域的絕對網址,這個產生器不會輸出其他形式。
    • head 和 sitemap 講的不一樣。擇一使用,或像這裡一樣兩份都從同一個來源產生。

    同一頁其他給機器讀的面向,也適用同一條「單一來源」原則:FAQ schema 產生器用同一份清單同時寫出 JSON-LD 和畫面上看得到的 HTML;如果你為 agent 發布了 llms.txt,可以丟進 llms.txt 檢查工具跑一遍(兩者皆為英文頁)—— 那裡的相對連結,和這裡的相對 hreflang 是同一類錯誤。

    // 常見問題

    hreflang 是什麼?

    hreflang 是 link 元素上的一個屬性,用來告訴搜尋引擎:這一頁的每個版本是為哪個語言、必要時是為哪個地區而寫的。Google 會據此把符合搜尋者語言與所在地的版本換上去,並把這些版本當成同一組來評價,而不是當成重複內容。

    要用 zh-Hant 還是 zh-TW?

    如果你只有一份繁體內容給所有繁體讀者,用 zh-Hant 最準,因為你主張的是「這是繁體版」而不是「這是台灣版」。台港內容真的不同時才分成 zh-TW 和 zh-HK,或用 zh-Hant 當通用版再加一個 zh-HK 服務香港。三段式的 zh-Hant-HK 也是合法寫法。

    繁體和簡體可以放在同一個網址、用 JavaScript 切換嗎?

    對讀者可以,對 hreflang 不行。即時轉換代表繁簡共用同一個 URL,你沒有兩個可以互指的對象,搜尋引擎也只會收到一頁。要讓兩邊各自被收錄,必須有兩個真實存在、各自回傳 200 的網址,例如 /zh-Hant/ 和 /zh-Hans/。切換按鈕可以留,但要連到另一個網址。

    可以直接用 tw 當語言代碼嗎?

    不行。TW 是地區代碼,而 hreflang 的值一定要從語言開始。繁體中文寫成 zh-Hant,要鎖定台灣就寫 zh-TW。同理 hk、cn 單獨使用也是無效的,而 uk 指的是烏克蘭語,不是英國。

    x-default 一定要設嗎?

    不是必填,但建議設。x-default 指的是當搜尋者的語言完全不在你的清單裡時要給他哪一版 —— 語言選擇頁、根目錄或英文版都可以。沒設的話,這個判斷就由搜尋引擎替你做。

    hreflang 要放在 head 還是 sitemap?

    兩個管道擇一就夠:head 裡的 link 元素、非 HTML 檔案用 HTTP Link 標頭,或 sitemap.xml 裡的 xhtml:link 項目。版本很多時放 sitemap 可以讓 head 保持輕量。兩邊都放的話內容必須一致,所以要從同一個來源產生。

    hreflang 和 canonical 會衝突嗎?

    只要每個版本都有指向自己的 canonical 就不會。canonical 若指向別的語言版本,等於要求搜尋引擎改去收錄那一頁,這一頁就會從 hreflang 群組裡掉出去。

    clize seo check — 檢查自己的網域免費

    標籤貼好了?接著看看 Google 實際看到什麼。

    檢查自己的站不用錢:每一頁的即時 HTTP 狀態與 Google 索引狀態、Search Console 的排名與曝光和上一個週期的比較,以及依來源拆分的流量(AI 引擎單獨列一欄)。在你的 agent 裡下一道指令就好。

    $ npm i -g @clize/clize && clize install
    $ clize seo check --domain yourdomain.tw
    [ Clize 的 Agent SEO → ]