蜘蛛池知识

蜘蛛池入口頁的 robots.txt 與 noindex:哪些設定會把蜘蛛挡在门外

入口頁抓不到,往往不是池子不行,而是 robots.txt 或 noindex 把人挡在门外。本文梳理蜘蛛池场景下最常见的几類誤配:全站 Disallow、通配符寫得過宽、屏蔽 CSS/JS、Crawl-delay 過大,以及 HTML meta 和响應头里的 noindex,並给出一套按顺序执行的排查清單。

蜘蛛池知识

蜘蛛池入口頁的 robots.txt 與 noindex:哪些設定會把蜘蛛挡在门外

搭蜘蛛池时,大多數人把精力花在域名、服務器、模板和連結结构上,却容易忽略一個只有几行的文件:robots.txt。它寫错一次,蜘蛛可能直接停止對入口頁的抓取,前面做的准备工作基本白費。這篇文章把 robots.txt 和 noindex 類指令在蜘蛛池场景里的常见問题梳理一遍,並给出一套可以直接照着走的排查顺序。

robots.txt 管的是什么

robots.txt 放在域名根目錄,是一個纯文本协议,用来告诉爬虫哪些路径可以抓、哪些不要抓。它控制的是抓取這一步,本身不决定頁面是否被收錄。但反過来说,如果入口頁被它挡住,蜘蛛拿不到内容,也就没有後續判断的依據。對入口頁而言,第一原則很简單:不要挡自己。

入口頁最常见的几類誤配

直接複製了全站禁止

從測試环境或舊項目抄過来的 robots.txt 里带着 Disallow 根目錄的規則,上线时忘了删。表現是訪問日誌里入口頁几乎看不到来自搜尋引擎的請求,或者只剩零星几條首頁請求。這類問题最容易被忽略,因為它看起来太低級,反而没人去查。

路径規則寫得太宽

  • 用通配符挡掉全部带參數的 URL,而蜘蛛池入口頁往往正是靠參數做 URL 分發,等于把主要通道封了。
  • 寫路径时结尾漏掉斜杠,前缀相同的其他目錄會被一起誤伤,比如想挡 /list,结果把 /listing 也挡住了。
  • 通配符和结尾锚点的用法,各家爬虫支持程度並不一致,規則越复杂越难驗證,能简單就別复杂。

把静態资源一起屏蔽

有些池子為了省带宽,顺手把 CSS、JS 目錄也 Disallow 掉。蜘蛛在需要渲染頁面时拿不到样式和脚本,對頁面结构的理解會打折扣。资源该不该挡,取决于入口頁是否依赖脚本輸出連結:如果連結是 JS 渲染出来的,挡住脚本几乎等于挡住連結。

Crawl-delay 设得過大

Crawl-delay 是给爬虫的礼貌限速,而且並非所有爬虫都遵守。设成几十秒,相当于主動降低自己入口頁的抓取频次。真想控速,優先在服務端做限流和日誌监控,而不是把希望全押在這個字段上。

noindex 和 robots.txt 是两回事

robots.txt 挡住抓取,noindex 是抓到了但別收錄。入口頁一旦被套上 noindex,蜘蛛照样會来、會抓,但連結關系的传递基本没有意义,效果接近于零。需要检查的地方有三個:

  • 頁面头部里的 meta 标簽 robots 值是否為 noindex。
  • HTTP 响應头里是否存在 X-Robots-Tag 的 noindex,這一項常被 CDN、反向代理或框架預設配置悄悄加上。
  • 模板繼承導致全站范围内批量带上 noindex,改一處漏一處。

一套按顺序执行的排查清單

  1. 用浏览器直接打開域名下的 robots.txt,確認返回正常狀態碼且内容确實是自己寫的那份。
  2. 逐行检查是否存在禁止根目錄的規則,以及通配符寫得過宽的路径。
  3. 查看入口頁的 HTTP 响應头,重点找 X-Robots-Tag。
  4. 查看頁面源碼头部,確認 meta robots 與 canonical 没有異常。
  5. 對照訪問日誌,看蜘蛛對入口頁的請求是否正常出現、频率是否稳定。

几條實践建议

入口頁是给蜘蛛看的,任何可能阻断抓取的開關,上线前都應该過一遍清單,而不是等效果不對再回头翻。
  • 保留一份最小可用的 robots.txt,只寫必要的規則,改動前先备份。
  • 調整規則後立刻用抓取測試類工具驗證,確認目标路径确實可抓。
  • 新規則優先在實驗子域上试,不要直接改主力入口頁。
  • noindex 只用在确實不想被收錄的頁面上,別让它出現在入口頁模板里。

把這几件事做完,入口頁被挡在门外的低級問题基本可以排除。剩下的抓取量、抓取频次和 URL 發現效率,才有讨论的基础。