如果你第一次碰 Google Search Console,或第一次認真看 SEO 文章,很容易被幾個詞繞住:sitemap、robots.txt、canonical、noindex。
它們都跟 Google 有關,但各自管的事情不同。
這篇把這四個名詞拆開。你讀完之後,至少要能分清楚它們各自在管什麼、為什麼重要、沒設會怎樣,還有內容網站大概怎麼設。
先用四句話記住:
sitemap:告訴 Google 你有哪些重要網址。robots.txt:告訴 crawler 哪些網址不要抓。canonical:告訴 Google 哪個網址才是代表版本。noindex:告訴 Google 這個頁面不要放進搜尋結果。
這四個詞剛好分別落在「發現網址」、「抓取網址」、「挑代表網址」、「決定要不要收錄」這幾件事上。Google 自己的文件也一直把 crawling、canonicalization、indexing 分開講。How Search works 和 Crawling 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 比較像是拿來處理這些東西:
- 站內搜尋頁
- 預覽頁
- 後台或登入區
- 會產生大量重複組合的參數頁
一個很簡單的例子是:
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>:
<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 寫法是:
<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
- Google Search Central: How Search works
- Google Search Central: Crawling and indexing overview
- Google Search Central: Learn about sitemaps
- Google Search Central: Build and submit a sitemap
- Google Search Central: Introduction to robots.txt
- Google Search Central: Create and submit a robots.txt file
- Google Search Central: How to specify a canonical URL
- Google Search Central: Block Search indexing with
noindex