如果你手上有一组“正文看起来一样”的页面,但响应头不同,最先要判断的不是该不该让它们被抓取,而是它们是否会被当成同一资源处理。robots.txt 只能控制抓取路径,不能替你做规范化、状态码选择或索引合并。处理顺序应是:先确认响应头差异是否合理,再决定用 robots.txt 排除哪条路径,最后验证该路径是否真的不再影响后续判断。
把两个页面分别保存为原始响应,不要只看浏览器渲染结果。比较三类信息:正文是否完全一致、响应头是否一致、最终请求的 URL 是否一致。如果正文相同但响应头不同,常见原因有三种:
这些差异会直接影响后续判断:你究竟是在处理重复内容、抓取浪费,还是状态码或规范声明冲突。robots.txt 优化只能解决其中一部分,不能替代规范化。
假设你有一个商品筛选页,正文与主商品页相同,但筛选页响应头返回了不同的缓存策略,并且没有规范声明。此时搜索引擎可能把它当作独立页面处理,也可能因为路径规则把它归入抓取范围。关键判断如下:
不要先改 robots.txt。先取一组样本,至少包含主版本、重复版本和一个用于对照的正常页面。对每个 URL 记录:状态码、内容类型、缓存相关响应头、规范声明、是否在站点地图中、是否被内部链接指向。然后按以下条件分流:
Disallow 规则,然后观察抓取日志中该路径的请求是否下降。如果请求下降但索引中仍出现该 URL,说明还需要检查外部链接或历史索引,不能只靠 robots.txt 收尾。假设某站点有一个主商品页 /product/100,以及一个筛选页 /product/100?color=red。两者正文相同,但筛选页响应头没有规范声明,主商品页有。若你直接在 robots.txt 中禁止 ?color= 参数,爬虫将无法请求筛选页,也就无法读取它可能存在的规范声明。此时如果筛选页已被索引,robots.txt 不能保证它被移除。更稳妥的动作是:先让筛选页返回与主商品页一致的规范声明,再观察抓取和索引变化;如果确认筛选页不需要被抓取,才用 robots.txt 禁止。这个顺序会影响下一步:先统一信号,再限制抓取,最后验证索引,而不是反过来。
修改 robots.txt 后,抓取量下降或某个路径请求归零,不能单独证明处理正确。还有几种合理解释:爬虫本来降低了该路径的抓取频率、缓存导致日志延迟、内部链接被移除、或者站点地图更新后爬虫改变了抓取重点。要判断是否真正生效,应同时检查:主版本是否仍可抓取、规范声明是否被读取、索引中重复 URL 是否减少、以及站点地图是否只包含需要收录的版本。站点地图不保证收录,HTTPS 也不保证安全或排名,这些都不能替代对响应头和抓取路径的核查。不同搜索引擎对 robots.txt 和规范信号的支持情况须分别核查,不能用一个平台的表现推断全部。
最终决策可以归结为一句话:内容相同但响应头不同时,先用响应头和规范信号决定哪个版本该被处理,再用 robots.txt 决定哪个版本不该被抓取;顺序颠倒,后续判断就会失去可靠依据。