链接与错误
如何修复网站上的失效链接(并防止新的死链出现)
失效链接从何而来、如何找到它们、如何在更新、重定向和移除之间做选择,以及如何防止它们卷土重来。
本页内容
失效链接(也叫死链)是指向不了任何有用内容的链接:目标页面已被删除或移走,服务器返回错误,或者域名已不复存在。对访客来说,这是一条死胡同。对搜索引擎的抓取工具来说,这是一条走到一半就断掉的路,路后面的页面也就更难被发现。
失效链接很少是一次性的重大故障。它们是随着页面改名、产品下架、别的网站调整结构而一点点累积起来的。本指南将介绍如何找到它们、如何决定每一个该怎么处理,以及如何防止新的失效链接出现。
哪些情况算失效链接
- 404 Not Found 或 410 Gone:该地址上不存在这个页面。这是最常见的情况。
- 5xx 服务器错误:页面存在,但服务器无法把它送达,可能是长期如此,也可能时好时坏。
- 完全没有响应:域名已过期、DNS 解析失败,或请求超时。
- 软 404:页面上写着“未找到”,但服务器返回的是
200 OK,于是工具和搜索引擎可能把它当成一个真实的页面。 - 占位链接:在看起来像是页面链接的元素上使用
href="#"或javascript:void(0)。技术上什么都没坏,但访客哪儿也去不了。 - 失效资源:返回 404 的图片、脚本或样式表。它们不是链接,但成因相同,对页面的破坏同样一目了然。
链接为什么会失效
- 页面被删除,或者网址别名(slug)被修改,却没有人添加重定向。
- 改版或 CMS 迁移改变了网址结构,比如给每篇文章加上
/blog/,或去掉了.html。 - 有人手动输入链接时打错了。
- 像
../pricing这样的相对链接,在所在页面移动之后不再有效。 - 指向预发布环境或本地开发地址(如
staging.example.com)的链接混进了已发布的内容。 - 外部网站删除或移走了你链接的页面。这种“链接腐烂”不在你的掌控之中,所以需要定期检查。
如何找到失效链接
没有哪一个来源能呈现全貌,所以要把几种方法结合起来:
- 用链接检测工具检查关键页面。Rudra 的免费死链检测工具会在真实浏览器中打开页面,收集指向同一网站其他页面的链接,并请求其中最多 12 个(优先请求导航链接),标出所有返回错误状态或没有响应的链接。它还会测试前 5 个指向其他网站的链接,报告你自己网站上加载失败的脚本、图片和字体,并列出页面上的 JavaScript 错误和控制台错误。
- 抓取整个网站。单页检查发现不了要点三次才能到达的失效链接。Rudra 的整站抓取(可以从演示页面开始)会沿着内部链接遍历它抓取的页面,记录每个链接目标的状态码,并报告全站范围内失效的内部链接,以及
#占位链接。免费版每次扫描最多抓取 10 个页面。 - 查看 Google Search Console。网页索引编制报告会列出 Google 尝试抓取但返回“未找到 (404)”的网址。其中一些来自其他网站上的链接,这是抓取你自己的网站时看不到的。
- 查看统计分析数据或服务器日志。404 页面的浏览记录加上来源页面,能告诉你真实访客实际点到了哪些失效链接。
如何一步步修复失效链接
先把失效链接按目标网址分组。一个被删除的页面往往对应着几十条失效链接,一次性解决目标网址比逐条修改链接要快。然后为每个目标从以下四种修复方式中选择一种。
1. 更新链接
如果内容还在,只是换了地址,而包含该链接的页面又归你管,那就直接把链接改为指向新网址。这是处理内部链接的最佳方式。对于站内链接,不要依赖重定向:每次重定向都会多一次往返,而直接指向最终网址的链接对抓取工具来说也更清晰。
2. 添加永久重定向
如果旧网址还有来自其他网站、收藏夹或搜索结果的链接,就把它永久重定向到内容最接近的对应页面。有以下几种做法:
- Apache(
.htaccess或虚拟主机配置):Redirect 301 /old-pricing /pricing - nginx:
location = /old-pricing { return 301 /pricing; } - Next.js(
next.config.js):async redirects() { return [{ source: '/old-pricing', destination: '/pricing', permanent: true }]; }。设置permanent: true后,Next.js 会发送 308,它同样表示永久重定向,并且会保留请求方法。 - Netlify 风格的重定向文件(
_redirects):/old-pricing /pricing 301 - WordPress:如果无法修改服务器配置,可以使用重定向插件,或主机商提供的重定向设置。
要重定向到真正能替代旧页面的页面。把所有失效网址都导向首页只会让访客摸不着头脑,而且 Google 很可能照样把这种不相关的重定向当作软 404 处理。
3. 替换或移除链接
对于已经失效的外部链接,先在对方网站上搜一下该页面的新位置。如果确实没有了,就改为链接到另一个讲同一要点的可靠来源,或者删掉链接并调整句子,让它读起来依然通顺。Internet Archive 的 Wayback Machine 可以让你看到原页面的内容,有助于找到替代来源。
4. 有意让它返回 404 或 410
如果内容已经彻底删除,又没有任何替代内容,那么 404(或表示“已永久移除”的 410)就是正确的响应。把你自己指向它的链接删掉,并确保 404 页面能帮访客继续浏览:放一个搜索框,再加上通往各主要版块的链接,效果就很好。
然后做些收尾工作
- 用同样的方法修复失效资源:更正图片、脚本或样式表的路径,或者删除引用。
- 缩短重定向链。如果
/a重定向到/b,后者又重定向到/c,就让/a和你的链接都直接指向/c。Rudra 的 SEO 检测工具会在你测试的网址存在过长的重定向链时给出提示。 - 复查。再运行一次检测工具确认修复生效;做完较大规模的清理后,再重新抓取一次。
确保不存在的页面真的返回 404
如果服务器在显示友好的“页面未找到”提示的同时返回的是 200 OK,那还不够。可以在浏览器的开发者工具中查看状态码(打开 Network 面板后刷新页面),或者在终端中运行 curl -I https://example.com/this-page-does-not-exist。如果显示 200,就要在服务器或框架中修正;例如在 Next.js 的 App Router 中,调用 notFound() 就会以 404 状态渲染 not-found 页面。
如何防止新的失效链接出现
- 修改网址之前先规划好重定向。在改版或迁移期间,用一张表格把每个旧网址对应到新网址,并在上线时让重定向同步生效。
- 不要为了好看而修改网址别名。一个能用的网址,比一个稍微整洁一点的网址更有价值。
- 使用 CMS 自带的内部链接选择器,而不是粘贴网址,这样页面移动时链接会自动更新。
- 保持网址风格统一:使用小写,结尾斜杠的写法只用一种,并通过重定向强制执行。
- 定期检查。大多数网站每月一次即可,此外每次发布或内容迁移之后也要检查。
常见错误
- 把所有失效网址都重定向到首页。
- 明明是永久迁移,却用了临时的 302 重定向。
- 任由内部链接指向重定向,而不是最终网址。
- 删除了有其他网站链接的页面,却没有做重定向。
- 去“修复”那些仅仅因为对方网站拦截自动检测工具才被标记的外部链接。
- 因为
#占位链接不会显示为错误,就对它们视而不见。
检查整个网站的失效链接
输入你的网址,Rudra 就会抓取你的页面,在报告 SEO、性能和无障碍问题的同时,列出失效的内部链接。
常见问题
失效链接会影响 SEO 吗?
Google 表示,404 错误是网络中的正常现象,它本身不会损害网站其余部分的排名。真正的代价是访客的不满、走进死胡同的抓取路径,以及其他网站指向已删除页面的链接所白白损失的价值。请修复失效的内部链接,并为有外部链接的已删除页面设置重定向。
404 和 410 有什么区别?
404 表示页面未找到;410 表示页面已被有意移除,并且不会再恢复。两者都会让搜索引擎逐渐把该网址从索引中移除。用你的平台上更容易实现的那个就行;关键是不要对不存在的页面返回 200。
每个失效网址都要做重定向吗?
不用。只重定向那些有真正替代页面且仍有一定价值的网址,比如有其他网站的链接、被人收藏或有搜索流量。其余的就让它们返回 404,并删掉你自己指向它们的链接。
应该多久检查一次失效链接?
对大多数网站来说,每月一次是不错的默认频率,此外在改版、迁移或大规模内容变更之后也要检查。外链很多的网站(比如资源导航站)适合更频繁地检查,因为外部页面会毫无征兆地消失。
Rudra 的死链检测工具会检查外部链接吗?
会检查一小部分。单页检查最多测试 12 个指向你自己页面的链接,以及前 5 个指向其他网站的链接。由于许多网站拒绝自动化访问,其他网站返回的 403 或 429 等响应会被视为无法确定,失效的外部链接也仅作为参考信息报告。整站抓取会检查所抓取页面之间的内部链接。在修改任何被标记的链接之前,请先在浏览器中核实。