< BACK 410 与 404 状态代码对比:SEO 视角下的区别——它们对 Googlebot 传达的信息有何不同 — 线条艺术插图

410 vs 404 状态码与 SEO:每个代码向 Googlebot 传递的信息有何不同

Google 对待 404 和 410 的方式不同,当你大量停用网址时这种区别就很重要。简单来说:404 表示"缺失,稍后再试";410 表示"已删除,永远不会回来"。Googlebot 会在将 404 从索引中删除之前重新访问数周。410 则在数天内被删除。如果你正在进行迁移,面对数千个应该永久消失的网址,选择正确的代码可以节省数周的清理时间。

关键要点:Google 会将 404 网址在索引中保留数月,但会在数天内删除 410;对于永久删除的页面使用 410,存在替代页面时使用 301。Google keeps 404 URLs in the index for months but drops 410s in days; use 410 for pages removed for good and a 301 when a replacement exists.

每个代码的实际含义

404 Not Found 是当请求的网址处不存在资源时的默认响应。服务器在说"这个网址现在没有资源"。这暗示是宽泛的:也许这个网址以后会有资源,也许是打字错误,也许资源已移动但有人忘记设置重定向。404 范围很广。

410 Gone 是明确的停用代码。服务器在说"这个网址曾经有资源,已被永久删除,不要再询问"。这是关门的信号。Google 明确记录了这一点:410 被解释为比 404 更强烈的信号,用于从索引中删除网址。

Googlebot 对每个代码的处理方式

404 行为。Googlebot 遇到 404,将网址标记为缺失,但将其保留在爬取队列中。机器人按减速时间表重新访问该网址(24小时,然后 7 天,然后 30 天,然后 90 天)。如果网址最终再次返回 200,就会被恢复。这个循环会持续数月。在此期间,该网址会在 Search Console 的覆盖率报告中显示为"未找到 (404)"。

410行为。Googlebot遇到410状态码时,会将该URL标记为永久停用,在数天内从索引中移除。该URL会在Search Console中短暂显示为"因法律投诉而移除的页面"或"软404"(取决于Google的判断),然后消失。爬虫队列停止重新访问它。

功能差异在于索引污染的时间:数天对数月。

何时选择410而非404

  • 迁移清理:新网站中不再存在且没有语义等效项的URL。使用410。它们已经消失。
  • 已删除的博客文章:你故意停用的旧内容。如果你确信永久删除则用410;如果文章有任何可能以相同slug重新发布则用404。
  • 已停产的产品页面:你不再销售的SKU。如果产品永久停售则用410;如果产品可能重新上架则用404。
  • URL模式停用:例如停用/forum/*是因为论坛被关闭。对整个路径使用410。
  • 来自过去黑客攻击或CMS错误而被索引的垃圾URL。使用410。

何时404是正确的选择

  • 拼写错误和从未存在过的URL:404是惯例做法。使用410会是错误的,因为该URL从未有过内容。
  • 审查待重新发布的内容:如果该URL可能重新上线,404状态码为Google再次找到它敞开了大门。
  • 临时不可用的页面:404 在这里也不对,应该使用 503 并带上 Retry-After 标头。但如果没有,404 对于模糊的情况是更安全的默认值。

如何在常见平台上设置410

Vercel (vercel.json)

添加重写或状态码规则。最干净的做法是部署一个/410端点,并用statusCode 410将已下线的URL改写到它。注意vercel.json原生支持重定向,但不支持任意URL的状态码改写;做法是使用Next.js中间件,为退役列表中的任何URL返回new Response(null, { status: 410 })。Next.js middleware that returns new Response(null, { status: 410 }) for any URL in your retirement list.

Netlify (netlify.toml或_redirects)

使用 _redirects 语法:/retired-url 410! 末尾的感叹号是强制状态标志。或在 netlify.toml 中,使用 [[redirects]] 块并设置 status = 410。

Apache (.htaccess)

重定向 gone /retired-url,或使用带有 [G] 标志的 RewriteRule:RewriteRule ^retired-url$ - [G,L]。

Nginx

在位置块中返回 410,匹配 URL 模式。对于批量模式:location ~ ^/old-pattern/ { return 410; }。

为什么这在大规模上很重要

一个拥有 10,000 个已停用 URL 的网站,其中 50/50 分配在 404 和 410 之间,410 部分将在两周内从 Coverage 报告中消失,而 404 部分将在 Coverage 报告中漂移三到六个月。404 集合占用了应该用于索引你想要的 URL 的 Googlebot 爬虫预算。在更大的网站上,预算影响是可以衡量的:退休预算减少意味着新内容的预算增加。

迁移模式

任何迁移清理的三个步骤。第一步:从 Search Console、Ahrefs 和旧的 sitemap 中拉取每个 URL。第二步:将每个 URL 分类到四个桶中的一个:(a) 映射到新 URL → 301 重定向,(b) 重命名为新 slug → 301,(c) 永久停用 → 410,(d) 状态不明确 → 404。第三步:在与新内容相同的部署中,在 vercel.json 或 .htaccess 中发布重定向/410/404 规则,加上一个构建时 SEO linter,如果任何迁移前的 URL 在规则集中缺失,则构建失败。

值得了解:451 代码

451 Unavailable For Legal Reasons 用于你在法律上被要求删除的内容。这很少见且很具体,涉及 DMCA 撤销、GDPR 被遗忘权(当 URL 完全停用时)、法院命令。Google 对其的解读类似于 410(从索引中删除),但法律信号才是重点。仅在法律背景适用时使用。

总结

对于永久退休使用 410。对于真正缺失或不明确的内容使用 404。两周对比六个月的索引清理差异在每个超过几千个 URL 的迁移上都会显现。修复很简单,就是 vercel.json、netlify.toml 或 .htaccess 中的一条规则。在切换时做对,你可以避免事后清理,没有人为此预算。

相关阅读:301 vs 302 vs 307 vs 308 是针对未被停用但已移动的 URL 的相关决策。需要 410 的相同迁移清理也需要重定向代码决策;有关该框架,请参阅重定向策略文章。

常见问题

404 和 410 状态码有什么区别?

404 表示未找到:页面缺失,但服务器未说明是否会返回。410 表示已删除:页面被有意且永久移除。410 是对搜索引擎更强的信号,可更快地将网址从索引中删除。

删除的页面应该使用 404 还是 410?

当你已故意永久删除一个页面且没有替代品时,使用 410;当页面丢失但状态不确定或临时性时,使用 404。对于重命名或移动的页面,两者都不要用:应该用 301 重定向到新网址。

410 比 404 能更快地从 Google 中删除页面吗?

略有不同。Google 将 410 视为更清晰的永久删除信号,倾向于更快地删除这些网址,但两者最终都会被从索引中移除。实际差异很小;更重要的是当有替代页面时使用重定向,而不是这两个错误代码。

404 错误会伤害 SEO 吗?

在真正删除的页面上出现少量 404 是正常的且无害的。只有当重要页面意外返回 404,或者内部链接和站点地图指向它们并浪费爬虫预算时,才会造成伤害。修复应该存在的页面上的 404;其他的则保留。

< BACK