經營個人內容網站,要知道的四個索引控制名詞

sitemap、robots.txt、canonical、noindex 分別在管什麼,為什麼重要,內容網站該怎麼設。

如果你第一次碰 Google Search Console,或第一次認真看 SEO 文章,很容易被幾個詞繞住:sitemaprobots.txtcanonicalnoindex

它們都跟 Google 有關,但各自管的事情不同。

這篇把這四個名詞拆開。你讀完之後,至少要能分清楚它們各自在管什麼、為什麼重要、沒設會怎樣,還有內容網站大概怎麼設。

先用四句話記住:

  • sitemap:告訴 Google 你有哪些重要網址。
  • robots.txt:告訴 crawler 哪些網址不要抓。
  • canonical:告訴 Google 哪個網址才是代表版本。
  • noindex:告訴 Google 這個頁面不要放進搜尋結果。

這四個詞剛好分別落在「發現網址」、「抓取網址」、「挑代表網址」、「決定要不要收錄」這幾件事上。Google 自己的文件也一直把 crawling、canonicalization、indexing 分開講。How Search worksCrawling and indexing overview 可以先當背景。

Sitemap 是拿來告訴 Google 有哪些網址

Sitemap 本質上就是一份網址清單。Google 的定義很直接:這是一個用來提供網站頁面、影片、圖片和其他檔案資訊的檔案,搜尋引擎會讀這份檔案,更有效率地抓你的網站。Learn about sitemaps

對內容網站來說,它最有用的地方,是幫 Google 更快知道你發了新文章,或至少知道哪些頁面是你認為重要的。

這件事特別適合兩種站:

  • 站很新,幾乎沒外部連結
  • 站上文章慢慢變多,靠首頁和分類頁不一定能把每篇都帶出來

就算沒有 sitemap,Google 還是可能找到你的頁面。Google 文件也寫得很清楚:如果站內連結做得完整,Google 通常能自己發現大多數頁面。Learn about sitemaps

少了 sitemap,對個人網站常見的結果是:

  • 新文章被發現得比較慢
  • 某些比較深層的頁面不容易被注意到
  • 你自己也少了一個在 Search Console 提交與檢查的入口

怎麼設比較實際:

  • 確保網站有 sitemap.xml
  • 把它提交到 Search Console
  • 只放你真的希望出現在搜尋結果的網址

Google 在 sitemap 建立指南裡也明講了,應該把你希望出現在搜尋結果的 URL 放進 sitemap,而且通常是 canonical URL。Build and submit a sitemap

robots.txt 是拿來管抓取,跟移除索引是兩件事

robots.txt 是放在網站根目錄的一個文字檔,用來告訴 crawler 哪些 URL 可以抓、哪些不要抓。Google 文件寫得很明確:它主要是拿來管理 crawler traffic,不是拿來讓網頁退出 Google 搜尋結果。Introduction to robots.txt

很多人第一次碰到舊網址、測試頁、低價值頁面,第一反應都是去改 robots.txt。這常常會做錯事。

對內容網站來說,robots.txt 比較像是拿來處理這些東西:

  • 站內搜尋頁
  • 預覽頁
  • 後台或登入區
  • 會產生大量重複組合的參數頁

一個很簡單的例子是:

txt
User-agent: *
Disallow: /search/
Disallow: /preview/

就算你完全沒有 robots.txt,很多小型內容網站其實也能正常運作。Google 預設是允許抓取。Create and submit a robots.txt file

真正麻煩的通常是設錯:

  • 把重要文章或分類頁擋掉
  • 以為擋抓取就等於不會出現在搜尋結果

Google 文件特別提醒,假設某個頁面被 robots.txt 擋住,只要其他地方還有連結指向它,這個 URL 還是可能出現在搜尋結果裡,只是 Google 沒抓到內容,通常也不會有正常摘要。Introduction to robots.txt

所以 robots.txt 的重點是節省 crawler 去抓不重要的地方。

canonical 是拿來指定哪個網址才是代表版本

Canonical 要處理的是這件事:同一份內容有多個網址時,到底哪個才算正式版。

Google 對 canonical 的定義是:對於重複或非常相似的頁面,你可以用幾種方法告訴 Google 你偏好的 canonical URL,其中 redirect 和 rel="canonical" 都是強訊號,sitemap inclusion 則比較弱。How to specify a canonical URL

內容網站常見的情境有這些:

  • 同一篇文章同時有帶參數和不帶參數的版本
  • 舊網址和新網址內容幾乎一樣
  • 分頁、分類、標籤產生很多相近 URL

這時候 canonical 的作用是告訴 Google:如果這幾個版本很像,請把這個當作主要版本。

常見的寫法是放在 <head>

html
<link rel="canonical" href="https://example.com/posts/my-article/">

就算沒有 canonical,Google 也不會立刻壞掉。文件裡也提到,不設定 canonical preference 也可以,Google 會自己挑它認為最好的版本。How to specify a canonical URL

但問題是,主動權就不在你手上。比較常見的結果是:

  • Google 選了你不想顯示的那個 URL
  • 訊號分散在幾個相似頁面上
  • Search Console 裡出現一堆 duplicate 類型的訊息

對個人網站來說,做法通常很簡單:

  • 每篇公開文章都放 self-referencing canonical
  • 如果你知道某幾個網址其實是同一篇內容,就讓它們指向同一個 canonical URL

noindex 是拿來告訴 Google 這頁不要收錄

noindex 是這四個詞裡最直接的一個。它的意思就是:這頁可以被抓到,但不要進搜尋結果。

Google 的文件定義得很清楚:noindex 是一個用 <meta> tag 或 HTTP response header 設定的規則,Googlebot 抓到之後,會把那個頁面從 Google Search results 移除。Block Search indexing with noindex

常見的 HTML 寫法是:

html
<meta name="robots" content="noindex">

對內容網站來說,noindex 常見在這些頁面:

  • 站內搜尋結果頁
  • 感謝頁
  • 預覽頁
  • 很薄、但又需要存在的 archive 或 tag 頁

文章頁通常不在這個清單裡。你既然花時間寫文章,多半就是希望它能被找到。

如果沒有 noindex,而那個頁面又是公開可抓取的,Google 就有可能把它收進搜尋結果。這就是預設行為。

這也是為什麼很多人會在 Search Console 看到一些自己不太想曝光的頁面被索引。

noindex 最容易踩到的一個坑,是和 robots.txt 打架。Google 文件特別提醒,noindex 要生效,前提是 crawler 看得到頁面;如果這個頁面先被 robots.txt 擋住,Google 看不到 noindex,那它還是可能出現在搜尋結果裡。Block Search indexing with noindex

所以這裡要記一個簡單規則:

  • 不想讓它被抓,用 robots.txt
  • 不想讓它被收錄,用 noindex

這兩句很像,但管的不是同一件事。

這四個詞,最好這樣記

如果你經營的是個人內容網站,我會直接用四個問題記這件事:

第一,Google 知不知道這個網址存在? 想到的是 sitemap

第二,我要不要讓 crawler 去抓這類頁面? 想到的是 robots.txt

第三,如果有多個版本,我想讓哪個網址當正式版? 想到的是 canonical

第四,這個頁面要不要出現在搜尋結果? 想到的是 noindex

這四個問題拆開來之後,很多原本混在一起的 SEO 問題就會變得很單純。

Ref