入口页是蜘蛛池里最容易被反复检查的部分,但 robots.txt 常常被忽略。很多入口页抓取异常,并不是服务器慢或者链接不够,而是一行 Disallow 把蜘蛛挡在了门外。下面整理 robots.txt 在蜘蛛池场景下容易踩的坑,以及相对稳妥的写法。
先明确 robots.txt 管不了什么
robots.txt 只是一份建议文件。主流搜索引擎的蜘蛛会参考它,但不会因为写了它就必然怎样:它不控制收录,也不保证页面被索引或被展示。反过来,写了 Disallow 也不等于页面绝对不会被抓到——外部链接指向的 URL 有时仍会被访问(只是通常不会展示摘要)。把它当成可控的引导和限速工具,而不是开关。
还要分清一件事:蜘蛛池入口页的目标通常是让蜘蛛顺利进来并沿着链接继续走。任何减少可抓 URL 数量的配置,都要先想清楚是不是真的要这么做。
三类最常见的误伤
1. Disallow 范围写得太大
Disallow: / 是最粗暴也最容易误伤的写法。有些入口页为了临时避免被采集而加上,结果忘了删,整站蜘蛛流量就断了。另一个高频问题是参数通配:Disallow: /*? 会把所有带查询参数的入口页一起挡掉,而不少入口页 URL 恰恰带参数。
2. 顺手屏蔽了静态资源
Disallow: /css/ 和 Disallow: /js/ 这类规则,在只想屏蔽图片热链的时候很常见。如果蜘蛛需要读取样式和脚本才能判断页面结构,这些规则会影响它对页面的理解。对入口页来说,把 CSS、JS 放开通常比屏蔽更合适。
3. robots.txt 本身返回异常
如果 robots.txt 返回 500 或超时,不同蜘蛛的处理策略不一样:有的会短暂暂停抓取,有的会按全部允许继续。这种不确定性对蜘蛛池不友好。至少保证它稳定返回 200 和纯文本,不要让它走动态逻辑或依赖数据库。
频率相关指令:能写,但别指望太多
crawl-delay 只有部分搜索引擎支持,单位是秒,写 10 就等于把抓取间隔拉长到 10 秒。对想扩大 URL 发现量的蜘蛛池来说,这个值通常不该设置,或者只设一个很小的值。真正控制抓取节奏的手段是服务器响应速度和日志观察,而不是靠这一行。
Request-rate 之类写法支持度更低,写上去意义有限。
该放开的部分
- 入口页本身所在的目录,不要用通配符一网打尽。
- CSS、JS、字体等渲染所需资源。
- sitemap 文件所在的路径。
- 详情页、列表页等希望被继续爬取的链接目标。
如果确实有不想被抓的目录,比如后台、测试环境、临时导出文件,单独列出来,越具体越好,不要用宽泛的前缀。
上线前后的检查步骤
- 直接访问 https://域名/robots.txt,确认状态码 200、Content-Type 为 text/plain。
- 逐行读一遍 Disallow,把每条规则和实际目录对一遍,删掉已经失效的临时规则。
- 用搜索引擎官方的 robots.txt 测试工具跑一遍入口页 URL,看结果是允许还是被屏蔽。
- 在日志里观察几天,看主流蜘蛛的抓取量有没有突然下降,下降往往和最近的规则改动有关。
- 确认 sitemap 地址写在 robots.txt 里,并且该地址返回正常。
几点使用建议
robots.txt 的改动影响面很大,改之前先备份旧版本,出问题能立刻回滚。另外不同搜索引擎对同一份文件的解析细节有差异,尤其是通配符 * 和 $ 的处理,所以规则越简单越好,能用具体路径就别用通配符。
判断一条规则该不该加,先问一句:加上之后,我希望被发现的 URL 会不会变少?如果会,先想清楚理由再动手。
最后提醒一点,robots.txt 解决不了内容质量问题。它能做的是不挡路、不乱限速,剩下的还是要回到入口页本身的结构、响应速度和内容上。