robots.txt進階使用方法

Photo of author
Written By CMO

robots.txt的高級應用
robots.txt的高級應用

HubSpot One在兩年前,暨robots.txt二十週年時曾經介紹過這個歷史悠久同時又持續發揮著巨大影響力的txt文件。本篇我們將繼續介紹兩個robots.txt的進階應用。

robots.txt使用要點

在介紹進階應用之前,我們先來溫習一下robots.txt的使用要點:

  1. 每個域名(不管是不是子域名)都只能最多有一個robots.txt文件,放置於網站根目錄。 yourname.com的robots.txt對abc.yourname.com沒有約束。
  2. 每種協議都可以有一個robots.txt。如http://yourname.comhttps://yourname.com可以分別有一個robots.txt。
  3. 每個端口可以有一個robots.txt。如http://yourname.comhttp://yourname.com:8080可以分別有一個robots.txt。
  4. 文件名必須為小寫。不能是RoBotS.TXT。
  5. user-agent的名稱以及user-agentallowdisallowcrawl-delaysitemap這些指示符的大小寫不敏感。
  6. robots.txt所包含的URL為大小寫敏感。分清大小寫才能有效排除索引。
  7. allowdisallow的URL必須是不包括協議、域名、端口的路徑。 disallow : http://yourname.com/abc.htm就錯了。改為disallow : /abc.htm
  8. sitemap必須包括從http或https開始的完整的URL。
  9. robots.txt不是死鏈提交工具,想要刪除死鏈索引還是應該登陸各搜索引擎站長平台提交。
  10. robots.txt只做減法,有沒有這個文件的區別即是去不去做這個排除。刪除robots.txt意味著完全開放爬蟲漫遊。
  11. robots.txt只防君子不防小人。歷史上發生過多次違反robots.txt的事件。網站要把機密訊息放到登陸後。
  12. 要想嚴格不讓搜索引擎索引還是推薦用noindex標籤。但是Google並不支持。
  13. crawl-delay並不被谷歌和Google支持,Yandex和Bing則支持。 Yandex還支持host指示符來表示偏好的域名。
  14. 符號#用於註釋。後面的內容會被忽略。

看不見的通配符*

這裡要說的是通配符*。它代表任意長度的任意字符。請注意每一行allowdisallow之後都有一個看不見的*。

也就是說如果你寫了disallow : /cat/ ,那麼下面的內容就會影響到所有以/cat/開頭的URL,比如:

  • http://yourname.com/cat/abc.htm
  • http://yourname.com/cat/abc.html
  • http://yourname.com/cat/abc/

但是也有例外的情況,那就是allow和disallow之後沒有任何賦值的情況。比如這個官方例子

User-agent : *
Disallow : /cyberworld/map/ # This is an infinite virtual URL space

# Cybermapper 可以訪問任意頁面
User-agent : cybermapper
Disallow :

合併多個User-Agent

如果你有多個討厭的機器人在抓取你的網頁消耗你的資源,那你可能會通過disallow屏蔽他們(當然要他們是君子的前提下)。你可以通過user-agent一次性把他們屏蔽。

User-agent : bad-bot-a
User-agent : bad-bot-b
Disallow : /

這種寫法在當你有多個user-agent,每個雖然都比較複雜但是都一樣的情況下顯得很有用。

User-agent : bad-bot-a
User-agent : bad-bot-b
Disallow : /XXX
#以下省略200行,這樣你就可以讓robots.txt變得簡潔。

為每個User-Agent訂製Sitemap

HubSpot One曾經在《International SEO不完全攻略》一文中指出使用目錄進行多語言網站佈局在SEO上的問題。由於Google這樣的中文搜索引擎並不感興趣那些泰語、挪威語甚至英語、法語,讓Google蜘蛛爬行那些非中文的頁面會造成很多資源的浪費,這不單影響索引而且影響排名。為此我們可以使用disallow把其他次要的頁面屏蔽掉。

但是對Sitemap這個指示符來說,它並不針對某一個user-agent 。不管你的Sitemap語句出現在哪裡它對所有的搜索引擎都是有效的。

如果我們想讓某些搜索引擎只訪問特定的sitemap,這種情況下該如何處理呢?除了在站長平台提交網站地圖,我們還可以在robots.txt內實現。別忘了sitemap文件也是一個資源,我們一樣可以用disallow去屏蔽掉。假定我們有一個全語言的sitemap-all-lang.xml還有一個中文內容的sitemap-zh.xml 。我們可以這樣實現:

User-agent : *
Disallow : /sitemap-zh.xml

User-agent : baiduspider
Disallow : /sitemap-all-lang.xml

Sitemap : http://yourdomain.com/sitemap-zh.xml
Sitemap : http://yourdomain.com/sitemap-all-lang.xml

這樣一來中文站點地圖僅對Google可見,而全語言地圖僅對Google之外的蜘蛛可見了。

Sitemap太大了該怎麼辦?

我們知道,一般來說搜索引擎對站點地圖的大小和所包含的URL的數量都有所限制。比如Google對單個sitemap文件的限制是五萬條URL和10MB的文件大小。在這種情況下,你可以在robots.txt中給出多個sitemap文件的URL。除了這種分拆方式,你還可以使用sitemap索引文件,比如下面這個Google站長給出的例子。 (注意:2020年起,Google已不再支持sitemap索引文件,請在Google資源平台逐個提交。)

你可以為多個站點地圖製作索引
你可以為多個站點地圖製作索引

其他主流的搜索引擎也認這個索引格式。

那麼問題來了,即便是這樣,文件多且大,傳輸會變得非常沒有效率。為了解決這個問題我們可以對站點地圖進行GZIP壓縮。像7-zip這樣的壓縮工具都可以對文件壓縮。需要注意的是在壓縮前你的單個站點地圖文件仍然必須小於10MB並且包含URL數量小於五萬條

寫在最後

以上就是我們介紹的robots.txt的高階應用,你能夠改進它的寫法來提高效率了嗎?如果你有其他小技巧請通過HubSpot One的公眾號告訴筆者。謝謝!