先给结论:错误页返回 200 并不等于“内容没问题”,它只是说明服务器告诉客户端“请求成功”。要判断是否真的该返回成功状态,需要把页面类型、正文特征、渲染后内容和响应头放在一起核对,而不是只看状态码。常见矛盾是:状态码 200,但页面正文写着“商品已下架”或“页面不存在”,同时页面还能被正常抓取。此时应优先确认这是“软 404”,还是“内容确实存在但文案误导”。
假设一个电商站点的某个商品页已经下架,后端仍返回 200,正文包含“该商品暂时无法购买”和推荐商品列表。运维看到 200 认为正常,SEO 看到下架文案认为应该返回 404 或 410,编辑看到推荐模块认为页面仍有价值。三个角色对“这个页面是否有效”产生分歧。
这个分歧不能靠投票解决,而要转成可核对的事实:该 URL 是否仍代表一个独立、可访问、有实质内容的实体?如果它只是错误提示或空壳,就不应该用成功状态告诉搜索引擎“这里有一个正常页面”。
解释一:这是软 404。页面本质是错误提示,没有独立内容,只是模板统一返回 200。典型证据是正文只有“找不到”“已下架”“请返回首页”,没有该 URL 原本对应的商品、文章或数据。此时状态码与内容不一致,应改为 404 或 410,或做 301 到相关有效页面。
解释二:这是正常内容页,只是包含部分不可用信息。例如商品仍存在,但某个规格暂时缺货,正文仍有价格、描述、评价和购买入口。此时 200 可能是合理的,问题在于错误提示文案让读者误以为整页失效。应核对的是“主体内容是否仍可用”,而不是看到“无法购买”就立刻改成 404。
两种解释成立的条件不同:前者要求页面缺少该 URL 应有的核心内容;后者要求核心内容仍在,只是局部状态变化。判断时不要用“页面看起来像错误页”作为唯一依据。
可以按下面顺序收集证据,每一步都影响下一步动作:
curl -I 或浏览器开发者工具的 Network 面板确认状态码、Content-Type、X-Robots-Tag 和重定向链。若状态码是 200,但响应体只有错误模板,软 404 的可能性上升。Product 标记,会进一步混淆内容与状态的一致性。此时应让标题、结构化数据和实际可见内容指向同一事实。一个实际动作是:先对疑似软 404 的 URL 做一次“原始响应 + 渲染后正文”的对照记录。若原始响应为 200,渲染后正文仍只有错误提示,就把该 URL 归入软 404 候选;下一步再决定返回 404、410 还是 301。这个动作的结果会直接影响修复方式:候选确认后,改状态码才有意义;如果正文其实完整,则应改文案和结构化数据,而不是改状态码。
假设某篇文章被删除,但模板仍返回 200,正文显示“文章不存在”,同时侧边栏有最新文章列表。核对后发现:文章正文为空,标题仍是原标题,结构化数据仍声明为文章。此时可判断为软 404,处理路径是返回 404 或 410,并移除该 URL 的站点地图条目和内链。
另一个假设:某商品仍可访问,但默认规格缺货,正文显示“该规格暂时缺货”,价格、描述和评价仍在。核对后发现核心内容完整,只是局部状态变化。此时不应返回 404,而应保留 200,修正提示文案,让读者和搜索引擎都理解“商品存在,部分规格不可购买”。
这两个例子的区别不在状态码本身,而在“该 URL 是否仍代表一个有效实体”。把这一点写成可核对的项目,多个角色就能用同一组证据讨论,而不是各自坚持“看起来像错误页”或“状态码是 200 所以没问题”。
可以建立一张最小核对表,字段包括:URL、当前状态码、原始正文是否含核心内容、渲染后正文是否含核心内容、是否在站点地图中、是否有内链、期望状态。每个角色只负责自己能确认的字段,避免把“我认为”当成事实。
如果核对结果显示核心内容缺失,动作是改状态码并清理内链;如果核心内容存在但文案误导,动作是改文案和结构化数据;如果页面被 robots.txt 限制但仍有旧索引,动作是分别核查抓取限制和索引移除,不能把前者当成后者。不同搜索引擎对软 404 和索引移除的支持情况须分别核查,不能用一个平台的表现推断另一个平台。
最后,状态码、正文、标题、结构化数据和站内链接应指向同一事实。只要其中一项与其他项矛盾,就先把它记录下来,再决定改哪一项;不要为了让状态码“看起来对”而删除仍有价值的内容,也不要因为状态码是 200 就忽略明显的错误提示。