直接答案:61 个缓存页面中,57 个声明了 viewport,4 个首页完全没有;54 个页面通过 user-scalable=no 或 user-scalable=0 禁止缩放(88.5%)。分页面类型看:首页 18/25、文章页 36/36 全部禁止缩放。只有 3 个首页允许缩放。
另外,57 个 viewport 中 56 个写了 width=device-width;59/61 使用 HTML5 doctype,14 个页面缺少 html lang。
方法:复用两批缓存,零请求
样本由两部分组成:第 4 期 25 个首页缓存(2026-10-31 至 11-01),以及第 45 期同批 10 个站点的 36 个文章页(2026-11-03 08:40–08:41 抓取,5 个 JS 外壳页已排除)。两批 HTML 都只读不抓,零网络请求。
| 项 | 判定 | 边界 |
|---|---|---|
| viewport | 存在 name=viewport 的 meta | 不判断实际渲染宽度 |
| width=device-width | content 含该字符串 | 大小写与空格已归一 |
| 禁止缩放 | 含 user-scalable=no 或 user-scalable=0 | 只记录声明,不测浏览器行为 |
| HTML5 doctype | 精确匹配 <!doctype html> | XHTML doctype 不计 |
| lang | html 标签的 lang 属性 | 不判断语言值是否正确 |
两批缓存抓取时间不同,不能据此判断站点在这几天内是否改版;页面类型之间的差异也只描述本批样本。
结果:4 个首页没有 viewport
| 页面类型 | 页面数 | 有 viewport | 无 viewport |
|---|---|---|---|
| 首页 | 25 | 21 | 4(E04、E13、E20、E29) |
| 文章页 | 36 | 36 | 0 |
| 合计 | 61 | 57 | 4 |
缺少 viewport 的页面在手机上通常按桌面宽度渲染,再整体缩小,正文会变得很小。这 4 个页面里有 2 个同时不是 HTML5 doctype。
缩放:54 个页面禁止,文章页全部命中
| 声明 | 页面数 | 占 61 |
|---|---|---|
user-scalable=no | 49 | 80.3% |
user-scalable=0 | 5 | 8.2% |
| 允许缩放 | 3 | 4.9% |
| 无 viewport | 4 | 6.6% |
| 页面类型 | 禁止缩放 | 页面数 | 占比 |
|---|---|---|---|
| 首页 | 18 | 25 | 72.0% |
| 文章页 | 36 | 36 | 100% |
文章页 36/36 全部禁止缩放,说明这是文章模板的统一声明,而不是个别页面遗漏。允许缩放的 3 个首页都只写了 width=device-width, initial-scale=1。
width、doctype 与 lang
| 项 | 页面数 | 说明 |
|---|---|---|
viewport 含 width=device-width | 56/57 | 1 个只写 initial-scale 与 min/max-scale |
viewport 含 initial-scale | 57/57 | — |
| HTML5 doctype | 59/61 | 2 个首页仍用 XHTML doctype |
| html 有 lang | 47/61 | 14 个缺失(首页 9、文章页 5) |
只写 initial-scale、不写 width=device-width 的那 1 个页面(E30),把最小与最大缩放都锁在 1,等于固定了布局宽度。它不是“没有 viewport”,但同样不利于小屏阅读。
对验收的启示
- 先查 viewport 是否存在。 4 个首页没有声明,手机会按桌面宽度缩放。
- 把“禁止缩放”当作单独问题。 54/61 页声明 user-scalable=no 或 0,文章页全部命中;低视力用户无法放大正文。
- width=device-width 与 initial-scale 要成对。 56 个页面两者都有,1 个只锁缩放没有宽度。
- 模板级修复优先。 文章页 36/36 一致,说明改一次模板即可覆盖整站文章。
- doctype 与 lang 一起清。 2 个 XHTML doctype、14 个缺 lang,都属于模板头部问题。
局限
- 零请求复用:首页缓存 2026-10-31 至 11-01、文章页 2026-11-03 08:40–08:41;之后改动未反映。
- 只读声明:不测真实渲染宽度、字体缩放或浏览器是否忽略该声明;不同浏览器对 user-scalable 的处理不一致。
- 不是无障碍合规结论:缩放限制是可访问性风险信号,不等同于 WCAG 违规判定。
- 样本结构:61 页来自 25 个首页与 10 个站点的 36 篇文章页,不是 61 个独立站点;两批时间不同。
- pilot:不外推行业。
数据与复算
匿名数据:equipment-viewport-2026.csv(61 行 × 11 列:页面类型、sample_id、页序、viewport、width、initial-scale、两种缩放声明、是否禁止缩放、HTML5 doctype、lang)。仓库内为 docs/research/2026-11-viewport.csv。
解析:scripts/viewport_probe.py;单元测试 scripts/test_viewport_probe.py(8 项,无网络)。运行:
python -m unittest scripts.test_viewport_probe
配套:文章页 Head 元数据 pilot、首页缓存与压缩 pilot、文章页链接结构 pilot。
数据来源与口径
- 首页缓存:第 4 期 25 个首页(2026-10-31 至 11-01)。
- 文章页缓存:第 45 期 10 站 36 页(2026-11-03 08:40–08:41),5 个 JS 外壳页排除。
- 判定:viewport meta、缩放关键字、doctype 与 html lang 均为静态字符串匹配。
- 扫描时间:2026-11-03,零网络请求。