内容相同、响应头不同,最直接的影响是:提交与后续判断不能只看正文是否一致。响应头里的状态码、Content-Type、Content-Length、缓存与编码声明,会改变抓取工具对“这个URL是否可访问、是否值得保留、是否需要改写或退出”的结论。若你已做过常规提交仍看不到预期结果,先保留原URL,把响应头逐项与正文对照,再决定是改写服务端响应还是退出该URL的提交。
两个URL返回同一段正文,不代表它们对抓取工具等价。需要区分三类差异。
可执行动作:对同一正文的两个URL分别记录状态码、Content-Type、Content-Length、缓存相关头和重定向链。若状态码或 Content-Type 不同,优先按语义差异处理;若只有长度与编码不同,先按传输差异观察。
响应头差异出现后,不必立刻删除或重新提交。先按下面条件选择。
适用前提:两个URL都返回 200,Content-Type 与字符集一致,重定向链为空,且差异只在 Content-Length、Date、Server 等不影响解析的字段。此时保留原URL并继续观察更合理,因为提交判断依赖的是可访问性与内容一致性,而不是字节数完全相等。
适用前提:正文相同,但一个返回 200、另一个返回 304 或 302,或 Content-Type 缺少字符集导致解析异常。此时应改写响应头,使同一内容的可访问URL具有一致的状态与类型声明。动作结果会直接影响下一步:若改写后状态与类型统一,再提交才有可比性;若仍不统一,继续提交只会重复得到矛盾信号。
适用前提:该URL长期返回 5xx、重定向到无关地址,或响应头声明的内容类型与正文实际格式冲突且无法修正。退出不是删除内容,而是停止把该URL当作可提交对象。退出后应把提交集中到保留URL上,避免两个地址互相稀释判断。
假设有两个地址返回同一段中文正文。地址A响应头为 HTTP/1.1 200 OK、Content-Type: text/html; charset=utf-8;地址B响应头为 HTTP/1.1 200 OK、Content-Type: text/html,且带 Vary: Accept-Encoding。两者正文逐字相同。
此时不能因为正文相同就认定两者等价。地址B缺少字符集声明,抓取工具可能按默认编码解析,导致中文出现乱码或截断。下一步动作应是先补齐地址B的字符集声明,再比较两者提交后的可访问状态。如果补齐后仍只有地址A被正常处理,说明差异不在正文,而在响应头声明或URL历史。
把响应头当作判断依据时,至少核对以下字段,并记录它们与正文的关系。
记录这些字段后,再决定保留、改写还是退出。若字段之间互相矛盾,优先修正服务端响应,而不是反复提交。
请求量、抓取量或某个统计归零,不能单独证明响应头差异已处理正确。归零还可能来自日志采样变化、访问路径改变、缓存命中或统计口径调整。同样,robots.txt 的抓取限制不等于可靠的索引移除;站点地图不保证收录;HTTPS 不保证安全无漏洞或排名。判断响应头差异是否解决,应回到状态码、Content-Type 与正文解析结果是否一致,而不是只看某一个计数。
如果两个URL正文相同但响应头不同,先保留可访问且声明一致的URL,改写矛盾响应头,退出无法修正的地址。完成这一步后,再提交保留URL,并用响应头字段与解析结果复核,而不是用单一统计变化下结论。