html文件本身不能发出301状态码,必须由服务器在响应头中返回301及location字段才能实现真正的永久重定向,meta刷新或js跳转仅返回200,不传递seo权重且被搜索引擎视为临时跳转。

为什么 HTML 里的跳转不是 301
常见误区是这样写:
或用 JS:
location.href = "https://new.example.com";这些方式的问题很明确:
- 服务器返回的仍是 200 状态码,不是 301
- 搜索引擎不识别为永久迁移,不继承排名和外链权重
- 用户可能看到地址栏闪一下旧 URL,后退按钮行为异常
- 爬虫可能跳过或延迟抓取,尤其对 JS 渲染依赖强的页面
真正生效的 301 必须由服务器配置
取决于你用的环境,选对应方法:
-
Apache(含宝塔默认 Apache):编辑网站根目录下的 .htaccess,加一行:
Redirect 301 /old-page.html https://new.example.com/new-page.html -
Nginx(含宝塔 Nginx):进站点配置,在 server 块里加:
return 301 https://new.example.com$request_uri;(整站)或指定路径 -
PHP 脚本开头(适合单页控制):
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://new.example.com");
exit;(注意:前面不能有任何输出,包括空格、BOM)
配置后务必验证是否真返回 301
别只看浏览器跳转成功就认为 OK。用命令行验证最可靠:
返回中必须包含:
HTTP/2 301Location: https://new.example.com/new-page.html
如果看到 200 或 302,说明配置没生效或被其他规则覆盖。
哪些场景适合用 301 传权重
只在永久性变更时使用,比如:
- 域名更换(old.com → new.com)
- 全站 HTTPS 强制跳转(http → https)
- 统一 www 和非 www 版本(选一个为主)
- 栏目改版导致 URL 路径变化(/blog/ → /articles/)
- 动态参数 URL 改为静态友好 URL(/page?id=5 → /page/5)
临时维护、A/B 测试等请用 302,避免误伤 SEO。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











