410-vs-404-status-codes-for-seo.html
< BACK

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

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

每个代码的实际含义

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 })。

Netlify (netlify.toml或_redirects)

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

Apache (.htaccess)

Redirect 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 的相同迁移清理也需要重定向代码决策;有关该框架,请参阅重定向策略文章。

< BACK