robots.txt 能做甚麼、不能做甚麼
robots.txt 是用來告訴守規矩的爬蟲,哪些路徑不要去請求。它是檢索指示,既不是存取控制,也不是索引指示。被封鎖的網址如果有其他頁面連結過去,仍然可能出現在搜尋結果之中 — 只不過 Google 沒有讀過該頁的內容。要令某些東西不進入索引,應該讓該頁可被檢索並加上 noindex meta 標籤,或者用登入驗證好好保護它。
路徑配對的運作方式
配對以前綴為準,並且區分大小寫。系統支援兩個萬用字元:* 代表任意長度的字元,$ 則用來標示網址的結尾。
| 模式 | 會配對 | 不會配對 |
|---|---|---|
| /fish | /fish, /fish.html, /fish/salmon.html, /fishheads | /Fish.asp, /catfish |
| /fish/ | /fish/, /fish/salmon.htm, /fish/?id=1 | /fish, /fish.html |
| /*.php | /index.php, /folder/any.php | / , /windows.PHP |
| /*.php$ | /filename.php, /folder/filename.php | /filename.php?p=1, /filename.php5 |
哪一條規則勝出
當有多條規則同時符合時,最具體的一條勝出,也就是路徑模式最長的那一條。如果 Allow 和 Disallow 的長度相同,則 Allow 勝出。這就是為甚麼對於位於下層的網址,Allow: /folder/public 會蓋過 Disallow: /folder/。
User-agent: * Disallow: /folder/ Allow: /folder/public
假設有 Disallow: /folder/ 和 Allow: /folder/public,路徑 /folder/public/page 是允許的,因為 Allow 的模式較長。
群組的運作方式
連續的 User-agent 行共用同一組規則。爬蟲只會採用 user-agent 名稱與它配對得最貼切的那一個群組,並忽略其他所有群組 — 包括 * 群組。這正是 robots.txt 最常見的錯誤:加入了 Googlebot 群組,卻以為 Googlebot 仍然會遵守 * 之下的規則。
User-agent: * Disallow: /private User-agent: Googlebot Disallow: /admin
常見錯誤
測試環境遺留下來的 Disallow: /
這會封鎖整個網站,也是網站上線後從搜尋結果消失的頭號原因。
以為指名的爬蟲同時也會遵守 * 的規則
並不會。任何共用的規則,都要在指名的群組內再寫一次。
用 Disallow 把頁面從搜尋結果移除
被封鎖的頁面仍可能因為外部連結而被收錄。應該允許檢索,並改為輸出 noindex 標籤。
封鎖 /css/ 或 /js/
Google 會先渲染頁面再為它排名。封鎖這些資源,會令頁面在爬蟲眼中像是壞掉了一樣。
使用相對路徑的 Sitemap
Sitemap 必須是絕對網址,並且包含 https://。