robots.txt 管的是能不能抓,不是抓了會不會收錄
搭入口頁时,很多人只關心連結怎么寫、一頁挂多少條,却忽略了站点根目錄下的 robots.txt。它不决定收錄,但它决定搜尋蜘蛛能不能進入入口頁。進不去,頁面里的目标 URL 自然也不會被顺着發現。所以在排查“入口頁没起作用”這類問题时,robots.txt 應该排在比較靠前的位置。
几種常见寫法會带来什么後果
Disallow: /
這是最彻底的一種。入口頁本身不會被抓取,頁面内的連結也不會被提取,入口頁等于完全没有作用。有些站点為了临时避開某些頁面的抓取加了這條規則,後来忘了删,日誌里就會長期看不到蜘蛛訪問。
只屏蔽某個目錄
如果入口頁放在 /pool/ 這類目錄下,而規則寫成了 Disallow: /pool/,在這個目錄范围内,效果和全站屏蔽是一样的。检查时要把規則和入口頁的實际路径逐條對上,尤其是批量生成入口頁时,路径结构经常會發生變化。
用 User-agent 做针對性放行
针對特定蜘蛛放行、對其它 UA 屏蔽,理论上可行,但维護成本不低。蜘蛛 UA 會調整,規則里的 UA 串一旦寫错,比如大小寫不一致或者少了關键子串,放行就會失效。除非有明确需求,一般不建议把入口頁的抓取完全押在這種精细規則上。
Crawl-delay
Crawl-delay 是建议值而不是强制值。部分搜尋引擎會參考,部分直接忽略。入口頁數量多的时候,寫一個很大的 Crawl-delay 只會让發現节奏更慢,並不會換来更有效的抓取。
robots.txt 自身返回異常时的後果
- 返回 200:按文件内容执行規則。
- 返回 404:通常被视為没有限制,蜘蛛可以正常抓取。
- 返回 500 或 503:蜘蛛往往會采取保守策略,暂时减少甚至暫停對整站的抓取,等服務恢复後再来。
最後一種情况比規則寫错更难排查,因為文件内容本身看起来毫無問题,但抓取量會整体下滑。所以除了看規則,也要確認 robots.txt 這個地址本身的响應狀態是否正常。
一個容易被忽略的点:被屏蔽的頁面,里面的連結不會被提取
有人以為“屏蔽的只是頁面本身,連結還是能被看到”。實际流程並不是這样:蜘蛛要先抓取頁面,才能解析出其中的連結。被 robots.txt 挡住的頁面不會被抓取,也就走不到連結解析這一步,挂在里面的目标 URL 自然不會因此被發現。
判断起来很简單:如果日誌里從来没有入口頁的抓取记錄,先別急着改連結寫法,先看 robots.txt 和頁面的返回狀態。
實操检查清單
- 確認入口頁所在目錄没有被 Disallow 命中,注意前缀匹配和通配符在各引擎中的差异。
- 如果使用了 User-agent 分组,检查该分组的 UA 串是否覆盖了目标蜘蛛。
- 把 Crawl-delay 设成較小的值,或者直接去掉。
- 在 robots.txt 中用 Sitemap 指向站点地图,方便蜘蛛找到入口頁列表。
- 用搜尋引擎官方提供的 robots.txt 測試工具,驗證具体 URL 是否被放行。
- 改完之後观察一段時間日誌,看入口頁的抓取次數是否有變化。
不要指望用 robots.txt 做精准調度
robots.txt 本质上是一個粗粒度的開關,各引擎對通配符、最長匹配、UA 分组的處理细节並不完全一致。想让目标 URL 被稳定發現,更可靠的做法是保證入口頁可抓取、可解析、响應正常,連結直接寫在 HTML 里,而不是靠一份复杂規則去精确指挥蜘蛛。規則越简單,出問题的概率越低。