Robots 文件本身读不到的时候,抓取方按什么规则继续
Robots 文件读不到时抓取方怎么继续,排除协议给了两种相反的结果:服务端错误按全部禁止处理,客户端错误按不受限制处理。前者是站点自身出问题,抓取方要停手;后者通常是这个文件不存在,抓取方可以继续访问服务器上的资源。协议原文同时强调,这套规则不是访问授权,真正能挡住访问的是站点自己的权限和内容安全措施。
读取失败为什么会有两种相反结果
抓取方在取页面前先读这份排除文件,读不到不代表没有规则,它得决定「停」还是「继续」。停手太激进:站点只是临时故障就全站不抓,会误伤正常更新;继续太宽松:站点明确拒绝却因为入口坏掉而被绕过。协议用状态码区间来分这条线,把「服务器出问题了」和「这个文件本来就没有」区分开处理。
服务端错误按全部禁止处理
协议定义服务端错误由 500 到 599 这段状态码标识。出现这段返回时,规定抓取方必须假设完整禁止,也就是把整个站点当作不允许抓取来处理,等到这个文件能正常读取为止。对站方来说,这意味着后台报错、反向代理异常、脚本超时这类问题会顺带影响抓取:文件本身写得很宽松也没有用,抓取方读到的是错误状态。
客户端错误按不受限制处理
状态码落在 400 到 499 这段时,处理方式完全反过来:抓取方可以访问服务器上的任意资源。常见的 404 就是这个情形——站方没有放置这份文件,也没有意图要限制谁。协议把「不存在」解释成「没有限制」,而不是「默认禁止」。这一点对运维有实际影响:想收紧抓取范围,靠删掉文件是办不到的,删掉等于放弃控制。
协议自己划的边界:不是访问授权
原文里有两句值得逐字读:这些规则不是访问授权的一种形式;机器人排除协议不是有效内容安全措施替代品。翻译成立场就是——这份文件管的是礼貌抓取者的行为约定,管不住不肯遵守的程序,更管不住直接请求接口的脚本。任何不希望公开的内容,必须用鉴权、权限与接口暴露范围来挡,而不是写在排除文件里指望别人绕开。
| 读取结果 | 状态码区间 | 抓取方按什么继续 | 站方要注意什么 |
|---|---|---|---|
| 正常返回 | 二百段成功 | 按文件里的放行与排除规则抓取 | 规则改动会立刻反映到抓取行为 |
| 服务端错误 | 500 到 599 | 必须视为完整禁止,暂停抓取 | 站点故障会连带冻结抓取,恢复优先级要提高 |
| 客户端错误 | 400 到 499 | 可以访问服务器上任意资源 | 文件不存在等于没有限制,想控制必须放回文件 |
排除文件管不到的三类场景
一是需要登录态的入口,例如后台与用户中心。AnQiCMS 的后台地址独立于站点正文,用户管理和 VIP 分组支持按用户组设置访问权限,读不到内容的页面本来就不该依赖排除文件保密。二是接口路径与临时地址,抓取方不请求它们也能被别的程序请求。三是带参数即可枚举的列表页,靠排除规则限制参数容易漏,更适合在接口层限制返回字段。
站方自查这份文件的四个动作
第一步确认它能被正常读到:用抓取工具直接请求,看返回是不是成功状态,而不是被跳转或改写。第二步确认它没有被前置层缓存成长期不变的版本,站点规则调整后旧副本仍在生效。第三步确认排除范围写在正确的路径上,伪静态与重写规则会让目录层级和实际文件名对不上。第四步确认敏感入口另有权限保护,不要只靠排除文件藏起来。AnQiCMS 在后台提供 robots 配置入口,改动留痕便于核对当前生效的版本。
常见问题
问:文件读不到会不会被判定为全站禁止抓取? 答:分情况。服务端错误这段会被视为完整禁止;客户端错误这段反而是完全放行。
问:临时关闭站点抓取,是不是把这份文件删掉就行? 答:不行。删掉返回的是「文件不存在」,按协议等于不受限制。要收紧得写排除规则,或者在服务器层直接限制。
问:抓取方不遵守这份文件,站方还能做什么? 答:走鉴权与权限这一层,把不该公开的入口挡在登录态和分组权限后面,再配合接口暴露范围控制。