遇到错误页面却返回 200 的情况,先不要急着改跳转规则。正确顺序是:把页面当前实际返回的状态码、响应头和正文内容一起抓下来,再与“这个 URL 应该代表什么内容”逐项对照。只有确认状态码与内容确实矛盾,且矛盾来自永久重定向链路本身,才值得动 301。下面按可核对的步骤展开。
很多人只看了浏览器里显示什么,就判断状态正常。浏览器会渲染正文,却不会把状态码摆在显眼位置,所以必须单独取证。
Location、Content-Type。假设一个旧地址 A 永久重定向到新地址 B,但 B 实际返回的是“页面不存在”的提示,同时状态码是 200。此时 A 的跳转本身可能没错,问题出在 B 的内容与状态不一致。区分这一点,决定了下一步是查 B 的内容源,还是查 A 的跳转规则。
状态码 200 配错误文案,常见来源不止一种。把它们列成可核对的证据,比凭感觉猜更可靠。
Location 指向。如果两次抓取结果不同,说明缓存参与其中;如果两次一致且正文确为错误模板,则更可能是服务端兜底逻辑。这个判断直接影响后续动作:前者先处理缓存刷新,后者才进入代码或配置修改。
永久重定向方法的核心是让一个地址长期指向另一个地址。核对时要逐跳记录,而不是只看首尾。
Location 是否指向预期目标。一个实际动作是:把每一跳的 URL 和状态码按顺序写进一张清单,标注“预期落点”和“实际落点”。如果实际落点比预期多出一跳,说明中间有未记录的规则在生效;这时应先清理多余跳转,再复查最终页面的内容与状态。这个动作的结果会告诉你,矛盾到底在跳转层还是内容层。
不是所有状态与内容不一致都该用永久重定向修。要分清两种情况。
情况一:目标内容确实换了新地址。此时用 301 把旧地址指向新地址是合理的,但要保证新地址返回 200 且正文正确。改完后重新抓取,确认每一跳状态与内容都一致。
情况二:内容本来就该在当前位置。此时返回错误文案说明内容源或路由有问题,301 只会把问题搬到另一个地址。应先修内容源,让原地址返回正确正文和 200,再评估是否还需要重定向。
另外,robots.txt 的抓取限制并不等于可靠的索引移除,站点地图也不保证收录。所以即使状态码和内容都改对了,也不要据此推断索引层面的结果,这两件事需要分开核查。
当多个角色对“这个页面到底正常不正常”有不同理解时,争论往往源于各自看到的证据不同。可行的做法是统一记录格式:URL、每跳状态码、最终状态码、正文摘要、抓取时间、是否绕过缓存。把这份记录交给各方,分歧点会从“感觉不对”变成“第几跳的落点与预期不符”。
这份记录也方便后续复查:改动前后各抓一次,对比状态码和正文是否同时变化。只有状态与内容在同一份证据里都对上,才能认为这次处理完成,并据此决定是否需要继续排查其他 URL。