蜘蛛池知识

蜘蛛池入口頁的 robots.txt:放行、屏蔽與常见寫错的地方

robots.txt 本身不带来排名,但它决定蜘蛛第一轮抓取时是否放行。本文讲清入口頁该放行什么、该屏蔽什么,以及誤伤 CSS/JS、用 robots 屏蔽再指望 noindex、多域名批量複製出错這几類常见事故,並给出一份上线前自查清單。

蜘蛛池知识

蜘蛛池入口頁的 robots.txt:放行、屏蔽與常见寫错的地方

robots.txt 放在站点根目錄,是给爬虫看的建议书。它没有任何强制力,也谈不上訪問控制——但它常常决定入口頁在第一轮抓取里是放行還是被拦下。這份文件寫對了不會带来額外好處,寫错了却足以让前面做的工作全部浪費。

入口頁的基本姿態:放行

蜘蛛池入口頁的职责是承接抓取、把蜘蛛引向目标頁,所以預設姿態應该是放行。常见的错誤寫法是出于安全考虑直接寫一整段 Disallow: /,把整站關掉,然後又指望蜘蛛照常来抓入口頁。這两件事在逻辑上不可能同时成立。

一個可用的最小结构大致是這样:允许全站抓取,單獨屏蔽几個不该出現的目錄,再把 sitemap 地址寫進去。

  • 允许抓取入口頁本身,這是最基础的
  • 允许抓取入口頁引用的 CSS、JS、图片等静態资源
  • 用 Sitemap 指令指向入口頁或頁面清單的地址
  • 只對确實無意义的目錄做屏蔽,不要成片封杀

哪些東西值得屏蔽

屏蔽規則要克制。入口頁的目錄结构和普通站点不一样,通常没有用戶後台、购物车這類内容,所以真正需要挡住的並不多:

  • 後台、管理路径和測試目錄
  • 會輸出大量重复结果的站内搜尋地址
  • 临时生成、随时會失效的調试頁面
  • 返回 5xx 或重定向鏈過長的路径

注意這里的屏蔽是對合規爬虫生效的。對方是否遵守,不在你的控制范围内,因此不要把 robots.txt 当成防抓措施来设計。

几個最容易寫错的地方

誤伤 CSS 和 JS

很多模板會顺手把 /assets/、*.js、*.css 一起屏蔽掉。對于依赖脚本渲染的入口頁,這會让蜘蛛拿到的是一份空壳。移動優先索引下,渲染能力本来就有限,把资源挡住只會让頁面更难看懂。除非确定頁面是纯静態輸出,否則別動静態资源目錄。

屏蔽了頁面,又想让它不被索引

noindex 必须被蜘蛛讀到才生效,而被 robots.txt 屏蔽的頁面,蜘蛛压根不會去讀里面的 meta 标簽。所以“先 Disallow,再加 noindex”是典型的自相矛盾。想让頁面登出索引,就放行抓取、只加 noindex;想减少抓取压力,就用 robots.txt。两者選一個。

crawl-delay 的兼容問题

crawl-delay 並不是所有爬虫都支持。寫上去通常不會有什么坏處,但也不要指望它真的能控制訪問频率。真要控制並發,從服務器侧做限速、限连接數更靠得住。

多域名批量複製的事故

蜘蛛池往往有几十上百個域名,robots.txt 一般是统一複製過去的。一旦模板里残留了一條 Disallow: /,就會在所有域名上同时生效,而且不會报错,只能靠人工發現。建议每次批量下發後,随机抽几個域名實际訪問一遍 /robots.txt 看内容。

上线前的自查清單

  1. 用浏览器直接訪問几個域名下的 /robots.txt,確認返回 200 且内容完整
  2. 確認没有全站 Disallow,也没有誤伤静態资源目錄
  3. 確認 Sitemap 地址可訪問,返回的是頁面清單而不是错誤頁
  4. 確認屏蔽規則和 noindex 的使用没有互相冲突
  5. 批量更新後抽查若干域名,而不是只看模板文件

另外,蜘蛛對 robots.txt 本身的請求频率,也是一個還不错的观察窗口。如果日誌里這個文件的請求長期為零,通常說明蜘蛛對這批域名兴趣不大,或者根本没有走到這一步。

小结

robots.txt 是一份放行說明,不是防護措施。入口頁的原則很简單:能抓的就放行,明确没用的才屏蔽,別用屏蔽去實現本该由 noindex 完成的事。

它不會让蜘蛛多来几次,但寫错一次,可能让一批入口頁在很長時間里都處在無人問津的狀態。