linkchecker 默认将本地html中的相对路径当作远程url发起http请求,导致file://协议失败、外部资源误报404;需用--ignore-url="^file://"、--check-extern=0等参数限制检测范围,聚焦内部链接连通性。

LinkChecker 能直接处理本地 index.html 文件,但默认行为会尝试解析相对路径为绝对 URL,若未指定 base URL 或忽略外部链接,容易误报或卡在 404。
为什么 linkchecker ./index.html 会报一堆 404?
LinkChecker 默认把所有 href 和 src 当作需发起 HTTP 请求的远程地址处理。比如 href="about.html" 在本地运行时,它会尝试请求 file:///about.html(失败)或跳过 base 标签后拼出错误路径。
- 没设
--ignore-url="^file://"时,file://协议请求常被拒绝或超时 - 没加
--check-extern=0,它仍会去验证 CDN 图片、Google Fonts 等外部资源,导致大量非目标错误 - 没指定
--base-url="http://localhost",相对路径解析失败,./css/style.css可能变成http://localhost/css/style.css(但你本地没起服务)
检测本地 HTML 文件的最小可行命令
绕过网络依赖、只查内部结构是否自洽,用这条命令:
linkchecker --ignore-url="^file://" --check-extern=0 --ignore-url="^mailto:" --ignore-url="^tel:" ./index.html
-
--ignore-url="^file://"屏蔽本地文件协议请求(避免 Permission denied) -
--check-extern=0关闭对外部域名的探测,专注内部链接连通性 -
--ignore-url多次使用可过滤不同协议,mailto:和tel:不需要 HTTP 验证 - 不加
--base-url时,LinkChecker 会以当前文件所在目录为根,正确解析./pages/faq.html
想生成 HTML 报告并保留相对路径检查结果?
加 --output=html 没问题,但必须配合 --ignore-url 过滤规则,否则报告里全是外部资源的 404,掩盖真正要修的内部断链。
- 输出到
report.html:添加--file=report.html - 想让报告中“Parent URL”显示相对路径而非
file:///绝对路径,用--url="file://./index.html"替代直接传文件路径 - 若页面含
<base href="/">,LinkChecker 默认不识别,需手动加--base-url="http://example.com"才能正确解析href="blog/"
和 broken-link-checker 对比时要注意什么?
两者都能扫本地 HTML,但行为逻辑不同:broken-link-checker(简称 blc)默认只做 HEAD 请求、不跟踪重定向;linkchecker 默认 GET + 跟重定向 + 解析 JS 生成的链接(需额外开关)。
-
blc ./index.html -ro更轻量,适合 CI 流程中快速过一遍 -
linkchecker的--ignore-url是正则匹配,blc的--filter是 glob 模式,写法习惯不同 -
linkchecker不支持直接校验data-src或srcset,除非启用--check-html插件;blc原生支持 WHATWG 标准属性
本地静态页死链排查,核心不是“跑通工具”,而是控制它的协议嗅探范围——关掉你不关心的,留下你要修的。否则报告里 90% 的错误都是你本就打算离线使用的资源。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











