<p>HTML跳转不传递SEO权重,因其返回200状态码而非301/302,内容为空或仅含脚本,被搜索引擎判为软404,标记为“Crawled - currently not indexed”,导致外链价值与排名信号中断。</p>

为什么跳转不传递SEO权重
它返回的是200 OK,不是301或302;搜索引擎爬虫看到的是“页面加载成功”,但内容为空或只有一行跳转脚本,直接判定为软404。Google Search Console 会标记为“Crawled - currently not indexed”,旧链接的外链价值、排名信号全部中断。
常见错误写法:<meta http-equiv="refresh" content="0;url=https://new.com/">,哪怕content="0"也无效——状态码没变,Location头缺失,语义完全丢失。
- 移动端多一次渲染,Core Web Vitals 中的 LCP 和 CLS 明显变差
- CDN 缓存了这个 200 页面,后续请求永远无法触发真实重定向逻辑
- 部分爬虫(如 Bingbot)对 meta refresh 支持极弱,可能直接放弃抓取
301重定向必须由服务器端配置生效
只有服务器在响应第一行输出HTTP/1.1 301 Moved Permanently,并附带合法Location头,搜索引擎才认为这是“永久迁移”。任何前端跳转、JS 或 PHP echo 输出都晚于响应头发送时机,无效。
关键实操点:
立即学习“前端免费学习笔记(深入)”;
- Nginx 配置中必须用
return 301,别写成rewrite ... redirect(后者默认是 302) - Apache 的
.htaccess中,Redirect 301比RewriteRule ... [R=301]更可靠,后者易受其他规则干扰 - PHP 中必须在任何输出(包括空格、BOM)前调用
header(),否则报Cannot modify header information - Node.js(Express)用
res.redirect(301, url),别用res.status(301).send(...)—— 后者没 Location 头
302被误用是权重丢失最隐蔽的原因
很多开发者上线时先配 302“试试看”,结果忘了切回 301。搜索引擎持续把旧 URL 当作主入口,新 URL 长期不进索引,流量卡在半路。
典型踩坑场景:
- HTTPS 强制跳转写成
return 302 https://$host$request_uri,应为301 - WordPress 插件(如 Redirection)默认勾选的是 302,需手动切换开关
- CDN(Cloudflare、Akamai)缓存了 302 响应,后续所有请求都走临时跳转,清缓存都救不回来
- 用
curl -I https://old.com检查时,只看是否跳转,不看返回的确实是HTTP/1.1 301还是302
链式重定向和目标页状态会吃掉5%~10%权重/跳
比如 A → B → C,每多一跳就损失一部分链接权重;更糟的是,如果 C 返回 404 或重定向循环,整个链路失效,旧页面权重彻底归零。
上线前必须验证的三件事:
- 源 URL 执行
curl -I,确认首行是HTTP/1.1 301且含Location头 - 目标 URL 能被
curl -I直接返回200,且无重定向、无 JS 跳转 - 目标页 HTML 中有
<link rel="canonical" href="当前URL">,避免被当成重复内容
最容易被忽略的,是上线后只测试“人能不能跳过去”,却没验证服务器到底“说了什么”。权重不是跳出来的,是靠那一行真实的 HTTP 状态码和 Location 头传过去的。



















