跳到主要內容
技術SEO · 22 分鐘閱讀

Canonical 標籤是什麼?讀懂 Google 選取標準網址的邏輯

很多人設了 canonical 標籤,卻發現 Google 並沒有採用。問題通常不在語法,而在信號衝突。這篇解釋 rel canonical 為何只是「建議」、JavaScript 注入的隱藏陷阱,以及如何用 GSC 診斷 canonical 是否被正確採用。

Canonical 標籤是什麼?讀懂 Google 選取標準網址的邏輯

Canonical 標籤是什麼?讀懂 Google 選擇標準網址的邏輯

同一份內容,卻出現在三個不同的 URL 上。Google 爬蟲抵達時,要索引哪一個?這個問題就是 canonical 標籤想解決的事。

rel="canonical" 標籤是一個放在 HTML <head> 區塊的 link 元素,用來告訴搜尋引擎:「這幾個 URL 裡,這個才是你應該索引的版本。」它的語法長這樣:

<link rel="canonical" href="https://example.com/product/white-shirt/" />

但有一件事多數人沒說清楚:canonical 標籤對 Google 來說是「強烈建議」,不是指令。Google 會考量你的聲明,但保留最終選擇權。

rel="canonical" 的語法規則與常見放錯位置

canonical 標籤有幾個硬性要求,放錯就失效:

  • 必須放在頁面的 <head> 區塊,不能放在 <body>
  • href 使用絕對 URL,包含 https:// 和完整路徑
  • 不要用相對路徑(如 href="../product/"),不同爬蟲解析方式不同
  • 一個頁面只放一個 canonical。多個 canonical 標籤衝突時,Google 通常忽略全部

最常見的錯誤是 canonical 出現在 <body> 裡,或被插入 AMP HTML 的錯誤位置。這些情況 Google 不會採用這個信號。

Google 怎麼決定 canonical?不只看你的聲明

這裡是競品文章普遍跳過的機制層。Google 選擇 canonical URL 時,會把 rel="canonical" 當作多個信號之一,同時評估:

  1. rel="canonical" 聲明(你的聲明,但不是唯一依據)
  2. 內部連結:站內哪個版本被連結最多次?Google 用連結數量判斷「這個版本對你自己比較重要」
  3. 外部連結:如果外部網站都連向非 canonical 的那個 URL,Google 傾向採用外部更認可的版本
  4. 協議偏好:HTTPS 版本優先於 HTTP 版本
  5. 網址簡潔度:較短、沒有不必要參數的 URL 更容易被選為 canonical
  6. Sitemap 收錄:sitemap.xml 中出現的 URL 版本是一個弱信號

這就是為什麼有時候你設了 canonical 指向頁面 A,Google 仍然索引頁面 B。從 Google 的角度看,它只是在綜合判斷後做了不同的決定。

官方說明可參考:Google Search Central 的 canonical 說明文件,裡面明確指出 canonical 是「強信號」而非「強制指令」。

從這個角度看,canonical 設定的工作不只是「加一行標籤」,而是要讓你的連結結構和你的 canonical 聲明一致。如果連結都指向 A,canonical 也指向 A,Google 採用的機率就很高。

Google canonical 信號優先序:rel canonical 只是建議,Google 會綜合內部連結、內容相似度等信號選擇最終標準 URL

Google 選取 Canonical 的信號優先序示意圖:rel="canonical" 是強烈建議,但 Google 保留最終選擇權

什麼情況需要設 Canonical 標籤?六種常見場景

不是所有網站都有大量重複頁面,但以下六個場景幾乎在每個中大型網站上都會出現。

場景一:電商商品的規格和顏色變體

白色 T-shirt 和黑色 T-shirt 各有一個 URL,商品描述卻幾乎相同。這是電商最典型的 canonical 需求。做法是讓所有規格頁的 canonical 指向主商品頁(或最具代表性的版本),讓 Google 集中索引一個頁面,把排名信號集中。

場景二:UTM 參數與動態篩選條件

行銷活動的追蹤連結(?utm_source=facebook)和電商分類的篩選條件(?color=red&size=M)都會生成新的 URL,但內容和原始頁面完全相同。不設 canonical 的情況下,Google 可能把這些都當成不同頁面來處理,稀釋排名信號。

場景三:HTTP/HTTPS 與 www/non-www 的混用

如果你的網站沒有強制跳轉,http://example.comhttps://example.comhttp://www.example.comhttps://www.example.com 可以是四個不同的「版本」。設定 canonical 指向你的標準版本(通常是 https://),加上 301 轉址作為雙重保障。

場景四:同一篇文章被多個分類路徑存取

部落格文章可能同時出現在 /blog/post-title//category/seo/post-title/。如果兩個 URL 都能訪問同一篇文章,需要決定一個「正版」並讓另一個指向它。

場景五:跨平台重複發布

把文章同步發布到 Medium、方格子、Vocus 時,這些平台通常允許設定 canonical 指向你的原始頁面。設定後,即使被轉載,搜尋引擎的排名信號仍集中在你的網站上,而非轉載平台。

場景六:AMP 頁面與原始頁面的配對

AMP 頁面需要雙向設定:原始頁面加上 <link rel="amphtml" href="https://example.com/amp/post/">,AMP 頁面加上 <link rel="canonical" href="https://example.com/post/">(指回原始頁面)。這樣 Google 才知道 AMP 頁是原始頁的加速版本,不是獨立內容。

從 SEO 策略層面看,這六種場景共同的問題是「排名信號分散」。如果你在意SEO 排名因素如何累積,canonical 設定其實就是在做「把信號集中到一個頁面」的工程。

六種需要設定 canonical 標籤的情境:電商變體、UTM 參數、HTTP/HTTPS、多分類路徑、跨平台發布、AMP 頁面

六種常見需要設定 Canonical 標籤的情境整理

Canonical 標籤怎麼設定?三種方式與最常被遺忘的規則

設定方式有三種,對應不同技術環境,但有一個所有情況都適用的規則最常被跳過。

方式一:直接寫入 HTML <head>(自建站或完全控制原始碼)

最直接的方式,找到你的頁面模板,在 <head> 區塊加入:

<link rel="canonical" href="https://example.com/your-page-url/" />

對於靜態網站生成器(如 Astro、Next.js、Gatsby),通常在頁面的 head 元件裡處理,可以動態帶入當前頁面的完整 URL。

方式二:透過 CMS 外掛設定

  • WordPress + Yoast SEO:每篇文章的 Yoast 設定面板底部有「進階」頁籤,可手動指定 canonical URL。預設狀況下 Yoast 會自動產生指向自身的 canonical,通常不需要手動調整
  • WordPress + RankMath:類似位置,在「進階」頁籤中
  • Webflow:頁面設定中有 SEO 設定區域,可填入 canonical URL

方式三:讓每個頁面都有指向自身的 canonical(最常被遺忘的規則)

即使你的頁面目前沒有任何已知的重複版本,仍然建議加上指向自身的 canonical(self-referencing canonical):

<link rel="canonical" href="https://example.com/current-page/" />

原因在於你無法完全控制自己頁面的所有 URL 版本。當有人在連結裡加了 UTM 參數、當 CDN 快取了一個奇怪的版本、當使用者分享了帶有 session ID 的連結,這些「意外版本」就出現了。

自我 canonical 的作用是預防性的,讓 Google 在遇到任何版本的你的頁面時,都有一個明確的指引。Google 自己也建議這樣做,這是成本很低、但能有效避免意外 canonicalization 問題的做法。

實際操作上,如果你用 CMS 外掛,自我 canonical 通常是預設行為。自建站的話,確認模板裡有動態帶入當前頁面 URL 的邏輯。

設了 Canonical 但 Google 沒採用?五個原因和診斷流程

這個問題比你想像中常見。Google Search Console 裡看到「Google 選取的 canonical」與你設的不同,並不代表你的設定壞掉了,而是 Google 在綜合信號後做了不同判斷。

Google 忽略 canonical 的五個常見原因

在調整設定之前,先搞清楚是哪個原因:

  1. 信號衝突:canonical 指向頁面 A,但站內和外部連結都指向頁面 B。Google 更傾向跟隨連結投票,而不是標籤聲明
  2. 內容不夠相似:Google 判斷兩個頁面不是真正的重複內容,所以不需要 canonicalize,選擇分別索引
  3. 語法錯誤:href 用了相對路徑、canonical 放在 body 而非 head、或同頁面有多個衝突的 canonical 標籤
  4. 爬取頻率低:你剛改了 canonical 設定,但 Google 還沒重新爬取到這個頁面,判斷還在用舊的快取資料
  5. 外部連結指向非 canonical 版本:如果大量外部反向連結指向另一個 URL,Google 可能認為那個版本更「權威」

JavaScript 注入 canonical 的隱藏陷阱

這個問題在使用 React、Vue、Angular 或 SPA 架構的網站上很常見,但很少被明確討論。

如果你的 canonical 標籤是由 JavaScript 動態寫入 <head>,問題在於 Googlebot 的渲染方式:它先做 HTML parse,把 JS 執行排進一個獨立的渲染佇列。這個佇列的處理可能延遲數天甚至數週。

在 JS 還沒執行之前,Googlebot 看到的是沒有 canonical 標籤的頁面。這段時間內,Google 可能根據其他信號做了自己的 canonical 判斷,後來 JS 執行後才出現的 canonical 聲明可能已經太晚改變 Google 的決定。

解決方法很直接:canonical 標籤永遠用靜態 HTML 輸出,不要依賴 JS 動態注入。如果你的框架支援 server-side rendering,確保 canonical 在 SSR 階段就已經出現在 HTML 裡。

三步驟診斷 canonical 是否被採用

  1. Google Search Console → URL 檢查工具:輸入你設 canonical 的頁面 URL,看「Google 選取的 canonical」欄位。如果這個欄位顯示的 URL 和你在頁面裡設的不同,表示 Google 做了不同選擇
  2. 頁面原始碼確認:在瀏覽器打開頁面,Ctrl+U 看原始碼,搜尋 "canonical"。確認標籤存在、在 head 裡、href 是完整的絕對 URL
  3. 檢查 canonical chain:如果你的 canonical 目標頁本身又 canonical 到另一頁,或者指向一個有 301 轉址的 URL,這個 canonical chain 可能讓 Google 不知道要跟到哪裡

爬取預算與未解決的 canonical 衝突

對有幾千頁以上的網站,這個層面很重要。未解決的 canonical 問題不只影響索引,還影響 Googlebot 對你整個網站的爬取效率。

根據 Google 的爬取預算管理文件,重複 URL 被列為「低價值 URL」的主要類型之一,Googlebot 的目標是盡量減少在這類頁面上的時間,把配額留給新內容和重要頁面。

電商網站的典型情況:10,000 個商品,每個商品有 5 個 URL 變體(顏色、尺寸、排序參數),理論上就有 50,000 個需要處理的 URL。如果這些都沒有 canonical 設定,Googlebot 需要花大量資源判斷哪些是重複的,進而壓縮對新商品頁的爬取頻率。

如果你在用 PageSpeed Insights 做技術優化,爬取效率同樣值得追蹤,canonical 是技術 SEO 的基礎建設之一,而不只是對付重複內容的補救工具。

Google Search Console URL 檢查工具顯示 canonical 狀態:使用者宣告 canonical 與 Google 選取 canonical 兩欄位比對,用於診斷 canonical 是否被採用

GSC URL 檢查工具的 canonical 狀態欄位說明:兩欄位不同代表 Google 忽略了你的聲明

Canonical vs. 301 轉址:什麼時候用哪個?

這兩個工具常被混用,但它們的設計目的不同。一句話區分:canonical 讓兩個 URL 都可以訪問,但告訴 Google 哪個才是「正版」;301 讓舊 URL 永遠消失,所有流量和信號都強制轉移到新 URL。

核心差異對比

面向 rel="canonical" 301 轉址
兩個 URL 是否都可訪問 是,都可以打開 否,舊 URL 自動跳轉
Google 遵從強度 強烈建議,可被覆蓋 通常 100% 遵從
適合的重複類型 功能性重複(需要兩個 URL 存在) 永久性合併(舊 URL 不再需要)
典型場景 UTM 參數頁、AMP 頁、跨平台發布 網站改版、域名更換、內容合併
風險 Google 可能忽略聲明 301 鏈過長會損失部分 PageRank

AK Canonical 決策樹:選 canonical 還是 301?

遇到重複 URL 問題,用以下兩個問題決定:

問題一:用戶或系統是否需要保留兩個 URL 都能訪問?

  • 需要(如:UTM 追蹤連結需要有效、AMP 頁需要獨立 URL)→ 用 canonical
  • 不需要 → 進入問題二

問題二:這個重複是否是永久性的、不會改變的?

  • 是永久重複(如:舊網址廢棄、內容合併)→ 用 301 轉址,最終解決問題
  • 功能性/暫時性重複(如:URL 參數是系統需求)→ 用 canonical

實務上,我傾向先做 301 轉址,因為它的信號更確定、不會被 Google 忽略。canonical 是在「真的需要保留兩個 URL」的情況下才用。用 canonical 當成 301 的替代品,結果通常不如預期。

技術 SEO 的基礎設定,不知道從哪裡開始盤點?從 canonical 問題到爬取效率,這些通常是排名卡關的隱藏原因。了解我們的 SEO 策略顧問服務,從技術層診斷你的網站實際狀況,找出優先處理的改善點。

AK Canonical 決策樹:判斷什麼時候用 rel canonical 標籤、什麼時候用 301 轉址的視覺化決策流程

AK Canonical 決策樹:兩個問題決定使用 rel canonical 還是 301 轉址

Canonical 標籤常見問題

Canonical 標籤會影響 Google 索引的速度嗎?

canonical 設定本身不會加快索引,但它可以讓 Google 把爬取資源集中在有價值的頁面上,間接改善整個網站的爬取效率。特別是對有大量重複 URL 的網站,清理 canonical 問題後,新內容被索引的速度通常會有改善。

一個頁面可以同時有多個 canonical 標籤嗎?衝突時怎麼辦?

技術上可以存在,但 Google 遇到同一個頁面有多個 canonical 標籤(指向不同 URL)時,通常的做法是忽略全部,然後自行判斷 canonical。這比沒設還糟糕。解決方式:找到重複的來源(通常是兩個不同的 SEO 外掛同時輸出),只留一個。

Canonical 可以跨域指向另一個網站嗎?

可以。跨域 canonical 的典型用途是把自己的網站設成授權來源,讓在其他平台(Medium、合作媒體)發布的相同內容指向你的網站。這樣搜尋引擎的排名信號會集中在你的頁面,而不是第三方平台。不過跨域 canonical 是「弱信號」,Google 可能選擇不採用,尤其是當目標域名的權威性比來源域名低的時候。

Google Search Console 顯示「使用者宣告 canonical 與 Google 選取 canonical 不同」,怎麼辦?

先不要急著「修正」,因為這不一定是問題。Google 選取的版本可能確實是「更好的」選擇。先確認幾件事:Google 選取的那個 URL 是不是你認可的版本?如果是,那沒有問題。如果不是,通常原因是連結結構和 canonical 聲明衝突,需要讓兩者方向一致,而不只是修改 canonical 標籤。

WordPress 用什麼外掛設定 canonical 標籤?

Yoast SEO 和 RankMath 都會自動為每個頁面輸出自我 canonical,大多數情況下不需要手動設定。如果你需要針對特定頁面修改 canonical,在文章/頁面的 SEO 設定面板找「進階」頁籤,裡面有 canonical URL 欄位可以手動填寫。

電商網站的商品頁每一頁都要設 canonical 嗎?

是的,而且應該在模板層統一處理,而不是逐頁手動設定。電商平台(Shopify、WooCommerce)通常有預設的 canonical 邏輯,但需要確認 URL 參數頁(篩選、排序、分頁)是否都正確指向標準 URL。分頁(?page=2)的處理方式需要額外注意,通常不建議 canonical 全部指向第一頁,因為分頁內容是不同的。

AMP 頁面的 canonical 設定和一般頁面有什麼不同?

需要雙向設定。原始頁面加上 <link rel="amphtml" href="AMP頁URL">,讓 Google 知道有加速版本。AMP 頁面加上 <link rel="canonical" href="原始頁URL">,告訴 Google AMP 頁不是獨立內容。如果只設單向,Google 可能把 AMP 頁當成獨立頁面索引,造成重複。

canonical 標籤跟 noindex 可以一起用嗎?

可以,但效果會相互衝突。canonical 說「讓這個頁面被索引但把信號轉到那裡」,noindex 說「不要索引這個頁面」。同時使用的話,多數搜尋引擎以 noindex 為優先,即不索引這個頁面、也不跟隨 canonical 信號。如果你的目標是不索引但轉移信號,應該用 301 轉址,而不是 canonical + noindex 的組合。

如果 canonical 目標頁本身也有 canonical,會形成 canonical chain 嗎?

會。A canonical → B,B canonical → C,這就是一條 canonical chain。Google 通常能跟隨 2 層以內的 chain,但超過 2 層後 Google 可能選擇 chain 中間的某個 URL 作為 canonical,而不是跟到最終目標。另一個問題是 canonical 指向一個有 301 轉址的 URL,Screaming Frog 會顯示「canonical to redirect」的警告。最好的做法是讓 canonical 直接指向最終目標,跳過所有中間跳轉。

Canonical 可以解決抄襲問題嗎?

不能,但常有人這樣期待。canonical 標籤只對「把 canonical 設上去的頁面」有效。如果別的網站抄你的內容,那個頁面的 canonical 是由對方控制的,對方不會設成指向你。真正幫助的方法是確保你的原始頁面比抄襲頁面更早被 Google 爬取和索引,以及透過 Google 的內容侵權申訴流程處理。

分享這篇文章

你可能也會想看