很多抓取異常不是蜘蛛不来,而是站点自己在 robots.txt 里把入口關掉了。robots.txt 决定的是能不能抓,不决定知不知道,但一旦某個目錄被禁止抓取,蜘蛛就無法顺着這個目錄里的連結繼續發現更深的 URL——發現路径會断在入口這一步。
先分清 robots.txt 的职责邊界
它是一份抓取许可声明,不是 URL 發現清單。把地址寫進 sitemap 或内鏈,蜘蛛可能知道它存在;但只要 robots.txt 不允许抓取,它就取不到内容,也不會繼續跟進頁面里的連結。所以排查 URL 發現異常时,robots.txt 應该放在靠前的位置,而不是等日誌翻完再看。
几種典型的自我封禁寫法
- 測試残留的全站封禁。上线前寫的「禁止所有」忘了删,或者只删了一半,表現是抓取覆盖面突然收窄。
- 把 sitemap 放在被禁目錄里。声明了 sitemap 地址,但该路径本身落在禁止范围内,声明形同虚设。
- 通配符誤伤列表頁。用通配符挡參數,本意是清理重复 URL,却把翻頁、正常需要發現的頁面一起挡掉。
- 封掉静態资源目錄。样式表和脚本被禁止抓取时,依赖脚本渲染的頁面在蜘蛛眼里可能是空的,正文里的連結自然也看不到。
- 放行與禁止規則混用後顺序混乱。規則越長,越容易漏掉某條更具体的禁止項。
逐條核對的顺序
- 完整打開 robots.txt,從第一行讀到最後一行,不要只看自己记得的那几條。
- 列出所有禁止與放行規則,對照站点目錄结构,标出會被命中的路径。
- 抽取 sitemap 里的 URL 做抽样,看有多少落在被禁范围内。
- 检查声明 sitemap 的地址能否訪問、是否被自己的規則覆盖。
- 確認样式表、脚本、图片目錄没有被誤封,尤其是内容靠前端渲染的頁面。
- 核對放行目錄里是否還有真實存在的内鏈入口,別让放行目錄變成空壳。
日誌里看不到的那部分
被 robots.txt 拦下的請求通常到不了服務器,日誌里只會安静一片。所以「日誌没有異常」並不等于「發現正常」,這两件事要分開看。如果某個目錄長期没有任何抓取记錄,又找不到 404 或超时的痕迹,先怀疑規則,再怀疑其他原因。
和 noindex 的区別
禁止抓取是不让取内容,noindex 是取到之後不让收錄。想下线内容时,两者不能互相替代:只寫禁止抓取,蜘蛛進不来,也就看不到 noindex,判断會一直停在原地。
改完規則之後怎么观察
規則調整不必一步到位。可以先放開一层目錄,观察一段時間里该目錄的抓取請求量、返回狀態分布,以及更深层 URL 是否開始出現抓取痕迹。放開的节奏取决于服務器承受能力和内容規模,没必要一次性全開。
robots.txt 只管抓取许可,不管 URL 是否被记錄。被禁止抓取的地址仍可能以缺少描述的形式出現在结果里,所以別把它当成内容下线的工具。
把 robots.txt 当作一條需要定期复核的通道規則,而不是一次寫完就不動的文件,URL 發現路径上的堵点會少很多。