蜘蛛池知识

蜘蛛池入口頁的 robots.txt:哪些该放行,哪些该拦掉

robots.txt 是蜘蛛池里最容易被忽略、也最容易被改坏的一個文件。它不决定收錄,却直接决定爬虫能不能進来。本文梳理入口頁 robots.txt 的常见寫法、容易踩的坑、缓存机制带来的延迟,以及它與 noindex 的区別,帮助你在放行與拦截之間做出更稳妥的選擇。

蜘蛛池知识

蜘蛛池入口頁的 robots.txt:哪些该放行,哪些该拦掉

在蜘蛛池的日常维護里,robots.txt 往往是最不起眼的那個文件。它放在域名根目錄,几行文本,改起来只要几十秒。但正因為改動成本低,很多池子的問题恰恰出在這里:一個多余的斜杠、一個没想清楚的通配符,就可能让爬虫连入口頁都不再訪問。

需要先说清楚一件事:robots.txt 不是收錄開關,也不是安全措施。它只是告诉爬虫“哪些路径可以抓、哪些不要抓”。對蜘蛛池来说,入口頁本身就是要被爬的對象,所以預設策略應该是尽量放行,而不是想方设法去限制。

預設放行,還是預設拦截

入口頁的使命是让爬虫進来、顺着連結走下去。既然這样,最省事的做法就是不放 robots.txt,或者放一個只声明 Sitemap、不寫任何 Disallow 的文件。很多池子出問题,不是因為没寫 robots.txt,而是因為寫了太多。

如果服務器上残留了別的項目的 robots.txt,情况會更糟。比如從舊站複製過来的模板里带着 Disallow: /,整個域名對爬虫關閉,入口頁做得再精细也没有意义。

最容易寫坏的三種情况

  • 整站禁止:Disallow: / 覆盖全部路径。除非你确實想让這個域名彻底不被抓,否則不要出現。
  • 通配符誤伤:為了挡掉某類參數,寫了過于宽泛的規則,结果把正常的入口頁路径也一起挡住了。規則越短越危險。
  • 文件本身返回異常:robots.txt 返回 200,但内容其實是 HTML 错誤頁,或者返回 5xx。爬虫解析失敗时通常會更保守,可能减少甚至暫停抓取。

可以拦掉的部分

不是所有訪問都值得欢迎。以下几類可以考虑拦截,但要想清楚後果:

  • 與目标無關的爬虫,比如采集工具、比價插件、SEO 分析平台的抓取 UA。數量多、不带流量,占用的是服務器资源。
  • 後台、測試、临时目錄等不该被外部看到的位置。
  • 资源目錄要谨慎。如果入口頁依赖 JavaScript 渲染内容,屏蔽 JS 文件會让爬虫拿到的是一張空頁面,反而把抓取信号浪費掉。图片目錄的屏蔽影响相對小,但也可能影响頁面的完整性判断。
判断标准很简單:拦掉它,會不會影响爬虫理解入口頁的内容。如果會,就別拦。

robots.txt 有缓存,改動不會立刻生效

這是很多人忽略的一点。爬虫不會每次訪問都重新讀 robots.txt,而是按自己的周期拉取並缓存,短則几小时,長則超過一天。你上午改完,下午看日誌没變化,不代表改错了,可能只是缓存還没過期。

所以不要把 robots.txt 当成應急開關。想快速阻挡某個路径,robots.txt 不是合适的手段。

別和 meta noindex 搞混

两者作用完全不同:robots.txt 管的是“能不能抓”,noindex 管的是“能不能出現在结果里”。

一個常见的连鎖問题是這样:頁面被 robots.txt 挡住,爬虫抓不到,自然也就讀不到頁面里的 noindex。但如果這個 URL 有外部連結,它仍可能以無摘要的形式出現在结果中。所以如果目标是让某個頁面彻底不出現,正确顺序是允许抓取 + 加 noindex,而不是先屏蔽抓取。

對蜘蛛池入口頁来说,這两種需求通常都不存在。入口頁既要被抓,也没有必须隐藏的理由,保持简洁即可。

几個實操检查点

  1. 文件只保留必要的 User-agent 與 Allow/Disallow,附上 Sitemap 地址就够了。
  2. 多域名池子要逐個核對,避免複製粘贴时把 A 域名的規則寫到 B 域名上。
  3. 改動前後對比日誌里的抓取量和狀態碼,观察周期至少覆盖一次 robots 缓存時間。
  4. 確認 robots.txt 返回 200 且内容是纯文本,不要被服務器的伪静態規則改寫成 HTML。
  5. 如果同一個服務器跑多個站点,检查根目錄是否指向了正确的位置。

robots.txt 本身不复杂,但它属于“改一次、影响一片”的文件。寫之前想清楚要放行谁、要拦谁,改完之後耐心等缓存過期再下结论,比反复調整規則要稳妥得多。