不能只靠navigator.useragent粗筛,因ios safari和chrome for android默认隐藏或伪造ua字符串,安卓定制系统可能删除“android”,微信ua含“micromessenger”却无“mobile”,仅查“iphone|android|windows phone”漏判率超30%。

直接在 index.html 里加设备检测脚本就能实现跳转,但必须避开常见执行时机错误和 UA 判断盲区——否则 PC 用户可能被误推到 m 站,或移动端白屏卡住。
为什么不能只靠 window.navigator.userAgent 粗筛
现代浏览器(尤其 iOS Safari 和 Chrome for Android)默认隐藏或伪造部分 UA 字符串;某些安卓定制系统会删掉 "Android" 关键字;微信内置浏览器 UA 里带 "MicroMessenger" 却不包含 "Mobile"。只检查 "iPhone"、"Android"、"Windows Phone" 三词,漏判率超 30%。
- 推荐组合判断:
/(iPhone|iPad|iPod|Android|Mobile)/i.test(navigator.userAgent)—— 加上iPad防 iPad 桌面模式误判,Mobile覆盖多数国产浏览器 - 补充兜底:若 UA 不匹配但
screen.width ,也视为移动设备(适用于 UA 被清空或极简内核环境) - 千万别用
navigator.platform,它在桌面版 Chrome 模拟移动端时仍返回"Win32"或"MacIntel"
DOMContentLoaded 之前执行跳转会出什么问题
把跳转脚本放在 末尾或 开头,看似“越早越好”,实则风险极高:页面 DOM 还没解析完,用户可能看到空白页闪一下再跳走,SEO 也抓不到首屏内容。更糟的是,某些 CDN 或安全插件会拦截未完成加载的 window.location.href 赋值。
- 正确做法:包裹在
document.addEventListener("DOMContentLoaded", () => { ... })内,确保 HTML 解析完成、资源加载可中断 - 如果必须更快(比如防止首屏渲染),改用
<meta http-equiv="refresh">,但它无法做条件判断,只能无差别跳转 - 绝对不要在
<script src="..."></script>外联脚本里直接写window.location.href = ...,加载阻塞时用户会长时间卡在白屏
跳转目标 URL 的路径写法陷阱
很多项目把 PC 站放根目录 https://example.com/,m 站放子域 https://m.example.com/,结果在 PC 端 index.html 里写 window.location.href = "m/index.html",导致跳转成 https://example.com/m/index.html —— 根本不是 m 子域。
- 跳转到子域必须写完整协议+域名:
window.location.href = "https://m.example.com/" - 若 m 站和 PC 站同域但不同路径(如
/mobile/),用根相对路径:window.location.href = "/mobile/" - 避免协议相对写法
"//m.example.com/",HTTP 页面里会降级为 HTTP,HTTPS 页面才走 HTTPS,混合协议容易触发安全警告 - 测试时务必清空浏览器缓存,否则 304 响应可能让旧跳转逻辑继续生效
如何让搜索引擎和用户都清楚这是“双端分离”而非“跳转作弊”
单纯 JS 跳转对 SEO 不友好:爬虫通常不执行 JS,也就看不到跳转逻辑,可能把 PC 站 index.html 当作唯一入口,忽略 m 站内容。必须配合服务端信号。
- PC 站
index.html的里加:<link rel="alternate" media="only screen and (max-width: 768px)" href="https://m.example.com/"> - m 站首页加反向声明:
<link rel="canonical" href="https://example.com/">,告诉爬虫 PC 站是主源 - 服务端(Nginx/Apache)最好同步配置 HTTP 响应头:
Link: <https:></https:>; rel="alternate"; media="only screen and (max-width: 768px)",比 HTML 标签更早触达爬虫 - 别依赖
robots.txt屏蔽 m 站——这等于主动放弃移动端 SEO 流量
最易被忽略的一点:跳转脚本必须放在所有第三方统计、埋点代码之后。否则用户还没进入 m 站,PC 站的 GA 或神策就已上报一次「跳出」,数据完全失真。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











