先给结论:当错误页面返回 200 时,核对重点不是“页面是否打得开”,而是把状态码、页面主体内容、最终 URL、以及搜狗侧可观察到的抓取结果放在一起比对。如果四者不一致,说明你面对的是内容与状态脱节,而不是单纯的收录延迟。此时应先把该 URL 单独隔离出来,用一次可复现的请求记录响应,再决定是改服务端返回逻辑,还是改页面内容策略。
很多所谓“错误页返回 200”的判断,其实来自浏览器地址栏仍显示原 URL,但页面已经跳到别的地址。要排除这一点,先看请求的最终状态:如果服务端通过 301、302 或前端跳转把用户带到另一个页面,那么原 URL 的状态码和最终展示内容本来就可能不同,这不算错误页返回成功。
真正需要处理的情况是:请求某个本应不存在的 URL,服务端直接返回 200,同时页面正文显示“内容不存在”“已下架”“参数错误”等提示。此时可用一条命令记录响应头与正文片段,作为后续核对的基准。
curl -I -s https://example.com/old-page 只取响应头,适合先看状态码和跳转位置;curl -s https://example.com/old-page | head -c 500 取正文开头,适合确认页面到底在说什么。两条结果放在一起,才能判断“200”是否伴随了错误提示正文。
核对一致性时,不要只看状态码。建议按下面的顺序逐项记录,任何一项对不上,都说明该页面需要单独处理。
site: 加具体路径观察该 URL 是否仍被展示、标题摘要是否与当前正文一致。这里只能作为线索,不能单凭一次查询就断定收录状态。一个假设例子:某页面下架后,服务端仍返回 200,正文却写着“商品已下架”。此时状态码与正文主题矛盾。若你只改正文为“404”,但服务端仍返回 200,问题依旧;若你只改状态码为 404,正文却继续展示完整商品信息,用户和搜索引擎看到的仍是两套信号。两种改法都只解决一半,必须同时调整。
同样是 200 配错误正文,成因不同,下一步动作也不同。
动作与结果的关系很直接:如果你把路由兜底改为 404,但站点地图仍包含这些 URL,抓取工具仍会反复请求它们。下一步就应同步检查站点地图和内部链接,避免继续把无效地址送出去。站点地图不保证收录,但把已知无效 URL 留在站点地图里,会让核对工作更难收敛。
修复后不要立刻全站复查。先选一个已确认存在问题的 URL,做一次隔离测试:
curl -I 确认状态码已变为预期的 404、410 或 301。curl -s | head -c 500 确认正文不再展示与状态码矛盾的内容。需要提醒的是,robots.txt 的抓取限制不等于可靠的索引移除。即使你用 robots.txt 挡住了某个路径,已存在的索引记录也不一定随之消失;如果目标是让错误页面退出索引,返回正确的 404 或 410 通常比单纯屏蔽更直接。HTTPS 也不保证页面内容与状态码一致,它只解决传输层问题,不解决服务端返回逻辑。
完成上述比对后,你手里应该有一张按 URL 记录的表:状态码、正文主题、最终 URL、搜狗侧观察结果。根据这张表分流:
只有当状态码、正文和最终 URL 三者一致时,你才有资格把问题交给抓取周期去消化;否则每一次“再等等看”都只是在拖延一个尚未修完的服务端问题。