robots.txt 是站点跟爬虫沟通的第一道门。文件很小,几行文本就能影响整站的抓取行为,也正因为改动成本低,很容易在一次调试或改版后留下没清理的规则,几个月都没人察觉。等到发现抓取异常再回头查,排查范围往往已经很大了。
先分清边界:robots.txt 管抓取,不管索引
这是最容易被误解的一点。Disallow 只是请求爬虫不要抓取某个路径,它并不能保证页面从搜索结果里消失。如果一个页面已经被收录,之后再把它 Disallow 掉,爬虫无法重新访问,也就看不到页面上的 noindex 标记,页面可能长期留在索引里,标题和摘要还是旧的。
所以处理不希望被索引的页面,顺序应该是:先让页面可以被抓取,在页面里加 noindex(或响应头 X-Robots-Tag),确认索引里消失之后,再考虑是否需要屏蔽抓取。反过来做,通常会把问题拖得更久。
几个高频出错点
测试环境的规则跟着上线了
开发或预发布环境常会写 Disallow: /,避免测试内容被抓。如果发布流程里直接把这些文件同步到正式站,搜索引擎看到的第一个信号就是整站别抓。这类问题通常不会报警,只能靠人工核对,所以建议在发布清单里加一行:上线后打开域名下的 robots.txt,逐行读一遍。
把 CSS、JS、图片一起屏蔽
有些站点为了减少抓取压力,会屏蔽静态资源目录。结果是爬虫拿不到样式和脚本,无法按真实方式渲染页面,对移动适配、内容可读性的判断都会受影响。静态资源目录一般不需要屏蔽,真要限制,也应该先确认它对页面渲染没有关键作用。
屏蔽参数页,却忘了已有收录
站内搜索、筛选、排序这类参数组合容易产生大量近似 URL,屏蔽它们是常见做法。但要注意两点:一是已经收录的地址不会因为加了 Disallow 就立刻消失;二是有些参数页承载了真实内容,比如带分页的列表。建议先梳理哪些参数必须保留、哪些纯属冗余,再决定屏蔽范围,而不是一条通配符全部盖掉。
语法与匹配规则没写对
- 路径区分大小写,/News 和 /news 不是一回事;
- Allow 和 Disallow 同时命中时,一般按最长匹配优先,规则细节各家实现略有差异;
- 通配符 * 和结尾符 $ 的支持程度不完全一致,重要规则不要只依赖它们;
- Sitemap 一行要写完整的绝对地址,写相对路径没有意义;
- 文件不要带 BOM、不要用重定向跳转,直接返回 200 文本最稳。
文件本身的状态被忽略
robots.txt 返回 404 时,爬虫通常按全部允许处理;如果返回 5xx,部分爬虫会暂时降低抓取甚至暂停,直到文件恢复正常。服务器迁移、权限配置变动之后,顺手确认一下这个文件的响应码,成本很低。
一份可以照着做的自查清单
- 打开正式站点的 robots.txt,确认没有 Disallow: / 这类整站规则;
- 确认没有出现测试域名、内网地址、临时目录;
- 检查被屏蔽的路径里,有没有正在争取曝光的重要栏目或文章目录;
- 核对 Sitemap 地址是否正确,且指向的是正常页面;
- 把规则和站点地图、目录结构对照一遍,看是否存在互相矛盾的设置;
- 在搜索平台的抓取测试工具里跑几条真实 URL,看是被允许还是被拦截;
- 改动前留一份旧版本备份,改动后记录时间和原因。
改完别急着下结论
规则调整之后,抓取量、抓取频次和索引状态都不会立刻变化,观察周期通常以周计。这段时间里可以关注服务器日志中爬虫的访问路径分布,看原本被挡住的目录是否重新出现请求,而不是只看某一天的访问总数。
把 robots.txt 当成一份需要维护的配置,而不是一次写完就忘的文件。每次改版、换域名、调整目录结构之后,都值得回头读一遍。
这类文件的问题往往不复杂,难在发现。纳入固定的检查节奏,比事后大面积排查要省力得多。