检查链接是否失效
最多粘贴25个网址,每行一个。我们会逐个请求并报告状态:已失效、已跳转,还是正常。
| 网址 | 状态 | 正常 | 跳转至 |
|---|
链接为什么会失效
链接失效的原因往往很平常:网站因为不再续交主机费用而关闭;公司被收购后博客被一并撤掉; 内容管理系统迁移时把所有网址都改了名却没有做跳转;文章被加上付费墙,或被悄悄下架; 整个域名到期后被抢注者买走。规模比直觉中大得多:关于链接失效的研究一再发现, 十年前的链接里大约有四分之一甚至更多已经无法打开。任何用了几年以上的书签收藏里都有死链, 区别只在于有多少。
检测器的工作原理
请求是从Marqly的服务器发出的,而不是从你的浏览器发出的。这不是设计上的偏好,而是得到真实结果的唯一办法。 浏览器强制执行CORS:本页面的脚本不允许读取其他域名的响应状态,所以纯前端的检测器会把大部分正常的链接报告为失败。 因此你粘贴的网址会发送到Marqly在Cloudflare基础设施上的自有服务器,由它逐个请求并返回状态。 对每一个网址,服务器会:
- 先发送HEAD请求,只取响应头,不取网页正文,并使用声明的用户代理 (
MarqlyLinkChecker/1.0),表明检测器的身份并链接回本页面; - 如果服务器拒绝HEAD(状态码405或501),就改用GET重试,因为有些网站根本没有实现HEAD;
- 逐跳跟随重定向,最多八次,所以“跳转至”一列显示的是最终目的地,而不是第一跳;
- 对一直不响应的链接,约六秒后放弃,并报告为无法连接,而不是让整批检测卡住;
- 让同一批中的所有网址并行运行,这就是25个链接通常几秒内就能返回的原因。
只接受普通的公开网址:标准端口上的http或https,不带内嵌凭据,也绝不接受私有或内部主机。 这样可以避免这个免费工具被用来访问它不该碰的机器;这也意味着内网链接无法在这里检查,这是有意为之。
使用方法
- 收集网址:可以来自文档,也可以来自你的书签,把书签导出后,用书签文件查看器把其中的链接提取成可搜索的清单。
- 把它们粘贴到上方,每行一个,每次最多25个。
- 点击检查链接,等待结果表格出现。
- 逐行查看:判定结果(正常、已失效、已跳转,或“需要人工核实”)、服务器是否成功响应的✓/✗, 以及链接发生跳转时的最终网址。
- 然后处理:删除或替换404/410的链接,在自己的浏览器里核实那些模棱两可的,并查看跳转现在落在哪里。 最终落在网站首页的链接,通常已经丢了原文章,尽管表面上没有“失败”。
如何解读结果
- 200系列:正常。✓表示服务器成功响应。
- 重定向:页面已搬家,“跳转至”一列显示它最终落在哪里。通常无害(http跳到https,或www的变化), 但如果跳转到首页,往往意味着文章本身已经不在了。
- 404 / 410:确实已死。服务器还活着,并明确说这个页面不存在。
- 403、429、999:不确定。很多网站拒绝自动检测程序,却会正常服务真人。删除任何内容之前,请先在浏览器里核实。
- 无法连接:完全没有HTTP响应:域名失效、服务器宕机或超时。几乎总是真的消失了。
HTTP状态码对照表
结果表格里的判定依据的就是下面这套对应关系,你可以在任何浏览器的开发者工具里自行核对同样的逻辑:
| 状态码 | 含义 | 这里的判定 | 该怎么做 |
|---|---|---|---|
| 200–299 | 成功:服务器返回了内容。 | 正常 ✓ | 无需处理。 |
| 301 / 302 / 307 / 308 | 重定向:页面现在由另一个地址提供。 | 已跳转 | 确认最终网址是文章而不是首页,并把你的链接更新为目的地。 |
| 401 | 需要登录。 | 需要人工核实 | 如果你有权限,多半没问题;这不是链接失效。 |
| 403 | 禁止访问:这次请求被拒绝。 | 需要人工核实 | 通常是针对检测器的机器人防护,请在浏览器里打开确认。 |
| 404 | 未找到:服务器还在,但这个页面不在了。 | 已失效 | 删除,或找一个替代链接。 |
| 410 | 已移除:页面被有意删除。 | 已失效 | 删除。 |
| 429 | 请求过多:目标网站对我们限流了。 | 请重试 | 让该网站歇一歇,稍后再重新检查这一批。 |
| 500 / 502 / 503 / 504 | 服务器端错误:对方那边出了问题。 | 请重试 | 是宕机,不是消亡。改天再检查一次。 |
| 999 | LinkedIn对自动化客户端的“别再问了”状态码。 | 需要人工核实 | 几乎不会真的失效,请在浏览器里打开确认。 |
| 无法连接 | 完全没有HTTP响应:DNS无法解析、连接被拒绝,或约6秒的超时已到。 | 已失效(请核实) | 再运行一次;连续两次失败的域名就是消失了。 |
什么时候该做一次链接排查
- 重新发布或再利用旧内容之前:一份把五年前的文章重发出去、引用却全是死链的通讯,比它承载的新闻本身更让人难堪。
- 任何内容管理系统迁移之后,无论是你自己的还是别人的:书签和笔记里的网址,现在可能指向一个把所有页面都改了名的网站。
- 整理书签文件夹时:先删掉确认已死的,文件缩小得最快,同步的垃圾也最少。
- 核对研究资料或阅读清单中的参考文献时:在以它为基础之前,先知道某条引用是404很有价值。
- 迁移整个收藏库之前:参见浏览器书签迁移指南;用重复书签查找器做一次去重,再用本工具做一次死链排查,是两个成本最低的收获。
隐私:发送了什么,保存了什么
发送的内容:你粘贴的网址,从你的浏览器发到Marqly的服务器,再从服务器带着检测器的用户代理发往各个目标网站。 你的设备或会话中的其他任何信息都不会随之发送。保存的内容:没有任何能识别你身份的数据。没有账号,没有历史记录, 也不会保存任何一批网址;响应会标记为不缓存,唯一保留的计数器是用来阻止脚本疯狂调用工具的边缘频率限制。 由此带来两个实际后果:你检查的网站会看到来自Cloudflare基础设施的请求,所以不要粘贴那些访问权限本身就敏感的网址; 私有或内部地址在这里完全无法检查,因为它们在发出任何请求之前就会被拒绝。
坦率说明局限
本工具每次最多检查25个网址,粘贴更多的话,多出的部分会被跳过并计数,而不是悄悄忽略。 设置这个上限,是因为每个网址都是我们服务器发出的一次真实请求:不设上限的批量检测,恰恰会招来那种会让工具对所有人都变慢的脚本滥用。 没有账号,也没有每日额度,所以更长的清单只是多分几批而已。它报告的是服务器在此刻所说的话, 而这并不总是内容的真相:一个页面可以返回200,而正文已被域名停放广告替换(“软404”仅凭状态码是检测不出来的)。 要审查整份书签导出文件,请先用书签文件查看器把网址提取出来,再分批送进来检查。
- 慢的网站看起来像死了。约6秒的超时意味着一个很卡但还活着的页面可能返回“无法连接”,先重试再下结论。
- 机器人防护墙看起来像死了。403或999是网站在拒绝机器人,而不是拒绝页面本身;请手动核实。
- 由JavaScript渲染的页面会在渲染之前就响应。检测器看到的是HTTP响应,而不是你的浏览器最终画出来的内容。
- 今天活着的链接明天可能就死了。状态只是此刻的快照;收藏库值得每隔几个月重新检查一次。
- 逼得太紧会被暂停。如果你连续快速提交一批又一批,按IP计的频率限制会回应“请求过多”,等一分钟再继续即可。
治本之道:让书签不再腐烂
链接检测器能告诉你页面已经消失,却无法告诉你页面写了什么。这就是要保存的不只是网址的理由: Marqly会为你的收藏附上AI摘要,所以收藏库里的一个死链依然带着内容的要点,而且语义搜索依然能按含义找到它。
传统的书签工具只存原始网址和标题(我们与它们的对比,见Marqly与Raindrop的对比)。有了Marqly浏览器扩展,页面在保存的那一刻就会被摘要、AI打标签并建立索引, 链接失效就不会再抹掉你的知识。无论如何,你的数据始终属于你自己,参见我可以导出我的数据吗。
相关工具与指南
- 审查之前先清理重复保存的链接:重复的链接会让这一批白白多出一倍的工作量。
- 把书签导出文件打开成可搜索的表格,以提取需要检查的网址。
- 要更换浏览器?迁移指南完整覆盖了导出、整理和导入的全过程。
- 保留摘要的稍后阅读方案,是应对链接失效的结构性答案。
- 如何整理书签,让一个死链只损失一条记录,而不是一整个文件夹的信任。
- Marqly的免费方案:开始使用,并在接下来保存的十个链接上附上摘要。
常见问题解答
为什么每次最多只能检查25个网址?
每个网址都意味着从我们的服务器发出一次真实请求,不设上限的批量检测容易被滥用,并拖慢所有人的使用速度。25个是为了保证结果够快,一批通常几秒钟就能完成。如果清单更长,请分批运行;超出25个的网址会被跳过并明确提示,不会被悄悄丢掉。
“无法连接”是什么意思?
请求根本没有收到任何HTTP响应:域名已无法解析、服务器宕机或超时,或者拒绝了连接。这是最彻底的“死”,毕竟404至少能证明服务器还活着。偶尔也会有网站直接屏蔽我们的检测器,同样显示为无法连接,所以遇到意外的结果,请在自己的浏览器里再核实一下。
状态码403或999就说明链接已经失效了吗?
不一定。有些网站对自动检测程序返回403(或LinkedIn著名的999),却会正常向浏览器里的真人展示页面,这是机器人防护,不是链接失效。404和410可以认定为确实已死,“无法连接”几乎可以认定已死,而403这类拒绝则属于“请人工核实”。
为什么检测在你们的服务器上进行,而不是在我的浏览器里?
浏览器强制执行CORS:本页面的JavaScript不允许读取其他域名的响应状态,所以纯前端的检测器大多会给出错误的失败结果。由我们的服务器发出请求,才能返回每个网址的真实状态。发送出去的只有你提交的网址,不会有其他任何内容。
检测器会下载整个网页吗?
不会。每个网址先发送HEAD请求,只取响应头,不取网页正文;只有当服务器拒绝HEAD(状态码405或501)时,才会改用GET重试。重定向会逐跳跟随,最多八次,结果中会显示最终目的地。大约六秒内没有响应的链接会被报告为无法连接。
可以检查超过25个网址,或者更频繁地使用吗?
可以,分批进行即可。没有账号,也没有每日额度:唯一的限制是每次25个网址(第25行之后的内容会被跳过并计数,不会被悄悄丢掉),以及按IP计的频率限制,用来防止脚本滥用拖慢所有人的使用。如果看到“请求过多”的提示,等一分钟再运行下一批。





