处理 robots.txt 的重复或冲突信号,核心原则是先确认“谁在生效、谁在被忽略”,再合并成一份可预测的规则。robots.txt 按协议只认根目录下的一个文件,同一主机名下的子目录 robots.txt 不会被主流爬虫当作独立规则读取;但如果你同时用了 HTML meta robots、X-Robots-Tag 或站点地图里的抓取提示,就可能出现“robots.txt 允许抓取,页面 meta 却说不索引”这类叠加冲突。抓取限制不等于可靠的索引移除,这两类信号必须分开管理。
要查什么:https://example.com/robots.txt、http://example.com/robots.txt、https://www.example.com/robots.txt 以及各子域名下是否都能打开同一份内容。怎么查:用浏览器或 curl -I 分别请求这些地址,记录状态码和正文。结果说明什么:如果 http 与 https、带 www 与不带 www 返回不同内容,说明你的站点存在多份规则,爬虫会按它实际访问到的主机名各读一份。此时应确定一个规范主机名,把其余地址做 301 跳转,只保留一份 robots.txt。
要查什么:同一个 User-agent 分组里是否同时出现 Allow 和 Disallow 指向同一路径,或者同一路径被写了两遍。怎么查:把 robots.txt 复制出来,按 User-agent 分组逐行核对路径。结果说明什么:在主流实现中,同一分组内更长的路径匹配通常优先;长度相同时 Allow 往往优先于 Disallow,但这并非所有爬虫都保证一致。判断方法:对每条关键路径,写出“会被允许还是被禁止”的预期,再用搜索平台的 robots.txt 测试工具或抓取日志验证。若无法确定,最稳妥的做法是删掉重复行,只保留一条明确规则。
要查什么:被 Disallow 的 URL,是否同时带有 <meta name="robots" content="noindex"> 或 HTTP 响应头 X-Robots-Tag: noindex。怎么查:对目标 URL 查看 HTML 源码头部和响应头。结果说明什么:如果 URL 被 robots.txt 禁止抓取,爬虫无法读取页面上的 noindex,这个 noindex 就不会生效,页面仍可能因外部链接被索引(通常只显示 URL 而不显示摘要)。robots.txt 的抓取限制不等于可靠的索引移除,真正要阻止索引,应允许抓取并输出 noindex,或使用搜索平台提供的移除工具。
要查什么:robots.txt 里是否 Disallow 了站点地图路径,或站点地图里是否包含被 Disallow 的 URL。怎么查:对照 robots.txt 的 Disallow 规则和 sitemap.xml 中的 URL 列表。结果说明什么:站点地图不保证收录,它只是提交候选 URL;但若站点地图大量包含被禁止抓取的地址,会浪费抓取预算并让信号混乱。处理方式:要么从站点地图移除这些 URL,要么调整 robots.txt 允许抓取。适用条件:仅对确实需要被索引的页面这样做;对后台、搜索结果页等本就不该索引的路径,保持禁止并移出站点地图即可。
下一步:把上述清单跑一遍,把多份 robots.txt 合并为一份,并单独记录“抓取控制”和“索引控制”两套信号,避免再把 Disallow 当作移除索引的手段。