蜘蛛池知识

蜘蛛池的 robots.txt 配置:哪些寫法會挡住蜘蛛

很多蜘蛛池投放没動静,問题出在最前面的 robots.txt 這一环。本文梳理 robots.txt 的作用范围、常见的 Disallow 誤伤、User-agent 寫法、通配符與 $ 的支持情况,以及 200、404、403、500 等返回碼對抓取的影响,並给出上线前可以逐條核對的检查清單。

蜘蛛池知识

蜘蛛池的 robots.txt 配置:哪些寫法會挡住蜘蛛

很多人在排查蜘蛛池為什么没動静时,先看連結、再看日誌,最後才想起 robots.txt。實际上這是最靠前的一环:抓取程序訪問一個域名时,通常會先請求根目錄下的 robots.txt,再决定要不要繼續往下走。這一步没走通,後面的入口頁、連結和内容都無從谈起。

先確認 robots.txt 的作用范围

robots.txt 只對同一個主机生效。子域名、不同协议、不同端口都各算各的:http 和 https 可能被当作两個站点,带 www 和不带 www 也常被视為两個主机。批量部署蜘蛛池时,模板往往只寫了一份文件,實际却有几十個訪問入口,漏配的情况很常见。

另外,這個文件必须放在根目錄。放在子目錄里不會被讀取,也不要用 302 把它跳到別處。

几種容易挡住蜘蛛的寫法

整站 Disallow

Disallow: / 是最常见的一處遗留問题。測試阶段為了防止抓取加上這一行,上线後忘了删。此时蜘蛛仍會讀取 robots.txt,但不會請求入口頁,日誌里自然什么也看不到。

User-agent 寫错

規則组里的 User-agent 值需要和爬虫声明的名字對應。主流爬虫一般只認自己的名字和通配符 *,寫成別的字样就匹配不上,那组規則會被整体忽略——如果那组里恰好是允许規則,等于白寫。

通配符與 $ 的支持差异

*$ 並非所有抓取程序都支持。Google、Bing 等支持,一些小众或自建抓取程序會按字面處理,可能出現放過本该屏蔽的路径、或誤伤正常路径两種情况。当 Allow 與 Disallow 冲突时,Google 會取更長(更具体)的那條規則,不同爬虫的處理未必一致。

返回碼比文件内容更關键

  • 200:正常讀取,按規則执行。
  • 404:视為没有規則,預設允许抓取全部。临时刪除文件时要意识到這一点。
  • 403:多數搜尋引擎會当作禁止抓取整個站点處理,影响范围比 Disallow: / 更大。
  • 500 / 503:视為服務端不可用,短時間會重试;長期如此可能降低抓取频次甚至暫停。

如果 robots.txt 是程序動態輸出的,務必確認它不會因為超时、鉴權或 WAF 拦截返回 403。

別漏掉頁面級與响應头指令

robots.txt 允许抓取,不代表頁面本身没有額外限制。入口頁的 meta robots、以及响應头里的 X-Robots-Tag,都可能在抓取或後續處理环节起作用。X-Robots-Tag 對 PDF、图片這類非 HTML 资源同样有效,排查时很容易被忽略。

Crawl-delay 與實际抓取频次

Crawl-delay 只有部分爬虫支持,Google 明确不支持该指令。寫了不一定生效,寫了過大的數值還可能让本就有限的抓取變得更慢。真正影响抓取频次的是站点响應速度、错誤率和内容更新情况,這一点在蜘蛛池场景里尤其明顯:通路响應慢,放出去的 URL 再多也消化不了。

上线前的检查清單

  1. 直接訪問 /robots.txt,確認返回 200 且内容符合预期;http 與 https、带與不带 www 分別检查。
  2. 搜尋 Disallow 中是否出現 /,是否誤伤了入口頁所在目錄。
  3. 查看入口頁的 meta robots 與响應头中的 X-Robots-Tag。
  4. 確認 crawl-delay 的數值没有夸張到让抓取接近停滞。
  5. 用抓取工具或更換 UA 請求一次入口頁,確認返回正常,再到訪問日誌里看是否出現蜘蛛請求。
robots.txt 只能表達允许或不允许抓取,它不决定收錄,也不保證蜘蛛一定會来。把它当成通路检查的一部分,而不是優化手段。

對批量投放来说,更實际的做法是把 robots.txt 检查放進上线流程,而不是出問题後再回头找。同一套模板複製到多個域名时,一個错誤配置會被放大很多倍;定期抽查几個域名,比事後逐個排查省事得多。