最常见的误操作,是把 robots.txt 当成“内容管理开关”:以为禁止抓取就能删除页面、保护隐私、阻止收录或提升安全。实际上,它只表达“请爬虫不要抓取某路径”的请求,能否被遵守、是否影响索引,取决于具体爬虫、该 URL 是否已被收录、是否有其他入口和信号。下面按准备、实施、验证、维护四个阶段,说明误解如何一步步变成误操作。
误解一:禁止抓取等于禁止收录。如果某页面已被搜索引擎收录,之后在 robots.txt 中禁止抓取,爬虫可能无法读取页面内容,但该 URL 仍可能留在索引里,只是缺少标题和摘要。想移除索引,应优先让页面返回 404 或 410,或在确有需要时使用页面级 noindex;但 noindex 生效的前提是爬虫能抓取该页面,若同时被 robots.txt 禁止,noindex 就看不到,形成互相抵消。
误解二:robots.txt 能保护隐私或敏感目录。它是一份公开文件,任何人都能读取其中的路径,等于把不想公开的目录结构列出来。真正的访问控制应使用登录鉴权、服务器权限或防火墙。
误解三:Disallow 和 Allow 谁写得靠前谁优先。主流实现是按“最具体匹配优先”,路径越长越具体,而不是按书写顺序。规则写反时,可能出现以为放行了实际仍被拦,或以为拦住了实际仍可抓。
假设站点要禁止抓取站内搜索结果页,URL 形如 /search?q=关键词。一个常见写法是:
Disallow: /search
这条规则会连带禁止 /search-help、/search-engine 等以 /search 开头的路径,而不只是搜索参数页。更精确的写法是 Disallow: /search?,只匹配带问号的搜索页。判断方法:把规则代入真实 URL 前缀逐条比对,凡是“同前缀但不同用途”的目录,都要单独检查是否被误伤。
另一类误操作是漏掉结尾斜杠,导致目录与同名文件混淆;或在 User-agent 分组之间插入空行、注释位置不当,使规则被归到错误的分组。实施时建议:每个 User-agent 分组独立成段,组内只放属于它的规则,改完后用文本对比方式确认没有把上一组的规则粘到下一组。
验证要分三层,缺一层都可能误判:
* 和结尾 $ 的支持范围、大小写处理、是否区分 User-agent 名称。不同搜索引擎支持情况须分别核查,不能拿一个爬虫的结果推断另一个。需要分清“可能原因”和“已经定位的原因”:页面未收录,可能因为 robots.txt 拦截,也可能因为 noindex、 canonical 指向他处、内容质量或缺少内链。只有抓取测试明确显示被阻止,才能把 robots.txt 列为已定位原因。
站点改版、目录改名、临时屏蔽测试环境后忘记恢复,都会让旧规则继续生效。建议每次上线前检查三项:新增目录是否被旧规则误伤;临时 Disallow 是否已删除;站点地图中是否仍包含被禁止抓取的 URL。robots.txt 不能替代站点地图,站点地图也不保证收录,两者作用不同,不应互相顶替。
如果当前正遇到“页面消失或流量下滑”,下一步是先用抓取测试工具确认目标 URL 是否被 robots.txt 阻止,再对照服务器日志看该爬虫实际请求了哪些路径、返回了什么状态码。拿到这两份证据后,再决定是改规则、改页面状态码,还是排查其他原因。