Nuxt 3 个人站死链排查:我用 Node.js 写了一个内链巡检脚本
收录页出现 404 和无效跳转后,我用一个 Node.js 脚本爬取站内页面、提取链接、校验状态码,并生成可执行的修复清单。

作者
ZHOUYI
前阵子在搜索后台看到几篇老文被收录,点进去却是 404;还有些旧栏目跳转到了已删除的页面。个人站文章不算多,但正文、标签页和归档页之间互相引用后,内链很容易越积越乱。靠手点排查太慢,我干脆写了一个 Node.js 脚本,把站内链接统一扫一遍,再输出修复清单。
先界定巡检范围
脚本第一步是确定入口:从首页、文章列表页、标签页和收录页开始爬。为了避免越爬越远,我只处理同域名链接,把带 hash、带查询参数的地址做归一化,并跳过 mailto、外链和图片资源。这样一次巡检就能覆盖主要内容页,不会被评论、外部推荐链接带偏。
提取链接并校验状态码
- 请求页面,拿到 HTML 后提取 a 标签的 href。
- 把相对路径拼成完整 URL,并去除重复地址。
- 对每个 URL 发起请求,记录 200、301、404、500 和超时。
- 把异常链接按来源页分组,生成 CSV 或 Markdown 清单。
async function check(url) {
try {
const res = await fetch(url, { redirect: 'manual' });
return { url, status: res.status };
} catch (err) {
return { url, status: 'ERR', msg: err.message };
}
}脚本里我没有追求很高的并发,而是限制同时请求数量,避免把个人站的小服务器打满。对失败请求会重试一次,仍然失败才写入异常清单。输出时除了目标链接,还会带上来源页,方便直接定位是哪篇文章、哪个导航或哪个正文块出了问题。
常见坑与修复策略
最常见的不是 404,而是无效跳转:旧分类页 301 到首页,看起来能打开,但用户和搜索引擎都拿不到准确信号。还有一类是 Nuxt 动态路由在本地能访问,静态输出或部署后路径不存在。我的处理原则是:内容迁移要保留旧路径映射,确实没有对应页就返回 404,不要无脑跳首页。
- 301 链:检查目标是否还存在,避免链到首页或错误页。
- 404 链:找到来源页,改成相关文章、分类或归档入口。
- 重复链:合并带斜杠、带查询参数造成的重复地址。
“这类巡检不需要一开始就做得很复杂,关键是能持续跑。每次大改栏目、迁移文章或调整路由后扫一遍,比等流量掉下来再排查省心很多。”