Node.js 重定向链检测工具:301 跳了几跳、有没有成环,一次看清
做 SEO,重定向是绕不开的。换域名、改 URL 结构、下架产品,都要靠 301 把老地址指到新地址。但重定向一旦写岔,会出两种麻烦:一种是链条过长,A 跳到 B、B 跳到 C,用户和爬虫跟着绕好几圈,页面加载变慢、权重被层层稀释;另一种更严重,是成环,A 跳 B、B 又跳回 A,浏览器直接报错,谷歌爬虫也放弃抓取。这篇写一个 Node.js 工具,输入一个 URL,把整条重定向链、跳数、是否成环、最终落点一次查清。
谷歌对重定向的官方说明看这里:重定向与谷歌搜索。
工具能检查什么
- 跟随重定向,记录每一跳的来源、状态码、目标
- 统计总共跳了几次
- 检测是否成环(A 又跳回已经出现过的地址)
- 输出最终落点和最终状态码
用 Node.js 原生 fetch,redirect 设为 manual 才能拿到 301/302 本身,不装任何依赖。
完整代码
javascript
// redirect-check.js
// 用途:检查 URL 的重定向链(跳数、成环、最终落点)
// 运行:node redirect-check.js https://example.com/old-page
// 依赖:无(Node 18+ 自带 fetch)
const MAX_HOPS = 10; // 最多检测 10 跳
async function main() {
const start = process.argv[2] || 'https://example.com/old-page';
let current = start;
const chain = [];
const visited = new Set([start]);
for (let hop = 0; hop < MAX_HOPS; hop++) {
let res;
try {
res = await fetch(current, {
method: 'GET',
redirect: 'manual',
headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0 Safari/537.36' },
});
} catch (e) {
chain.push({ from: current, status: '请求失败', to: null });
break;
}
if (res.status >= 300 && res.status < 400) {
const next = res.headers.get('location');
chain.push({ from: current, status: res.status, to: next });
if (!next) {
console.log('重定向但缺少 Location 头,链条中断');
break;
}
const absolute = new URL(next, current).href;
if (visited.has(absolute)) {
chain.push({ from: current, status: '成环', to: absolute });
console.log('检测到重定向环:' + absolute);
break;
}
visited.add(absolute);
current = absolute;
continue;
}
chain.push({ from: current, status: res.status, to: null });
break;
}
console.log('===== 重定向链 =====');
chain.forEach((c, i) => {
if (c.to) console.log(`第${i + 1}跳 ${c.from}\n ${c.status} -> ${c.to}`);
else console.log(`第${i + 1}跳 ${c.from}\n ${c.status}(终点)`);
});
console.log(`\n共 ${chain.length} 跳`);
if (chain.length >= MAX_HOPS) console.log('提示:达到最大检测跳数,可能仍有后续重定向');
console.log('===== 结束 =====');
}
main();
怎么用
bash
node redirect-check.js https://你的域名/旧页面
把地址换成你要检查的 URL,运行。它会打印出每一跳从哪到哪、状态码是什么、最终落在哪个地址。
三个最常见的重定向问题
重定向链过长。 一个页面 301 到另一个,另一个又 301 到第三个,跳了三五跳才到真页面。每一次跳转都消耗加载时间和爬虫抓取预算,还摊薄权重。理想做法是一步到位,老地址直接 301 到最终目标。
重定向成环。 A 跳 B、B 跳回 A,或者三四个页面互相跳。浏览器报"重定向次数过多",谷歌直接放弃这个 URL。这种环往往是多次改版叠加出来的,工具会直接标出来。
重定向到 404。 301 指向的目标页面本身已经不存在了,等于把用户和爬虫导向一个死胡同。这种"断头重定向"比普通死链更隐蔽,检查时要看最终落点的状态码是不是 200。
写在最后
重定向是站点改版里最容易埋雷的地方,而且问题往往要等排名掉了才暴露。用这个工具把关键的老 URL 都过一遍,链长、成环、断头一次揪出来。
延伸阅读:谷歌 SEO 系统实操。👈直接点击跳转
觉得有用欢迎点赞、收藏、转发,有疑问评论区留言或私信交流。