Robots.txt 是什麼
robots.txt (固定全小寫) 是一個放在網域的根目錄的文字檔案, 裡面的內容用於指示網路爬蟲什麼東西該索引以及什麼東西不該索引, 不難看出網站的SEO與安全性都與這個小小的檔案有莫大的關聯.
由於 robots.txt 是約定成俗的用法並不是一個標準, 因此不能保證遵守以及隱私性(不該給別人看到的東西就要鎖好)
Robots.txt 的使用方法
常見指令
User-agent: 設定什麼爬蟲要遵守接下來的規定
Disallow: 禁止索引
Allow: 歡迎索引
Sitemap: 網站的 Sitemap 位置, 加速爬蟲索引
Crawl-delay: 每一次的請求之前的延遲時間
使用範例
User-agent: *
Disallow: /
User-agent: *
Disallow: /img/
User-agent: Baiduspider
Disallow: /
User-agent: *
Disallow: /
User-agent: Googlebot
Allow: /
- 每一次存取間隔 1秒
禁止所有爬蟲索引, 但 Google 爬蟲例外
User-agent: *
Disallow: /
User-agent: Googlebot
Allow: /
Crawl-delay: 1
不是所有的爬蟲都支援 Allow 抵銷 Disallow
User-agent: *
Disallow: /*.js$
路徑匹配方式
超乎預期的影響力
若想要阻擋 /news 這個網頁的存取, 下面這個寫法看起來正確, 但實際上影響範圍更廣
Disallow: /news
這個寫法不只阻擋 /news, 連同 /news-123, /news-234 也都會被阻擋, 只要前面吻合就會忽略
正確寫法
因此正確寫法應該是在末端加入 $(結尾符號), 表示要完全吻合
Disallow: /news$
如此一來就只會不索引 /news, 其餘網頁仍然會正常索引
使用後設(Meta)資料
robots.txt 通常用來阻擋固定不變的內容, 但有時候我們會需要動態生成阻擋名單, 我們不必動態生成 robots.txt, 可以透過在網頁中加入以下後設(Meta)資料, 來達到禁止索引的效果
<meta name="robots" content="noindex,nofollow" />
爬蟲在讀取該網頁後便會放棄索引網站內容
逆向 SEO
我們可以透過 robots.txt disallow 與 後設(Meta)資料來促使爬蟲移除特定頁面, 藉此移除過期內容以及增加網站資料簡潔度
注意事項
- 大小寫敏感, /img 不等於 /IMG
- 文字間的空白會被省略, /hello world 等於 /helloworld
Robots.txt 帶來的資安問題
網站中有很多秘密不想讓別人知道, 其中最常見的就是管理後台,為了避免後台被索引, 我們可能會將 robots.txt 寫成這樣
User-agent: *
Disallow: /admin/
這樣一來, 攻擊者就無法使用 Google Hacking 技巧來找出後台位置了, 這樣的想法大錯特錯.
對於攻擊者而言, 他可以打開 robots.txt 檔案看看你 Disallow 哪些東西, 等同於告訴攻擊者哪裡有機密, 這是一種此地無銀三百兩的概念.
即使你的後台名稱叫做 /you_will_never_never_guess_where_is_the_admin/, 不管當中有多少 never, 攻擊者都可以直接找到正確位置.
為了避免這類型的問題, 我們可以將 robots.txt 寫成這樣
User-agent: *
Disallow: /you_will_never
利用路徑匹配的特性, 間接的禁止索引真正的後台位置.
結論
robots.txt 應該視為引導爬蟲索引網站的工具, 而不是保護網站的工具, 任何不希望出現在網路上的資料不應該上傳到網路上, 假若逼不得已必須放到網路上, 必須使用 Http Authorization 之類的存取保護機制保護資料.