先给结论:当错误页面返回 200 时,不能只看状态码,也不能只凭页面正文判断。可靠做法是同时核对三件事——响应状态、正文是否属于错误语义、以及该 URL 是否应当存在。若三者不一致,优先修正状态码或内容,再决定是否让蜘蛛重新抓取。
蜘蛛判断一个 URL 是否有效,首先看 HTTP 响应状态。200 表示请求成功,蜘蛛通常会把响应正文当作该 URL 的正常内容处理。如果这个正文其实是“页面不存在”“商品已下架”“栏目已迁移”之类的提示,就会出现状态与内容错位。
这种错位常见于两类实现:一是软 404,服务器对不存在的路径统一返回 200 加一段提示;二是错误页被套进正常模板,标题、导航、页脚都在,只有主体区显示错误信息。对访问者来说它像错误页,对蜘蛛来说它像正常页。
看到错误页返回 200,有两种成立条件不同的解释。
区分这两者,不能靠猜测,要靠可复查的证据。
第一组证据来自响应头。用 curl -I 或浏览器开发者工具的 Network 面板查看目标 URL,记录状态码、Content-Type、是否有 Location、Retry-After 等字段。若大批不存在的路径都返回 200 且内容雷同,配置疏漏的可能性更高。
第二组证据来自正文语义。检查页面是否包含明确的“不存在”“已删除”“已迁移”表述,以及这些表述是否只出现在主体区。若标题和导航仍在宣称这是正常内容页,说明模板层没有把错误状态传递出来。
第三组证据来自 URL 集合。把返回 200 的错误页 URL 与站点地图、内链、历史访问日志对照。若这些 URL 从未被列入有效内容,却持续返回 200,说明状态映射规则需要调整;若它们曾是有效页面,只是内容暂时缺失,则要判断是保留 200 还是改为 503。
假设某站把已下架商品页统一返回 200,正文写“该商品已下架”。这里有两个动作顺序。
这个例子只用于说明比较方法:状态码决定蜘蛛如何归类,正文决定用户看到什么。两者必须指向同一件事。
建议按以下顺序执行,每一步的结果都影响下一步。
需要提醒的是,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。状态码与内容一致只是让蜘蛛获得正确信号,是否重新处理仍取决于该 URL 在站内的实际角色。