一个页面只能有一个,且必须准确表达唯一核心主题;–体现内容逻辑嵌套,跳级、多或动态切换标签均破坏语义结构。

一个页面只能有一个 <h1></h1>,且必须准确表达页面唯一核心主题;<h2></h2>–<h6></h6> 不是样式开关,而是内容逻辑的嵌套映射——跳级、多 <h1></h1> 或动态切换标签都会直接破坏语义结构。
为什么 <h1></h1> 必须且只能出现一次
搜索引擎和屏幕阅读器不靠视觉大小识别主标题,而是把 <h1></h1> 当作页面“论文标题”级锚点。两个 <h1></h1> 同时存在(比如 CMS 模板 header 里一个、正文又一个),会导致:
- Google 可能忽略第二个
<h1></h1>后所有层级,子内容不被索引 - NVDA/JAWS 在标题导航模式下卡死在第一个
<h1></h1>,无法跳转 - Lighthouse 的
heading-levels审计项直接报错 - SSR/SSG 页面若首屏 HTML 中无
<h1></h1>(如 loading 状态占位),爬虫抓到的是空结构
怎么判断该用 <h2></h2> 还是 <h3></h3>
不是看字号大小,而是看它在内容大纲中是否从属于上一级标题。例如:
- 文章页:
<h1></h1>是文章标题 → 每个大章节用<h2></h2>(如“背景”“方法”“结论”)→ 每个<h2></h2>下的子模块用<h3></h3>(如“数据收集”“模型训练”) - 仪表盘首页:没有单一主主题,就不用
<h1></h1>,改用<section></section>+<h2></h2>(如“今日概览”“用户活跃”“错误率趋势”) - 组件库文档:每个组件示例区块应为
<h3></h3>(从属于当前组件页的<h2></h2>“API 使用”)
关键检查点:删掉这个标题,下面的内容是否失去上下文定位?如果是,那它就该有对应层级;如果不是,说明层级过高或冗余。
动态渲染标题时最容易踩的坑
Vue/React 中传 level prop 渲染标题很常见,但错误写法会直接让 Lighthouse 无法静态分析结构:
- ❌ 禁止用三元表达式切换标签:
{condition ? <h1> : <h2>}</h2> </h1>—— DOM 结构浮动,SSR 与 CSR 不一致 - ❌ 禁止用
v-if/v-else控制不同<h></h>标签 —— 同一位置标签类型不可预测 - ✅ 正确做法:
const Tag = `h${Math.min(Math.max(level, 1), 6)}`,且level必须在服务端确定(SSR/SSG 场景) - ✅ fallback 必须存在:当
level未传或非法时,默认降级为<h2></h2>,不能渲染<div> 冒充 <h3> <code><title></title>和<h1></h1>不一致会触发 AI 信任降权这不是 SEO 黑话,而是当前主流 AI 搜索引擎(如 Google SGE、Perplexity)的实际判定逻辑:
- 如果
<title></title>是前端性能优化指南 | 前端性能实验室,但<h1></h1>是React.memo 使用误区详解,AI 会标记该页“意图模糊” - 二者语义不必完全相同,但需强相关:前者是频道名+内容类型,后者是具体主题,构成“频道 → 文章”的可信路径
- 关键词堆砌式
<h1></h1>(如SEO优化|h1 h2 h3|HTML标题标签|前端教程)反而降低点击率与停留时间
真正难的不是记住规则,而是在每次敲下
<h> 前,先问一句:这个文字删掉后,用户或 AI 是否还知道这块内容在整页中的不可替代角色?</h> - 如果











