两个码的分工
404 Not Found 说的是「现在找不到」,不承诺资源是否会回来;410 Gone 说的是「曾经存在,现已永久删除」,明确要求客户端与搜索引擎不要再访问。两者都属于 4xx,但语义差别会直接改变搜索引擎的收录与移除策略。
搜索引擎为什么在意
搜索引擎对 404 的处理是「暂不确定」:会保留一段观察期,并在后续抓取中反复确认;对 410 则视为确定移除信号,会更快把 URL 从索引里清掉。批量下架、删稿用 410 更干脆,临时维护或灰度下线则应该留在 404。
基本信息
| 404 | 通用未找到;不承诺资源是否会回来 |
|---|---|
| 410 | 永久消失;给搜索引擎明确的移除信号 |
| 规范 | RFC 9110 §15.5.5(404)、§15.5.11(410) |
| 缓存 | 两者都可被缓存;需要长期保持结论时显式给出缓存策略 |
典型使用场景
- 商品永久下架、文章删稿:用 410 加速从索引移除
- 页面临时维护或灰度下线:用 404 保留恢复的可能
- 敏感资源隐藏存在性:统一回 404,避免暴露「存在但无权访问」
- 站点改版后批量清理垃圾页面:410 的移除效率最高
- URL 结构整体迁移:应返回 301 或 308 指向新地址,而不是 404 或 410
状态验证
状态验证
curl -s -o /dev/null -w '%{http_code}\n' https://example.com/removed-page # 只看状态码
curl -sI https://example.com/removed-page | head -5 # 顺带看缓存头
curl -s -o /dev/null -w '%{http_code} %{time_total}\n' https://example.com/old-a https://example.com/old-b # 批量核对选用建议
| 场景 | 推荐 | 理由 |
|---|---|---|
| 页面暂时下架 | 404 | 可能恢复,避免搜索引擎彻底除名 |
| 商品永久下架、文章删稿 | 410 | 加速从索引移除 |
| 敏感资源隐藏存在性 | 404 | 不暴露「存在但无权访问」 |
| 批量清理垃圾页面 | 410 | 大规模移除效率高 |
| 已有后继地址 | 301 / 308 | 有替代页时用重定向,别用 404 或 410 丢掉权重 |
软 404(HTTP 200 却在正文里写「内容不存在」)既污染收录,也让监控彻底失去信号:对外必须返回真实 4xx。
410 是「不可逆」信号:搜索引擎会逐步减少甚至停止抓取。删除前先把统计与日志留存做完,否则历史访问数据再也补不回来。