SEO 百科
JavaScript 重定向
本页目录
JavaScript 重定向
JavaScript 重定向 指一类跳转,做法是在脚本里把浏览器送到另一个网址,常见写法是 window.location.href = "…"[2]。服务器对原网址返回 200,跳转要等浏览器执行这段脚本才发生,因此它属于客户端跳转[5]。做 SEO 的人关心它,是因为抓取工具未必会执行脚本,引擎可能一直看不到这一跳。
与服务器端跳转的分工
脚本重定向写在页面的脚本块里,服务器对原网址的响应仍是 200 和一份正常页面[5]。跳转发生在浏览器这一侧,而且要等页面开始解析脚本之后才生效。
它也无法附带状态码。301 与 302 的语义写在响应头里,脚本只能改浏览器地址栏的指向,不能声明这次移动是永久还是临时[4]。引擎由此少了一个判断依据。
引擎的渲染与执行
Google 会渲染页面并执行 JavaScript,因此有机会读到脚本里的那一跳[2]。渲染指抓取工具把页面取回后解析 HTML、执行其中脚本,把它们生成的内容也读出来。文档同时提醒,渲染可能因各种原因失败,一旦没有完成,这一跳就始终看不到[2]。也正因为这层不确定,文档给出的建议是,只有在无法使用服务器端重定向或元刷新重定向时,才动用脚本跳转[2]。
Yandex 的处理更保守。文档说明,机器人不会执行脚本生成的内容,需要被收录的内容应当在服务器返回 HTML 时就已存在[1]。脚本写就的跳转落在这一类里,机器人多半读不到。
百度把脚本跳转列为一种抓取异常。抓取诊断手册写到,页面加载了百度无法识别的脚本跳转代码,用户从搜索结果进来后页面发生跳转,这类情况会被记为异常[3]。要用它自查,可以取回某个地址,把蜘蛛看到的返回码与源码同自己的预期对照[3]。
该用与不该用的情况
适合使用脚本跳转的场合很少,主要是服务器配置和 <head> 都改不了,又必须先完成一次跳转[2]。
不该使用的场合:
- 换域名、改目录结构这类搬迁。这类改动要完成地址替换,脚本跳转没有状态码,也缺少信号,达不到目的[2]。
- 要让 Yandex 或百度收录这个页面。这两家执行脚本的能力有限,跳转可能读不到[1]。
- 把它当成屏蔽手段。要阻止收录得用
noindex,跳转做不到。
写法示例
Google 文档给出的写法,是在 <head> 的脚本块里设置 location 属性[2]。
<!doctype html>
<html>
<head>
<script>
window.location.href = "https://www.example.com/new-page";
</script>
</head>
</html>
需要保留浏览器返回记录时,改用 location.replace 替换当前记录,访问者按返回键不会退回旧页。这段脚本放在 <head> 里,让它尽早执行。
常见误用
第一种是拿脚本跳转做永久迁移。它没有状态码,引擎拿不到永久或临时的语义,旧网址容易长期留在结果里[2]。
第二种是认定渲染一定成功。渲染失败时这一跳对引擎完全不存在,页面会按原始内容被收录[2]。
第三种是给面向 Yandex 或百度的页面挂上脚本跳转。这两家执行脚本的能力弱,跳转多半读不到,百度还会把它记成抓取异常[1]。
第四种是把 <noscript> 当成补救手段。<noscript> 之间的内容只在脚本未执行时显示,它是给访问者的一条出路,不是跳转声明,引擎不会把它当成搬家信号。
附录
参见
参考资料
官方(境外)
- 《Changing your site's structure and design》,Yandex Webmaster。
- 《重定向和 Google 搜索》,Google 搜索中心,2026-04-20 更新。
官方(国内)
- 《平台工具使用手册(抓取诊断)》,百度搜索资源平台,2020-08-14 更新。
第三方
- 《SEO 重定向:一个简单(但完整)的指南》,Ahrefs,2022-03-02。
- 《Redirects: How To Use, SEO Impact & Types (301 vs 302)》,Moz,2025-03-24 更新。
外部链接
无。