要取得可复查的状态证据,核心是让每一次404判断都能被第三方复现:保留原始HTTP响应、请求时间、请求URL、User-Agent和重定向链,而不是只截一张“页面显示404”的图。对已有页面或项目做改进时,先固定证据格式,再决定哪些404需要修复、保留或做301跳转。
同一个URL显示404,背后可能是不同状态。证据强度从低到高可以这样排:
curl -I -L --max-redirs 5 https://example.com/old-page
其中-I只取响应头,-L跟随重定向,--max-redirs 5限制跳转层数。把输出重定向到文件,就得到一份带时间戳的可复查记录。若需要看最终响应码,可在命令后加-o /dev/null -s -w "%{http_code} %{url_effective}\n"。
要让别人复查,记录字段应统一。建议每条至少包含:
2025-03-01T10:20:30+08:00。假设示例,实际以你的记录为准。Content-Type、Cache-Control、X-Robots-Tag(若存在)。如果只记录“404了”,复查者无法判断是服务器配置、CDN缓存、应用路由还是跳转规则造成。字段齐全后,才能比较修复代价。
截图容易丢失请求上下文。更稳妥的做法是把检查写成脚本或固定命令,并保留输出。下面是一个假设的检查流程,用于说明判断逻辑:
假设你有一批旧URL,先逐条执行:
curl -s -o /dev/null -w "%{http_code} %{redirect_url} %{url_effective}\n" "https://example.com/old-page"
判断结果时:
404开头:服务器明确返回未找到。若该页面仍有搜索价值或外链,考虑301到最相关的新页面;若无替代内容,可保留404或改为410。301或302开头,且redirect_url有值:说明发生了跳转。需要继续跟随,确认最终落地页是否200,避免跳转链过长或跳到另一个404。200开头,但页面内容写着“不存在”:这是软404。它可能让搜索引擎把无效页面当正常页面处理,应检查应用是否错误地返回了200。这些判断只针对你实际请求到的响应,不代表所有搜索引擎或所有爬虫都会得到相同结果。不同搜索引擎对404、410和软404的处理方式可能不同,需要分别核查。
拿到证据后,决策不是“所有404都修”。可以按条件比较:
注意:robots.txt中的抓取限制不等于可靠的索引移除。即使robots.txt禁止抓取某个路径,该URL仍可能因外链等原因出现在搜索结果中。要移除索引,应结合状态码、页面上的noindex指令(在允许抓取的前提下)以及搜索引擎提供的移除工具分别处理。站点地图也不保证收录,它只是发现URL的辅助方式。
在项目改进中,可以固定一份检查清单,每次复查按同一顺序执行:
curl -I -L获取初始URL的完整响应链,保存到带日期的文件。X-Robots-Tag: noindex或缓存字段,判断是否与预期一致。这套做法的适用条件是:你能访问命令行或等效的HTTP检查工具,并且有权查看响应头。若只能通过浏览器操作,至少使用开发者工具的Network面板保留请求记录,并导出HAR文件,它比截图更接近可复查证据。
下一步,选一个你正在处理的404 URL,按上面的命令生成一份带时间戳的响应记录,再根据最终状态码决定是修复、跳转还是保留。这样得到的结论,别人可以用同一命令复现。