如果你只能替 canonical 記住一條原則,那就是:每一頁都先指向自己,把自我指向當成預設值,而不是只在「有重複頁」時才處理的例外。canonical 看起來只是一行 link,卻是我們做技術稽核時翻車率最高的地方之一。設對了,搜尋引擎知道該把權重集中到哪一頁;設錯了,你辛苦寫的內容會被指到別頁去,甚至整組頁面互相打架。這篇先講清楚自我指向的原則,再把我們實際遇過最多的五種錯誤攤開來,讓你在改站之前先避開。這些錯誤到 2026 年依然天天在網站上出現,不是舊聞,而且愈是規模大、改版次數多的網站,愈容易累積出這類問題。

1. 為什麼每頁先做好自我指向

很多人以為 canonical 只有在「有重複頁」時才需要設。我們的立場相反:每一頁都應該先指向自己,這是預設,不是例外。因為同一份內容常常能透過好幾個網址被打開,你不主動宣告哪個是本尊,搜尋引擎就得自己猜,猜錯的代價是權重分散。

1.1 自我指向的意思,比你想的單純

自我指向就是每一頁的 canonical 指回自己的標準網址。它等於對搜尋引擎說「這一頁就是本尊,請索引我這個網址」。這件事之所以重要,是因為同一份內容常常能透過好幾個網址被打開,例如帶追蹤參數的、大小寫不同的、有沒有結尾斜線的、有沒有帶 index 檔名的。你不主動宣告哪個是本尊,搜尋引擎就得自己猜,猜錯的代價是權重分散,甚至它挑中的標準版本跟你想被看到的那個不一樣。我們做稽核時看過一個匿名的服務型網站,同一篇文章因為後端傳輸方式不統一,長出好幾個大同小異的網址,每個都沒設 canonical,最後搜尋引擎收錄的是一個帶著多餘路徑的版本,看起來很不專業。自我指向就是用來堵住這種模糊地帶。

<link rel="canonical" href="https://example.com/blog/seo-canonical/" />

1.2 canonical 網址要絕對而且統一

canonical 我們一律用絕對網址,含通訊協定與網域,不用相對路徑。同時整站的網址規則要統一:要嘛都帶結尾斜線、要嘛都不帶;要嘛都用 https,都用帶 www 或都不帶。canonical 指向的那個版本,必須跟你實際想被索引、以及網站內部連結所指的版本一致。這三者不一致,是很多混亂的源頭。根據我們的服務經驗,把網址規則先在一份規格文件裡定死,再讓 canonical、內部連結、sitemap 全部照這份規格走,比事後一個個抓不一致省事太多。

1.3 自我指向不是萬靈丹,怎麼判斷該不該改指他頁

自我指向是預設,但遇到真正的重複內容時,要把重複版本的 canonical 指向那個你選定的主要版本。判斷標準是內容是否實質相同。我們的做法是先問:這兩個網址呈現給使用者的內容,有沒有明顯差異、有沒有各自的存在理由。若幾乎一樣,就讓次要版本指向主要版本,把權重集中;若各有用途,就各自自我指向並用其他方式區隔。這個判斷不難,難的是團隊沒有共識,有人覺得像就合併、有人覺得不像就保留,最後標記東指西指,所以我們會先把「什麼叫實質相同」寫成可對照的例子再動手。

1.4 canonical 是建議不是命令,別把它當排名開關

還有一個常見誤解要先澄清:canonical 不是排名因子,設了它不會讓頁面排名變好,它只是告訴搜尋引擎「這組網址裡,以哪一個為準」。它的價值在於整理重複、集中權重,而不是加分。我們遇過客戶把 canonical 當成某種排名開關,到處亂指,結果反而把權重導到不該集中的頁面。正確的心態是把它當成一個「誠實的自我介紹」:每一頁老實說自己是誰,重複的頁老實說自己以誰為準。另外要記得,canonical 對搜尋引擎是強烈建議而非強制命令,它會連同內部連結、sitemap、轉址一起綜合判斷,所以與其鑽研怎麼用 canonical 施壓,不如把所有訊號調成一致,這才是讓它生效的根本。

2. 錯誤一:整站 canonical 都指向英文首頁

這是我們看過最誇張、影響也最大的錯誤,通常出在模板寫死。它的可怕之處在於頁面看起來全都正常,錯誤藏在原始碼裡,不檢視就抓不到。

2.1 為什麼會發生這種事

工程師在共用版型裡把 canonical 寫成固定值,可能是首頁網址、也可能是某個語系的首頁,結果全站每一頁的 canonical 都指到同一個網址。我們遇過一個多語系的匿名客戶,所有內頁的 canonical 全部指向英文首頁,等於告訴搜尋引擎「這幾百頁其實都是同一頁」。這種錯誤幾乎都是模板層級的疏失,一旦 canonical 被寫進共用的頁首元件又填了固定值,就會一次套到所有頁面上,破壞力遠比單頁設錯大。

2.2 它造成的後果有多嚴重

後果是除了那個被指向的首頁之外,其他頁面幾乎都拿不到索引機會。你的產品頁、文章頁再好,都被自己的 canonical 判了緩刑。這種錯誤肉眼不容易發現,因為頁面看起來正常,得檢視原始碼才會抓到。我們的檢查方式是抽樣不同模板的頁面,逐一看 canonical 是不是各自指回自己,只要發現多頁指向同一網址,就是這個病。這也是為什麼我們會把 canonical 的抽查放進每次技術稽核的固定項目,因為它出錯時幾乎沒有外顯症狀,全靠主動檢視才攔得住。

2.3 怎麼抓出模板寫死的 canonical

這種錯誤既然藏在原始碼裡,抓它就得從原始碼下手。我們的檢查方式是抽樣不同模板的頁面,逐一看 canonical 是不是各自指回自己,只要發現多頁指向同一網址,就是這個病。實務上有幾個省時的做法:用爬取工具把全站的 canonical 一次抓出來,按 canonical 目標網址分組,一旦看到某個網址被幾百頁同時指向,幾乎可以確定是模板寫死。也可以直接檢視幾個代表頁的原始碼,比對 canonical 裡的網址跟當頁網址是否相同。我們會建議團隊在每次改模板、換佈景主題或搬家之後,把 canonical 抽查列為固定動作,因為這類錯誤往往不是內容編輯造成的,而是工程端改了共用元件時不小心帶進來的,內容團隊根本不會察覺。

3. 錯誤二:canonical 互相指來指去,形成循環

循環指向比較隱蔽,但一樣會讓搜尋引擎放棄判斷,把你設的 canonical 當成沒設。

3.1 循環是怎麼繞出來的

常見情境是 A 頁的 canonical 指向 B,B 頁的 canonical 又指回 A;或是牽扯到轉址,網址 A 轉到 B,B 的 canonical 卻又指回已經被轉走的 A。搜尋引擎順著 canonical 走,繞了一圈回到原點,找不到明確的本尊,只好用自己的判斷,你設的 canonical 等於失效。這種循環在改版過程中特別容易出現,因為新舊網址的規則交疊,一邊做了轉址、一邊又留著舊的 canonical,繞起來自己都看不出問題。

3.2 我們用一張表釐清正確與錯誤的指向

情境 錯誤做法 正確做法
兩頁內容相同 A 指 B、B 指 A 兩頁都指向選定的同一個主要版本
網址已轉址 新址 canonical 指回舊址 新址自我指向,舊址 301 到新址
分頁系列 第 2 頁 canonical 指回第 1 頁 每頁自我指向

釐清循環的關鍵,是把 canonical 的方向畫成一條線,確認它最後停在一個會自我指向的網址上,而不是繞回起點。如果你畫到一半發現線又折回去,那就是循環,通常代表有兩套規則在打架,要先找出哪一套是多餘的。

3.3 轉址與 canonical 別叫它們做同一件事

我們常提醒團隊:301 轉址是「把使用者和搜尋引擎帶去另一頁」,canonical 是「這頁還在,但請以另一頁為準」。兩者用途不同。把已經 301 的舊網址還設 canonical,或是想用 canonical 取代該做的轉址,都會製造矛盾訊號。同一組網址,只讓其中一種機制主導。想讓舊網址徹底退場就用 301,想保留兩個網址都可存取但合併權重才用 canonical,混用只會讓搜尋引擎難以判斷。

3.4 改版與轉址交疊,是循環最常發生的時機

循環指向很少是一次設定就出現的,它通常是多次改版疊加出來的。第一次改版把 A 轉到 B、設好 B 的 canonical;第二次改版又把 B 轉到 C,卻忘了更新 B 的 canonical,於是 B 的 canonical 還指著舊的 A,整串關係就繞成了結。我們的做法是每次做轉址時,連同受影響頁面的 canonical 一起重新盤一次,確認「轉址的終點」跟「canonical 的終點」是同一個網址。一個實用的檢查習慣是:拿幾個曾經改過網址的頁面,實際在瀏覽器打開,看最後停在哪個網址、那個網址的 canonical 又指向誰,順著走一遍就知道有沒有繞回去。改版次數越多的老網站,越需要這道檢查,因為歷史包袱會一層層疊在 canonical 與轉址的交界上。

4. 錯誤三到五:與 noindex 打架、參數失控、分頁指錯

剩下三種錯誤我們放在一起講,因為它們共通點都是「訊號互相矛盾」。

4.1 先搞懂這三種錯誤的共同點

在逐一拆解之前,先點出這三種錯誤的共同結構:它們都不是單一指令寫錯,而是兩個以上的訊號互相打架,逼搜尋引擎在矛盾中自己做決定。canonical 與 noindex 是「要整合」跟「別收錄」打架;參數失控是「每個網址都說自己是本尊」互相打架;分頁指錯是「權重集中」跟「後頁要被看見」打架。理解這個共同點,修法就有一條總綱:任何一頁,你都要先問自己「我到底希望搜尋引擎怎麼對待它」,把意圖定清楚,再讓所有相關訊號朝同一個方向走。我們排查這類問題時,不會急著改某一行標籤,而是先把一頁牽涉到的 canonical、noindex、轉址、sitemap 全攤開,看它們講的是不是同一件事。

4.2 錯誤三:canonical 與 noindex 同頁衝突

同一頁同時設了 canonical 指向別頁、又掛了 noindex,這是自相矛盾的指令。canonical 是在說「請把權重整合到那一頁、這頁是它的版本」,noindex 卻是在說「這頁別收錄」。搜尋引擎收到兩個打架的訊號,處理結果難以預期。我們的原則很簡單:想整合權重就用 canonical、單獨保留這頁被索引;想徹底不收錄就用 noindex、而且這頁的 canonical 就自我指向,別再指去別處。兩種意圖不要疊在一起,先決定你到底是要合併還是要排除,再選對應的那一個機制。

4.3 錯誤四:帶參數的網址各自為政

追蹤參數、排序參數、篩選參數,會讓同一份內容衍生出無數個網址。若這些帶參數的網址都自我指向,等於每一種參數組合都被當成獨立頁面,重複內容瞬間爆量。正確做法是讓帶參數的版本,canonical 指向乾淨的、不帶參數的主網址。我們處理過一個匿名的零售型網站,光是排序與篩選就生出上千個變體網址,全部指回乾淨網址之後,索引才回到該有的樣子。

網址:https://example.com/products/?sort=price&utm_source=news
canonical 應指向:https://example.com/products/

4.4 錯誤五:分頁系列把 canonical 全指向第一頁

列表的第二頁、第三頁,很多人習慣把 canonical 全指回第一頁,想把權重集中。這其實會讓第二頁以後的內容不被獨立看待,那些只出現在後面幾頁的項目,可能就此被忽略。我們的做法是分頁的每一頁都自我指向,讓每頁各自被理解為系列的一部分,而不是硬把它們壓成同一頁。下面這張表整理我們對這三種錯誤的處理原則。

錯誤 矛盾訊號 我們的修法
canonical 與 noindex 衝突 又要整合又要不收錄 依意圖二選一,不疊加
參數網址失控 每種參數都成獨立頁 帶參數版本指向乾淨主網址
分頁全指第一頁 後頁內容被吞掉 每頁自我指向

把這三種錯誤擺在一起看,你會發現它們其實是同一個毛病的不同長相:你給了搜尋引擎一組自相矛盾的指令。修法的共通點也只有一個,就是先想清楚你對這一頁真正的意圖,再讓所有訊號都朝那個意圖對齊。

4.5 用 JavaScript 動態塞 canonical 的風險

還有一種比較新、也比較隱蔽的狀況,是 canonical 不是寫在初始 HTML 裡,而是靠 JavaScript 在瀏覽器端動態插入或改寫。這會帶來兩個風險:一是搜尋引擎若在執行腳本前就抓取,可能讀到錯的或根本沒有 canonical;二是動態邏輯一旦寫錯,容易在不同情境下塞出不一致的值。我們的建議是 canonical 盡量寫死在伺服器回傳的原始 HTML 裡,不要交給前端動態處理。如果技術架構上真的得用 JavaScript,至少要用搜尋引擎的網址檢查工具,看它實際算繪後讀到的 canonical 是不是你預期的那一個。我們在實務上看過單頁式應用因為前端改寫 canonical 的邏輯有漏洞,導致同一類頁面有的指對、有的指到框架預設的首頁,這種錯誤光看原始碼還不一定抓得到,得看算繪後的結果。

4.6 sitemap 裡只放 canonical 網址

最後補一個容易被忽略的一致性問題:你的 XML sitemap 裡,應該只放會自我指向的 canonical 網址,不要把帶參數的、被 canonical 指向別頁的版本也丟進去。sitemap 等於你主動告訴搜尋引擎「這些是我想被索引的頁」,如果裡面混進了非標準版本,就跟你設的 canonical 自相矛盾。我們處理重複內容時,會把 canonical、內部連結、sitemap 三者放在一起對,確認它們指的都是同一個標準版本。這三個訊號只要有一個走鐘,搜尋引擎就得在矛盾中自己選一個,而那個選擇不一定是你要的。

5. 常見問題

5.1 canonical 設錯,搜尋引擎一定會照我寫的做嗎?

不一定。canonical 對搜尋引擎來說是強烈建議而非強制命令。如果你的 canonical 跟其他訊號(例如內部連結、轉址、sitemap)互相矛盾,搜尋引擎可能會選一個它認為更合理的版本。與其賭它會不會聽你的,不如把所有訊號調成一致。這也是為什麼我們不建議只靠 canonical 去救一個結構混亂的網站,根本的內部連結與網址規則才是地基。

5.2 我沒設 canonical 會怎樣?

沒設的話搜尋引擎會自行挑一個它認為的標準版本,通常還算合理,但一旦你的內容有多個網址入口,就等於把選擇權交出去。我們建議還是每頁補上自我指向,主動宣告本尊,減少被誤判的機會。尤其是帶參數或有大小寫差異的網站,交出選擇權的風險會明顯放大。

5.3 canonical 可以跨網域指向別人的網站嗎?

技術上可以,用於內容確實同步授權到另一個網域的情境,例如授權轉載。但一般網站很少需要這樣做,設錯反而會把自己的頁面權重讓給別的網域。除非你很清楚在做什麼,否則我們不建議跨網域設 canonical,這類設定一旦出錯,損失的是整頁的索引資格。

5.4 canonical 網址帶結尾斜線和不帶,算不算不一樣?

算。對搜尋引擎而言,有無結尾斜線、大小寫、有無 www,都可能被視為不同網址。所以 canonical 一定要跟你網站實際採用、也實際能開啟的那個版本完全一致,連斜線都不能差。我們檢查 canonical 時,會特地複製貼上網址去瀏覽器打開,確認它真的能到達,而不是只看字串長得對。

5.5 我改了 canonical 之後多久會生效?

沒有固定時間,取決於搜尋引擎多久重新抓取這些頁面。你可以透過網址檢查工具主動請求重新檢索,加快被看到的速度,但整組頁面完全反映新設定通常需要一段時間,不會立刻。改完之後別急著下結論說沒效,給它幾輪抓取的時間再觀察。

5.6 canonical 和 hreflang 會不會打架?

會,如果設錯的話。多語系網站每個語系版本應該各自自我指向,再用 hreflang 標明彼此的對應關係。若你把某個語系版本的 canonical 指向另一個語系,等於告訴搜尋引擎那個語系不必獨立索引,hreflang 的對應就亂了。兩者要一起規劃,不能各做各的。我們會把這兩項放在同一張檢查表裡一起驗,避免各自看起來都對、合起來卻衝突。

5.7 我改版換了網址結構,canonical 該怎麼跟上?

換網址結構時,舊網址要用 301 永久轉到新網址,新網址則設好自我指向的 canonical,兩件事一起做。我們看過有人只做了轉址卻忘了檢查新頁的 canonical,結果新頁的 canonical 還殘留著舊網址,等於一邊把人帶到新頁、一邊又說以舊頁為準,訊號自相矛盾。改版是 canonical 最容易出錯的時機,我們會把它列為改版後必查的項目。