蜘蛛池知识

蜘蛛池入口页的 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 发现效率,才有讨论的基础。