百度手百转码是其移动搜索对未适配页面的自动重构,易致js失效、广告过滤等问题;必须用标准viewport标签(仅含width=device-width和initial-scale=1)才能禁用,其他参数如user-scalable=no会触发强制转码。

百度手百转码是什么,为什么需要控制它
百度搜索移动版(手百)会自动对未适配移动端的网页做“转码”处理,把页面重构成适合小屏阅读的样式。这听起来省事,但实际常导致 JS 失效、CSS 错乱、广告/统计代码被过滤、甚至关键交互丢失。如果你的页面已用响应式或单独做了移动端适配,就该明确告诉手百“别转了”。meta 标签是唯一被百度官方文档承认的干预方式。
必须设置的 viewport meta 才能触发手百不转码
手百只认一个硬性条件:页面必须声明标准的 viewport,且不能含 user-scalable=no 或 maximum-scale 为 1 的限制。否则即使写了其他禁止转码的 meta,它也直接忽略。
常见错误写法:<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> —— 这个 user-scalable=no 就会让手百认为“你不想让用户缩放”,进而判定页面体验不佳,强制转码。
正确写法只需两要素:
-
width=device-width(必须)
-
initial-scale=1.0(推荐,但不是强制)
其他参数如 minimum-scale、maximum-scale、user-scalable 全部删掉。
shenma-site-verification 和 format-detection 是辅助项,不是开关
有些文章说加 <meta name="shenma-site-verification" content="xxx"> 能禁用转码,这是误解。这个 meta 只用于神马搜索(UC 浏览器系)的站点验证,对百度手百无效。
另一个常被误用的是 <meta name="format-detection" content="telephone=no, email=no"> —— 它只影响 iOS Safari 自动识别电话号码和邮箱,跟百度转码完全无关。
真正起作用的只有:
- 标准
viewport(决定是否具备不转码资格)
- 页面本身响应式达标(手百会抽样检测 DOM 结构、字体大小、点击区域等,不达标仍可能 fallback 转码)
如何验证手百真的没转码
别信“看起来正常” —— 手百转码后仍可能保留大部分布局,但 JS 执行环境已被沙箱隔离。最可靠的验证方式:
- 在手机百度中打开页面,点击右上角「…」→「网页信息」→ 查看「来源」是否显示「原始网页」而非「百度转码」
- 在页面里加一行调试:
console.log(window.location.href),如果输出的是你的真实域名,说明没转码;如果变成 https://www.baidu.com/s?... 或 https://m.baidu.com/.../yourdomain.com,说明已被代理转码
- 检查 Network 面板:原始请求的
Referer 是 https://m.baidu.com,但响应头中不应出现 X-Baidu-Page-Type: transcode
注意:百度有缓存策略,改完 meta 后需等待数小时或用新链接测试,旧 URL 可能还在缓存中走转码通道。
手百转码逻辑藏在服务端策略里,前端能做的只有满足它的准入门槛——而那个门槛,其实就卡在一行看似普通的 viewport 上。很多人调了半天别的 meta,最后发现删掉 user-scalable=no 就立刻生效。
viewport meta 才能触发手百不转码
手百只认一个硬性条件:页面必须声明标准的 viewport,且不能含 user-scalable=no 或 maximum-scale 为 1 的限制。否则即使写了其他禁止转码的 meta,它也直接忽略。常见错误写法:
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> —— 这个 user-scalable=no 就会让手百认为“你不想让用户缩放”,进而判定页面体验不佳,强制转码。正确写法只需两要素:
-
width=device-width(必须) -
initial-scale=1.0(推荐,但不是强制)
minimum-scale、maximum-scale、user-scalable 全部删掉。
shenma-site-verification 和 format-detection 是辅助项,不是开关
有些文章说加 <meta name="shenma-site-verification" content="xxx"> 能禁用转码,这是误解。这个 meta 只用于神马搜索(UC 浏览器系)的站点验证,对百度手百无效。
另一个常被误用的是 <meta name="format-detection" content="telephone=no, email=no"> —— 它只影响 iOS Safari 自动识别电话号码和邮箱,跟百度转码完全无关。
真正起作用的只有:
- 标准
viewport(决定是否具备不转码资格)
- 页面本身响应式达标(手百会抽样检测 DOM 结构、字体大小、点击区域等,不达标仍可能 fallback 转码)
如何验证手百真的没转码
别信“看起来正常” —— 手百转码后仍可能保留大部分布局,但 JS 执行环境已被沙箱隔离。最可靠的验证方式:
- 在手机百度中打开页面,点击右上角「…」→「网页信息」→ 查看「来源」是否显示「原始网页」而非「百度转码」
- 在页面里加一行调试:
console.log(window.location.href),如果输出的是你的真实域名,说明没转码;如果变成 https://www.baidu.com/s?... 或 https://m.baidu.com/.../yourdomain.com,说明已被代理转码
- 检查 Network 面板:原始请求的
Referer 是 https://m.baidu.com,但响应头中不应出现 X-Baidu-Page-Type: transcode
注意:百度有缓存策略,改完 meta 后需等待数小时或用新链接测试,旧 URL 可能还在缓存中走转码通道。
手百转码逻辑藏在服务端策略里,前端能做的只有满足它的准入门槛——而那个门槛,其实就卡在一行看似普通的 viewport 上。很多人调了半天别的 meta,最后发现删掉 user-scalable=no 就立刻生效。
viewport(决定是否具备不转码资格)- 在手机百度中打开页面,点击右上角「…」→「网页信息」→ 查看「来源」是否显示「原始网页」而非「百度转码」
- 在页面里加一行调试:
console.log(window.location.href),如果输出的是你的真实域名,说明没转码;如果变成https://www.baidu.com/s?...或https://m.baidu.com/.../yourdomain.com,说明已被代理转码 - 检查 Network 面板:原始请求的
Referer是https://m.baidu.com,但响应头中不应出现X-Baidu-Page-Type: transcode
viewport 上。很多人调了半天别的 meta,最后发现删掉 user-scalable=no 就立刻生效。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











