搭蜘蛛池时,大多数人把精力花在域名、服务器、模板和链接结构上,却容易忽略一个只有几行的文件: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,改一处漏一处。
一套按顺序执行的排查清单
- 用浏览器直接打开域名下的 robots.txt,确认返回正常状态码且内容确实是自己写的那份。
- 逐行检查是否存在禁止根目录的规则,以及通配符写得过宽的路径。
- 查看入口页的 HTTP 响应头,重点找 X-Robots-Tag。
- 查看页面源码头部,确认 meta robots 与 canonical 没有异常。
- 对照访问日志,看蜘蛛对入口页的请求是否正常出现、频率是否稳定。
几条实践建议
入口页是给蜘蛛看的,任何可能阻断抓取的开关,上线前都应该过一遍清单,而不是等效果不对再回头翻。
- 保留一份最小可用的 robots.txt,只写必要的规则,改动前先备份。
- 调整规则后立刻用抓取测试类工具验证,确认目标路径确实可抓。
- 新规则优先在实验子域上试,不要直接改主力入口页。
- noindex 只用在确实不想被收录的页面上,别让它出现在入口页模板里。
把这几件事做完,入口页被挡在门外的低级问题基本可以排除。剩下的抓取量、抓取频次和 URL 发现效率,才有讨论的基础。