区分 robots协议正常与异常结果,核心是看“请求是否被正确响应、规则是否被正确解析、抓取行为是否与规则一致”这三件事。正常结果是:服务器返回 200 且内容为纯文本规则,搜索引擎抓取工具按 Disallow 与 Allow 执行;异常结果则是:返回 4xx/5xx、返回 HTML 页面、规则被误读,或抓取行为明显违反已写明的规则。下面用一个假设例子展开,说明怎样收集证据、定位原因。
假设某站点在 robots.txt 中写了 Disallow: /private/,但日志显示抓取工具仍反复请求 /private/list。这时不要直接断定“robots协议失效”,因为同一现象至少有两种解释:一是抓取工具没有成功获取或解析该文件;二是被请求的 URL 实际不在规则覆盖范围内,比如规则只屏蔽目录本身,而某些实现会继续抓取目录下的具体文件路径。需要分别验证。
第一步是直接请求该文件,检查状态码与内容类型。正常结果应满足:
200,而不是 404、403 或 5xx;/robots.txt,大小写正确;如果返回 5xx,抓取工具可能暂时按“允许抓取”处理,也可能重试后再判断,这取决于具体实现,不能一概而论。若返回 404,一般视为没有限制,但这也意味着你写的规则根本没有生效。若返回 200 却是 HTML,则解析很可能失败,规则同样不生效。判断结果时,重点看“文件是否被成功读取”,而不是只看浏览器里能否打开。
robots.txt 的规则按抓取工具分组,User-agent、Disallow、Allow 的拼写、大小写和顺序都会影响解析。常见错误包括:把注释写在规则同一行导致后半段被忽略;用 Disallow: /private 却以为能屏蔽所有包含 private 的路径;在 User-agent 组之间漏掉空行,导致规则被归到错误的组。
可以用一个短例子核对:假设规则为
User-agent: *
Disallow: /private/
Allow: /private/public/
那么 /private/list 应被禁止,/private/public/a 应被允许。若日志显示前者仍被大量抓取,就要回到“文件是否被成功读取”这一步;若文件正常,则可能是抓取工具不支持 Allow 的某些写法,或规则被其他配置覆盖。不同搜索引擎对 Allow 与通配符的支持程度需要分别核查,不能默认完全一致。
正常与异常的另一个分界,是“抓取行为是否与规则一致”。可以按下面清单逐项检查:
这里要特别提醒:robots.txt 的抓取限制不等于可靠的索引移除。即使某个 URL 被 Disallow,它仍可能因为外部链接等原因出现在搜索结果中,只是摘要可能受限。若目标是让页面从索引中消失,应使用对应的移除工具或页面级 noindex,并确认该页面没有被 robots.txt 阻止抓取,否则 noindex 可能无法被读取。站点地图也不保证收录,它只是提交候选 URL 的方式之一。
排查时不要把猜测写成结论。比如“抓取工具没读 robots.txt”只是可能原因,只有当你确认返回了 5xx、内容为 HTML 或解析失败时,才算已经定位。反过来,“规则写对了”也不等于“抓取行为一定符合预期”,因为缓存、重定向和不同实现都会带来差异。判断顺序建议是:先确认文件可获取,再确认语法可解析,最后用日志验证行为。三步都通过,才可认为 robots协议处于正常状态;任何一步失败,都应按异常处理并继续收集证据。
下一步,直接对你的站点执行一次根目录 robots.txt 请求,记录状态码、内容类型和响应体前几行,再与最近一段时间的抓取日志对照。若状态码不是 200,或内容类型不是纯文本,优先修复文件可访问性,而不是继续调整规则细节。