SEO優化

canonical 標籤是什麼?跟 301 轉址、noindex 的差別一次搞懂

多數人第一次聽到「重複內容」,第一個念頭多半是抄襲、是複製貼上別人寫好的文章。但事實剛好相反,一個網站最常見的重複內容,其實是自己每天默默生出來的。同一頁被加上追蹤碼、排序參數,或只差一個結尾斜線,就會被搜尋引擎當成好幾個看起來不同、內容卻一模一樣的網址。canonical 標籤要解決的正是這個處境。

問題是,搜尋引擎一旦看到好幾個「內容相同、網址不同」的頁面,該把哪一個當成正本、把排名訊號集中算給誰?canonical 標籤就是網站主動回答這個問題的工具,在網頁裡放一段標記,告訴搜尋引擎這個網址才是正本。少了它,排名訊號可能被拆到幾個網址上稀釋掉,讓你真正想被搜到的那一頁反而吃不到完整的分數。

接下來就先從重複內容怎麼冒出來講起,搞懂網址為什麼會分裂成好幾個版本,才看得懂 canonical 標籤怎麼寫、最容易被設錯在哪裡,以及它跟 301 轉址、noindex 這兩個工具怎麼分工;最後說明設定完成之後,該怎麼驗證它有沒有真的生效。

同一份內容會分裂成帶追蹤參數、結尾斜線、http 或 https 等多個網址,canonical 標籤指定其中一個當正本、把排名訊號集中算給它
同一份內容常被拆成好幾個網址,設定 canonical 就是指定其中一個當正本,把分散的排名訊號集中回同一頁。

重複內容是怎麼跑出來的?網址不只一個,內容卻是同一份

重複內容的問題,其實不是內容品質不好,而是同一份東西被拆成太多個網址代表。搜尋引擎一旦看到好幾個網址裝著幾乎一樣的內容,就分不出該把排名訊號算給哪一個,訊號因此被拆散、稀釋。檢索資源(crawl budget)也會被耗在一遍遍抓取同樣的東西上,排擠到真正該優先檢索的新文章或剛更新的頁面。

這些重複網址通常不是刻意做出來的,而是網站正常運作時自然冒出來的副產品,常見的成因包括:

  • 網址後面多了追蹤或廣告參數,像 ?utm_source=...?gclid=...
  • 清單頁按排序、篩選條件產生的參數,像 ?order=price?color=red
  • 同一頁網址有沒有結尾斜線,例如 example.com/pageexample.com/page/
  • 清單被分頁後產生的網址,像 ?page=2?page=3
  • 電商同一件商品因為顏色、尺寸、所屬分類不同,衍生出好幾條路徑
  • 同一個網站同時存在 HTTP 跟 HTTPS 兩個版本
  • 網域帶不帶 www
  • 行動版另外開一個子網域,例如 m.example.com

這些變體對使用者來說不痛不癢,畫面上看到的都是同一頁。但對搜尋引擎來說,只要網址不同,就是不同的頁面,得各自重新判斷值不值得收錄、算不算重複。

網址參數、排序與篩選:電商最容易踩的雷

假設有一家賣 T 恤的網路商店,同一批商品可以按尺寸、顏色篩選。主要清單頁網址可能是 yourstore.com/tshirts,篩尺寸後變成 yourstore.com/tshirts?size=small,篩顏色又變成 yourstore.com/tshirts?color=red。這三個網址畫面上的商品幾乎重疊,只是排列順序或呈現的子集不一樣,對 Google 來說卻是三個獨立的網址,得各自決定該不該收錄。

Ahrefs 解釋 canonical 標籤時,就拿這種篩選參數當典型範例,指出這類網址的內容重複度高,適合指定其中一個當標準版本。Google 在電子商務網址結構的說明裡也提到,只要商品子類是用查詢參數表示,就建議把省略查詢參數的那個網址設成 canonical,也就是回到最單純的 yourstore.com/tshirts,而不是讓每一種篩選組合都各自搶當正本。

沒有處理好,Google 可能只收錄其中一個版本,還未必是你想被搜到的那個,也可能把好幾個版本都收進索引,結果排名訊號被拆到幾個網址上,誰都吃不到完整的分數。

通訊協定與網域寫法:HTTP、HTTPS、www 都算不同網址

同一個網站,光是網址的通訊協定跟網域寫法,就能組合出四個版本:http://example.comhttps://example.comhttp://www.example.comhttps://www.example.com,如果還做了行動版子網域,另外還有 https://m.example.com 這個版本。畫面內容完全一樣,但在搜尋引擎眼裡,通訊協定、網域寫法只要有一個字不同,就是四個不同的網址。

Google 預設會偏好把 HTTPS 版本當成標準網址,前提是網站沒有出現訊號衝突。實際上最常讓 Google 反而選走 HTTP 版本的,是三個可以避免的失誤:HTTPS 頁面掛的 SSL 憑證無效或過期、HTTPS 頁面本身又把使用者轉址回 HTTP 版本、或是 HTTPS 頁面裡設定的 canonical 卻反過來指回 HTTP 網址。

這三種情形都會讓 Google 判斷 HTTPS 版本不可靠,退而選擇 HTTP 當標準網址,等於你想主推的安全版本,反而在搜尋結果裡被自己的設定往回拉。

canonical 標籤是什麼?它怎麼跟搜尋引擎溝通?

不管重複內容是怎麼冒出來的,處理的工具都是同一個。把這串標記寫進網頁的原始碼,搜尋引擎就會收到一個訊號:

<link rel="canonical" href="https://example.com/dresses/green-dresses" />Code language: HTML, XML (xml)

這是 canonical 標籤的完整語法,放在網頁 <head> 區塊裡,作用是在一組重複或高度相似的頁面裡,指定其中一個網址當成正本,把分散在各個網址上的排名訊號集中算給它。

有一個地方常被忽略,這段標記只有放在 <head> 區塊裡才會被採信,寫進 <body> 完全不起作用。除了寫進 HTML 之外,像 PDF 這類沒有 <head> 的非 HTML 檔案,可以改用 HTTP 標頭指定 canonical;不過這篇正文接下來聚焦最常見的 HTML 標籤寫法。

canonical 標籤還有一個關鍵性質,它本質上是提示,不是命令。Google 會把它跟轉址設定、sitemap、內部連結的寫法、HTTPS 偏好這些其他訊號放在一起綜合判斷,不是設了就一定照單全收,這點在後面「怎麼驗證」那節會用實例示範。

設定 canonical 的幾個原則,一次搞對

把 canonical 標籤真的設對,靠的不是語法本身多複雜,而是幾條簡單但常被忽略的原則。先把這幾條記住,再往下看三個最容易卡關的情境。

canonical 網址一律用完整的絕對路徑,像 https://www.example.com/dresses/green/green-dress.html,不要只寫 /dresses/green/green-dress.html 這種相對路徑。Google 雖然支援相對路徑,但長期下來容易在複製程式碼、換網域、換測試站時出錯,例如不小心讓測試站的網址被當成正式站的標準網址收錄進去。

同一個頁面只能有一個 rel="canonical",同時出現兩個以上,Google 會直接把它們全部忽略,等於沒設。canonical、站內連結、sitemap 這三個地方也要指向同一個網址,別讓 sitemap 列出 A 網址、canonical 卻指向 B。這種訊號互相矛盾,Google 不知道該聽哪一邊,結果就是自己判斷,不一定選到你想要的那個。

自我參照:就算沒有重複版本,也該指向自己

canonical 標籤最常見的誤解,是覺得「這頁沒有重複版本,不用設」。但業界跟 Google 都建議反過來設,作法是不管這一頁目前有沒有查到重複版本,canonical 都固定指向自己這個網址,這就是所謂的自我參照 canonical。

這麼做不是多此一舉。等於直接告訴 Google,這就是你要被索引的那個版本。這還能防一件容易被忽略的事,網址帶著追蹤參數被分享出去、或被其他網站連結過去時,自我參照的 canonical 能避免這條帶參數的網址被搜尋引擎當成一個獨立頁面收錄進去。

Google 的 John Mueller 也提過,自我參照 canonical 能讓 Google 更清楚知道你希望被索引的是哪一個版本、用哪種網址寫法。

電商同一件商品,canonical 該指向哪一條路徑?

電商最常遇到的具體決策,是同一件商品因為顏色、尺寸不同,衍生出好幾個網址時,canonical 該指到哪一條路徑。常見的作法有兩種,一種是把子類寫進路徑裡,像 /t-shirt/green;另一種是用查詢參數表示,像 /t-shirt?color=green

如果子類是用查詢參數表示,建議把省略查詢參數的那個網址設成 canonical,也就是讓 /t-shirt?color=green 的 canonical 指回 /t-shirt。但如果每個子類本身就有各自獨立的商品頁,而且各自有獨立的搜尋需求,例如綠色跟紅色的搜尋量差很多、各自有專屬的產品介紹,就不該讓它們互相 canonical 掉彼此,這種情況下每個子類頁面都該自我參照,各自留在索引裡,而不是全部集中到一個版本。

分頁內容的 canonical,不是全部指回第一頁

分頁內容有一個很普遍的誤區,不少人以為列表分頁,像第 2 頁、第 3 頁,canonical 應該統一指回第一頁,反正核心內容一樣。這其實正好是 Google 的文件裡明講「不要」做的事,因為每一頁列出的商品或文章通常不一樣,把 canonical 指回第一頁,等於告訴 Google 別收錄第 2 頁以後的內容,那些內容也就從索引裡消失了。

比較妥當的處理方式,是讓每一頁都設定自己的自我參照 canonical,頁與頁之間則靠普通的 <a href> 超連結串起來,讓爬蟲能一路順著連結,找到後面所有的分頁內容。過去曾經流行用 rel="next"rel="prev" 這組標記告訴搜尋引擎分頁的順序,但 Google 已經在 2019 年正式表明不再使用這組標記,不必再糾結要不要另外補上。

這些 canonical 設定錯誤,正在悄悄拖累你的排名

前面講的是原則,接下來看反例。實務上最容易犯、影響也最大的幾個 canonical 錯誤,通常不是故意的,而是設定時沒留意某個細節就這樣上線了。

三個最常見的 canonical 設定錯誤:整站都指向首頁吃掉內頁、跨網域亂指把權重送給別人、canonical 與 noindex 同時掛導致訊號互相矛盾
canonical 最常見的三個錯誤,都會讓排名訊號跑錯地方:整站指向首頁吃掉內頁、跨網域送走權重、和 noindex 掛在一起互相打架。

錯誤一:整站 canonical 都指向首頁,內頁全部被吃掉

這個錯誤通常是這樣發生的,佈景主題或某個外掛設定出錯,或是程式邏輯本身寫錯,負責產生 canonical 網址的函式忘了帶入當前頁面的正確參照對象,直接抓成首頁的網址。結果每一個內頁都等於在告訴 Google,請把排名算給首頁,內頁一頁接一頁從索引裡消失,最後只剩首頁還留在搜尋結果裡。

Google 在修正標準化問題的文件裡,直接點名這類狀況,部分內容管理系統或外掛程式,會用不正當的方式做網址標準化,結果指向非預期的網址。發現整站內頁流量或收錄異常下滑時,canonical 是否被整批誤指到首頁,值得列進第一輪排查清單。

錯誤二:跨網域亂指,把權重送給別人的網站

canonical 標籤本來就可以指到別的網域,不只能指同網站內的網址。這個彈性偶爾派得上用場,但被誤用的後果也不小,常見的意外情況是複製別的網站的程式碼卻沒改掉裡面殘留的網址,結果自己的頁面 canonical 指到別人網站;更嚴重的是網站遭入侵,被植入惡意的跨網域 canonical 標記,通常會指向代管惡意內容或垃圾資訊的網址。

不管哪一種,最後的結果都一樣,原本該留在自己頁面上的排名訊號被送給了別的網址,嚴重時 Google 甚至會讓那個被指定的外部網址,取代自己在搜尋結果裡原本該有的位置。

這裡也有一個常被誤會的地方,如果目的是避免內容授權夥伴轉載造成的重複,canonical 標籤反而不是 Google 建議的做法,因為轉載出去的頁面版面通常跟原文差很多,真正有效的解法是請合作方直接封鎖搜尋引擎收錄轉載內容,而不是靠 canonical 指回原文。跨網域 canonical 只適合用在你真的確定、也真的同意讓對方網址代表這份內容的情境。程式碼異動後,最好重新檢查一次原始碼裡的 canonical 標記還在不在、指到哪裡。

錯誤三:canonical 和 noindex 同時掛,訊號互相打架

另一個常見的衝突,是同一個頁面同時設了「canonical 指向別的網址」又設了「noindex」。這兩個指令的方向其實互相矛盾,canonical 說這頁的訊號請算給別的網址、但這頁本身還留著,noindex 卻說這頁乾脆別收錄。

不少 SEO 工具遇到這種情況會直接擇一處理,只要頁面被標記為 noindex,就乾脆不輸出 canonical 標記,因為兩者放在一起沒有意義。Google 自己的建議方向也一致,不建議用 noindex 去挑選一個網站內該保留哪個標準網頁,因為這會讓頁面整個被排除在搜尋結果外,想集中訊號的話,rel="canonical" 才是該用的解法。

實務上記住一個原則就好,一個頁面只選一個方向,要嘛用 noindex 讓它別被收錄,要嘛用 canonical 指定訊號該集中到哪裡,不要兩個同時上。

canonical、301 轉址、noindex,三者該用哪一個?

這三個工具常被搞混,因為都在處理網址該怎麼被搜尋引擎對待這件事,但要問的問題各自不同。判斷該用哪一個,只要先想清楚一件事:這個頁面還要不要留著讓使用者打得開、看得到?

Google 自己的文件裡,把三種標準化方法的訊號強弱做了排序,轉址是強訊號、canonical 連結也是強訊號,sitemap 則只是弱訊號,Google 得自己判斷是否採信。但訊號強弱只是技術面的參考,實務上三者的用途完全不同,不能只看訊號強弱就互相取代。

canonical 保留頁面只集中權重、301 轉址讓舊網址打不開徹底汰換、noindex 留著頁面但不給搜尋引擎收錄,三者用途各不同
先看這個頁面還要不要留著讓人打得開:要留只想集中權重用 canonical、要淘汰舊網址用 301 轉址、要留頁面但不被搜到用 noindex。

想保留頁面、只集中權重,用 canonical

同一件商品不同顏色、同一份清單不同排序方式,這類頁面對使用者來說各自都有存在的理由,使用者都能正常打開、正常瀏覽,你只是希望搜尋引擎把排名訊號集中算給某一個版本。這正是 canonical 標籤設計出來要處理的情境,頁面留著,訊號集中。

想徹底汰換舊網址,用 301 轉址

改版、換了網址結構,或舊網址已經沒有存在的必要時,就直接把使用者和爬蟲都永久導到新網址,讓舊網址從此打不開。Google 認定 301 轉址是訊號最強的標準化做法,代價也很明確,舊網址真的沒了,只適合用在確定要淘汰的重複頁面,不適合還想讓使用者能打開的頁面。

想留住頁面卻不給收錄,用 noindex

內部搜尋結果頁、會員專屬頁、感謝頁這類頁面要留給使用者用,卻不希望它出現在搜尋結果裡,這種不想被搜到的需求,canonical 處理不了。canonical 只是把訊號集中到別的網址,並不保證這頁真的不出現在搜尋結果裡,要讓一個頁面確實不被收錄,得靠 noindex 這個工具。

這三個工具想清楚、canonical 也設好之後,還有最後一件事不能省——確認它有沒有真的生效。

用 Search Console 免費驗證 canonical 有沒有生效

設定完 canonical,不代表它一定被 Google 採用,這件事得親自查證,不是設完就能放著不管。Search Console 裡的網址檢查工具就是做這件事的地方,在 Search Console 頂端的檢查列貼上完整網址,就能查到這個網址目前的索引狀態。

報表裡有兩個欄位特別重要。「使用者宣告的標準網址」,是你自己設定的那個網址;「Google 所選的標準網址」,則是 Google 實際判斷、真正拿去代表這組頁面的網址。兩者一致,代表設定生效;不一致,代表這個頁面的各種訊號在打架,值得回頭檢查。

報表裡常見的幾種狀態,各自代表不同的問題。「重複網頁,使用者沒有選取標準網頁」代表你根本沒設 canonical,Google 只好自己挑;「重複網頁,Google 選擇的標準網址與使用者不同」代表你設了,但 Google 沒採信;「重複網頁,提交的網址未獲選為標準網址」則常出現在你主動要求 Google 檢索某個網址,結果它還是被歸進別的標準網址底下。

發現不一致,可以用「要求建立索引」請 Google 重新評估,不過這個功能每天有配額上限,不是想用幾次就用幾次。

Google 選的標準網址跟你設的不一樣,代表什麼?

這是很多人第一次看到「Google 所選的標準網址」跟自己設定的不一樣時,會冒出的疑問,設定失敗了嗎?其實不一定。前面提過,canonical 標籤本質上是一個提示,Google 會把它跟內容品質、內部連結、其他訊號放在一起綜合判斷,不是設了就百分之百照辦。

Google 自己給的建議是,在動手排查、急著改設定之前,先想一下,Google 選的那個網址,對從搜尋結果點進來的使用者來說,是不是其實更合理。如果答案是肯定的,那 Google 的判斷可能反而比你原本設定的更貼近使用者需求,不一定要硬改回來。真正該回頭檢查的,是排除掉這種情況之後,還是覺得 Google 選錯了、訊號打架的狀況。

而且就算修正了問題,Google 重新評估也需要時間。文件裡提到,重複網頁可能會在重複叢集裡被保留最多兩週,不是改完馬上就會反映出來,得給它一點時間。

canonical 標籤真正的價值,從頭到尾都是同一件事,集中訊號。把分散在各個重複網址上的排名訊號,匯整到你真正想被看到的那一頁。它不是替排名加分的魔法按鈕,設對了也不會讓排名瞬間往上跳,而是把地基打乾淨的工具,地基不乾淨,後面做再多內容優化,力氣都會被分散掉一部分。

包括 Google AI Overview 在內,現在的生成式搜尋結果,一樣建立在同一套索引與網址訊號之上。網址訊號乾淨、canonical 設對,不只讓傳統排名受益,也讓內容被 AI 摘要引用時,引用的是你真正想被看到的那個版本,而不是被參數或分身網址分走了原本該屬於它的訊號。

資料來源
  1. Canonical Tags Explained: Why They Matter For SEO — Ahrefs
  2. Designing a URL Structure for Ecommerce Websites — Google
  3. Google: Self-Referencing Canonicals Are Not Critical — Google(John Mueller)
  4. How to Specify a Canonical with rel="canonical" and Other Methods — Google
  5. Fix Canonicalization Issues — Google
  6. Pagination Best Practices for Google — Google
  7. Avoid Duplicate Content — Google