WebWork

Canonical 標準網址處理重複或相似 URL 的代表頁判斷。決策表區分自指、參數頁、內容差異與 301,並補上標籤寫法及上線後的驗證條件。

Canonical 標準網址 SEO:自指與參數頁代表頁怎麼選?

設定 Canonical 後,先確認代表頁與參數頁狀態

修正上線後,代表頁的 head 裡是一行指向自己的 rel="canonical",同群組的參數頁則把 href 寫成代表頁的乾淨網址,重複的 URL 收斂成一個代表。設定方式要看內容關係決定:追蹤、篩選、排序或規格參數產生相同或非常相似的內容,併到同一個代表頁;內容明顯不同就各自獨立。舊網址還要供人開啟,留著並用 Canonical 表達偏好;永久淘汰才換成 301。上線只算完成一半,後面仍要確認 render 後輸出的是那個絕對網址,以及 Search Console 裡 Google 選定的標準網址與頁面宣告是否同一個。

頁面狀態可以先從原始碼看出來。代表頁的 rel="canonical" 等於自己的網址,參數頁的 href 不帶 ?utm_source、?color、?sort 這類查詢字串。兩邊都出現,才算把代表偏好寫進頁面,而不是只改了其中一頁。

Google 搜尋中心的文件把重新導向與 rel="canonical" 都列為強烈訊號,Sitemap 列為微弱訊號,並說明這些方法可以疊加,卻都不是必要設定;沒有指定時,Google 會自行判斷哪個版本適合顯示。Canonical 因此是強烈但非強制的偏好表達,寫了不代表搜尋引擎一定採用。

驗證分成兩層,混在一起看會誤判。第一層是頁面輸出:head 裡有沒有一行 canonical、href 是不是代表頁的絕對網址、有沒有被 JavaScript 改掉。第二層是搜尋引擎的選擇:Search Console 會分別顯示使用者宣告的標準網址與 Google 選定的標準網址。

釐清 Canonical 標準網址處理的重複內容範圍

Canonical 標準網址處理的範圍,是一份內容同時掛在多個網址下的情況。同一個商品頁可以用 ?color=red、?size=10、?utm_source=facebook 開啟,內容幾乎一樣,網址卻各自獨立;Canonical 就是在這組網址裡指名哪一個代表全部。

重複的來源比想像中常見:

  • 協定與主機名稱版本,例如 http 與 https、www 與非 www
  • 網址結尾少了或多了一個斜線,/shoes 與 /shoes/
  • 廣告與社群帶進來的追蹤參數,?utm_source、?gclid
  • 篩選、排序產生的查詢字串
  • 同一商品同時出現在多個分類目錄下
  • 行動版或 AMP 版本的獨立網址

Canonical 的作用是在保留網址的同時,把訊號收在一個代表頁上,順便讓爬蟲不用把時間花在內容一樣的版本。

效力有一條界線:Canonical 用來處理相同或非常相似的內容。Google 會依內容相似度判斷哪些網頁算重複,兩頁主題差得遠,只因為網址長得像就指到同一頁,代表關係不成立。跨網域也能用,內容授權轉載到其他網站時,轉載方可以把 Canonical 指回原始頁。

用決策表選出自指頁與參數頁的代表頁

判斷從一個問題開始:這個網址是群組的代表頁,還是掛在代表頁底下的變體。代表頁指向自己,變體指向代表頁。

標準頁自我指向,參數頁不拿含參數的網址指向自己

自我參照的 Canonical 只放在標準頁上。參數頁常見的錯誤寫法,是模板直接抓當前網址輸出成 canonical,於是 ?color=red 這一頁的 canonical 也是 ?color=red,等於宣告自己是代表,同群組的其他網址完全沒有收斂。正確的做法是讓模板產生標記時排除追蹤與篩選變數,輸出不含查詢字串的代表網址。

AMP 與非 AMP 兩版互相標示

站上同時保留 AMP 與非 AMP 兩個版本,關係要寫在兩邊:非 AMP 頁用 rel="amphtml" 指向 AMP 頁,AMP 頁用 rel="canonical" 指向非 AMP 頁。

把幾種常見情況排成一張表,決策會清楚一些。

做法適用情況驗證方式代價
代表頁自我指向該頁是 URL 群組的代表頁,例如商品主頁、文章頁head 內的 canonical 等於該頁的絕對網址模板要能排除查詢字串,否則參數頁會跟著一起自我指向
參數頁指向代表頁追蹤、篩選、排序或規格參數產生相同或非常相似的內容,且頁面仍需存在參數頁原始碼的 href 是不含查詢字串的代表網址參數頁本身不承接訊號,流量與連結要靠代表頁累積
內容不同的頁面各自獨立參數頁有獨立主題,或內容與代表頁明顯不同兩頁的 canonical 各自指向自己,內容比對確認不相似URL 群組變多,需另外安排內部連結與 Sitemap 收錄
AMP 頁與標準頁互相標示站上同時保留 AMP 與非 AMP 版本AMP 頁有指向標準頁的 canonical,標準頁有指向 AMP 頁的 amphtml兩份輸出都要維護,其中一邊改版就會不一致
舊頁 301 到代表頁舊 URL 要永久淘汰,不再供人開啟回應標頭為 301,Location 指向代表頁舊網址與其訊號一併退場,不能再當備援頁

表裡第三列最容易被跳過。參數頁有獨立主題、獨立文案或自己的庫存資訊,硬指向乾淨網址,等於把一個有搜尋需求的頁面藏起來。這類頁面先各自指定代表,再用內部連結把彼此的關係講明白。

在 HTML head 寫入絕對網址並檢查標籤

指定標準網址的 HTML 寫法只有一行,位置與網址形式卻常出錯。link 元素要放在 HTML 的 head 區段,href 用含協定與網域的絕對網址,一頁只留一個 canonical。

實際輸出像這樣:<link rel="canonical" href="https://example.com/shoes" />。相對路徑雖然瀏覽器看得懂,Google 文件仍建議避免,理由是長期下來容易造成問題,例如無意間讓測試網站受到檢索。

標籤放 head,href 寫絕對網址

head 以外的位置不會被採用,後台只開放內容編輯區的網站,把標籤貼在文章裡等於沒設。

JavaScript 插入的標記要在 render 後確認

由 JavaScript 產生 canonical 的頁面,檢視原始碼看不到那一行,因為原始碼是伺服器回傳的版本,標記是後來才被塞進 head。這時要用瀏覽器的開發者工具看 render 後的結果。非 HTML 檔案,例如 PDF,改用 HTTP 回應標頭裡的 Link 帶 rel="canonical",那是 HTML 元素之外的另一條路。

依舊頁是否保留選擇 Canonical 或 301

舊網址要不要留,決定用 Canonical 還是 301。兩者都在處理重複,結果不同:Canonical 讓舊頁繼續存在、繼續供人開啟,只把代表偏好送給搜尋引擎;301 把使用者和爬蟲一起送到新網址,舊網址等於退場。Google 文件把重新導向限定在淘汰重複網頁的情況,講的就是這個分界。

頁面仍需存在時保留並用 Canonical

頁面留著,Canonical 指向代表頁,訊號集中,使用者點的還是原本那一個網址,不會被中途帶走。

要淘汰的舊網址,301 的目標必須是同一組的代表頁,不能一邊 301 到 A、一邊 Canonical 指 B。兩套訊號指向不同目標,搜尋引擎只能挑一個,Search Console 於是出現宣告值與選取值不同的提示。這種衝突不會因為 canonical 寫得漂亮而消失。

驗證 Google 選定的標準網址是否一致

驗證的順序從頁面往外推。先確認每個代表頁回應 200、head 裡的 canonical 等於自己的絕對網址;再確認參數頁的 canonical 指向代表頁而不是自己;最後確認 Sitemap、站內連結與 301 的目標都落在同一個代表 URL 上。

訊號一致比訊號數量重要。Canonical 指 A、Sitemap 列 B、站內連結連 C,三份資料各自說一種答案,於是出現宣告與選取不同步的結果。這種情況先修一致性,再回頭檢討標籤寫法。

Search Console 的「網頁」報表把收錄狀況分類,其中「替代頁面(有適當的標準標記)」列出的是 Google 認為屬於某個代表頁的網址。搭配使用者宣告的標準網址與 Google 選定的標準網址兩個欄位對照,就能看出哪一組還沒對上。值一致,代表這組設定已被採用;值不同,回到 URL 群組、內部連結與訊號衝突重新檢查。

驗證通過的畫面很具體:代表頁以自己的網址被收錄,參數頁歸在替代頁面,兩邊的宣告值相同。到這裡,代表頁決策才算真的落地。由技術 SEO 接手代表頁決策與驗證

站方可逐項確認:代表頁是否回應 200,且 canonical 是否等於自己的絕對網址?參數頁是否指向預定代表頁?Search Console 的「使用者宣告的標準網址」與「Google 選定的標準網址」是否一致?任一答案為否時,就回到 URL 群組、Sitemap、站內連結與 301 目標重新檢查。

相關提問

  1. 每個頁面都要讓 Canonical 指向自己嗎?

    要分頁面角色。標準頁可以自我指向,但追蹤、篩選或排序參數頁若內容與代表頁相同或非常相似,應指向預定代表頁;內容明顯不同時,不會只因網址像變體就合併。判斷看的是內容,不是網址長相:/blog/seo 與 /blog/marketing 若放同一篇文章,屬於同一個群組;放的是兩篇不同文章,就是兩個獨立頁面。

  2. Canonical 會保證 Google 採用指定網址嗎?

    不一定。Canonical 是指定標準網址的強烈訊號,但 Google 仍會搭配重新導向、Sitemap、HTTPS、hreflang、內容相似度與站內連結判斷,因此宣告值和實際選取值可能不同,設定完成後仍需核對。其中 HTTPS 這一項特別容易反轉結果:HTTPS 頁若憑證無效或含不安全的相依資源,Google 仍可能回頭偏好 HTTP 版本。

  3. 參數頁有獨立內容時,還要指向乾淨網址嗎?

    不要只因網址帶參數就直接合併。Canonical 主要處理相同或非常相似的內容;若參數頁有獨立內容或不同主題,應先依內容關係另定代表頁,再決定是否保留獨立頁面,不能把乾淨網址當成固定答案。留下來的獨立頁面,標題與描述就照自己的主題寫,別沿用代表頁那一套。

  4. 同一個舊網址可以同時使用 Canonical 與 301 嗎?

    通常不把兩者當成替代流程。舊頁仍須供使用者開啟時,保留頁面並用 Canonical 指向代表頁;舊頁要永久淘汰時,改用 301 導向新網址,兩套訊號不應指向不同目標。判斷點是舊網址還有沒有存在理由,例如廣告報表、外部連結或會員書籤,理由消失之後才輪到 301。

  5. Canonical 標籤放在 body 或由 JavaScript 插入,可以嗎?

    body 不可,JavaScript 可以。rel="canonical" link 元素須位於 HTML 的 <head>;href 採絕對網址,一頁只保留一個 Canonical。由 JavaScript 插入時,站方需以 render 後畫面確認標籤與目標網址。外部檢測工具讀的是伺服器回傳的原始碼或渲染後的結果,兩者答案可能不同,同一個網址出現兩種結論時,先確認工具讀的是哪一種。

  6. AMP 頁與標準頁的 Canonical 怎麼設定?

    兩版並存時要互相標示。標準頁以 rel="amphtml" 指向 AMP 頁,AMP 頁以 rel="canonical" 指向標準頁;若只有單一版本,就不需為了 AMP 關係新增另一個網址,兩個標記也要維持一致。站上如果只剩 AMP 一種版本,Canonical 直接指向該 AMP 頁本身,也不必再加 rel="amphtml"。

  7. Search Console 顯示兩個標準網址,代表設定失敗嗎?

    不一定。Search Console 顯示兩種值不同,表示 Google 選定的標準網址與頁面宣告不一致;站方應檢查 Canonical、Sitemap、重新導向與站內連結是否各自指向不同頁面,再依內容群組修正。