判断 robots.txt 问题属于哪一层,核心是分清“文件能否被访问”“语法是否被正确解析”“规则是否匹配了目标 URL”“抓取限制是否被误当成索引控制”这四层。假设一个例子:你在 https://example.com/robots.txt 写了 Disallow: /private/,但搜索结果显示 /private/page.html 仍被收录。这个现象可能来自多个层级,不能直接断言是写法错误。
这一层只回答一个问题:爬虫请求 robots.txt 时,拿到的是不是 200 状态、纯文本内容。如果服务器返回 404,多数搜索引擎会把“没有 robots.txt”视为允许抓取;如果返回 403、5xx 或跳转到登录页,规则是否生效就取决于不同搜索引擎的处理方式,必须分别核查。
可以执行的检查:
curl -I https://example.com/robots.txt 看状态码和内容类型。/blog/robots.txt,它通常不会被当作站点级规则。text/plain,而不是 HTML 错误页。判断结果:如果状态码不是 200,先修服务器或部署问题,不要继续调规则。如果返回 200 但内容是 HTML,说明访问路径被应用路由接管,也属于这一层。
robots.txt 的常见字段包括 User-agent、Disallow、Allow、Sitemap。字段名大小写通常不敏感,但值的大小写和路径匹配要按实际规则理解。常见错误有:
#,导致整行被当成规则值。Disallow: /private 却以为能阻止 /private-page,实际路径前缀匹配可能不同。User-agent 组,却没有意识到同一爬虫会按最具体匹配或合并规则处理。Sitemap 写进某一段 User-agent 组里,误以为它只对该爬虫生效。这一层的判断方法:把 robots.txt 原文逐行拆开,确认每个字段都有合法值,路径以 / 开头,通配符 * 和结尾符 $ 的使用符合预期。若语法本身有歧义,不同搜索引擎可能表现不同,应分别用对应平台的抓取测试工具核查,而不是只凭一个工具的结果下结论。
文件可访问、语法也正确,问题仍可能出在匹配层。假设目标是 https://example.com/private/page.html,规则写的是 Disallow: /private/,它可能匹配;但如果目标实际是 https://example.com/Private/page.html,路径大小写不同,是否匹配要看具体实现。再比如规则写 Disallow: /*.pdf$,它只针对以 .pdf 结尾的路径,不会阻止 /private/page.html。
可执行的对比步骤:
/ 开始的部分。Allow 和 Disallow 行抄出来,按长度或具体程度判断哪条优先。判断结果:如果测试工具显示“被允许”,但你认为应该被阻止,问题在匹配层;如果显示“被阻止”但页面仍出现在结果里,问题可能不在抓取层,而进入下一层。
这是最容易误判的一层。robots.txt 的 Disallow 阻止的是爬虫抓取,不等于可靠的索引移除。一个页面如果已被其他来源链接、已被收录,或者被允许抓取的片段仍能推断内容,它仍可能出现在搜索结果中。站点地图也不保证收录,HTTPS 也不保证安全无漏洞或排名。
如果确认某个 URL 不应该出现在搜索结果里,正确顺序通常是:
noindex,但要注意 noindex 需要页面能被抓取才能被看到。Disallow 和 noindex 同时用在同一 URL 上,否则爬虫可能看不到 noindex。判断结果:如果 robots.txt 测试显示“已阻止抓取”,但搜索结果仍有该 URL,问题属于索引层,不是 robots.txt 写法层。此时继续改 robots.txt 通常不能解决收录展示问题。
第一次接触这个问题时,可以按下面顺序走一遍,每步只回答“是或否”,避免跳层:
/robots.txt,状态码是否为 200 且内容为纯文本?否,修访问层。下一步:拿一个你实际关心的 URL,按这四层各记录一次结果。哪一层第一次出现“否”,就先修那一层,不要同时改 robots.txt、页面标签和移除请求。