html中无固定“标题权重值”,搜索引擎不按h1/h2数字打分;真正起作用的是层级是否连续、h1是否唯一、标题文本是否匹配页面真实意图。

HTML 中没有“标题权重值”这种固定分数,搜索引擎不按 h1/h2 数字大小打分;真正起作用的是层级是否连续、h1 是否唯一、以及标题文本是否匹配页面真实意图。
为什么不能靠数字猜权重
有人以为 h1 权重是 100、h2 是 80、h3 是 60……这是错觉。Google 官方多次说明:没有内置权重表。它分析的是整套结构信号——比如 h1 出现在 DOM 开头、后面紧接 h2、再跟 h3,这种连续嵌套会强化内容可信度;而 h1 后直接 h4,系统会认为中间逻辑缺失,反而降权该区块。
常见错误现象:curl -s URL | grep -o '<h> 扫出来是 <code><h1></h1>、<h4></h4>、<h2></h2> 这种乱序结果,说明结构已断裂。
- 浏览器渲染不出错,不代表语义正确
- SEO 工具(如 Screaming Frog)报
heading-level-skipped错误,就是检测到跳级 - 读屏软件在“标题导航模式”下会跳过
h4,因为它找不到所属的h3父级
h1 必须唯一且位置靠前
一个页面出现两个 h1,不是“权重平分”,而是让算法放弃判断主干。CMS 模板里 header 区域硬写 <h1>MySite</h1>,正文又来一个 <h1>React 性能优化指南</h1>,等于给爬虫扔了两把钥匙,它不知道开哪扇门。
真实场景中要这样处理:
- Layout 层去掉所有
h1,改用<header role="banner"></header>或纯<div class="logo"> <li>页面组件负责输出唯一 <code>h1,并通过 SSR/SSG 在首帧 HTML 中就写死,别等 JS 注入 - Next.js 用户必须用
generateMetadata同步更新title和h1文本,否则 AI 摘要工具会判定“意图模糊” - Vue/React 动态组件传
level时,必须做边界控制:const Tag = `h${Math.min(Math.max(level, 1), 6)}` - 禁止用
v-if或三元表达式切换标签:isMain ? <h1> : <h2></h2> </h1>会导致 DOM 结构浮动,Lighthouse 无法静态分析 - 富文本编辑器输出的
h4若前面缺h3,应在服务端渲染层自动补一层不可见但语义合法的占位(如<h3 aria-hidden="true" style="display:none;"></h3>) - 用 CSS 重置所有标题默认 margin:
h1, h2, h3, h4, h5, h6 { margin: 0; } - 需要小号加粗文字?用
<span class="caption-bold"></span>+ CSS - 需要强调一句话?用
<strong></strong>或<em></em> - 需要视觉像
h2但语义是段落?用<p class="section-title"></p>,别降级标签
h2–h6 必须严格逐级,但可省略中间层
h1 → h2 → h3 → h4 是理想链路;h1 → h2 → h4 是非法断裂;但 h1 → h2 → h4(中间没写 h3,但逻辑上 h4 确实属于某个未显式命名的大类)——这种“非显式但可推导”的结构,只要不违反嵌套顺序,是被允许的。
关键判断标准不是“有没有写”,而是“能不能被无障碍工具和 SEO 解析器还原出父子关系”。
样式和语义必须分离
把 h6 设成 24px 加粗当主标、把 h1 设成 font-size: 12px 当页脚备注——这些操作视觉上成立,但语义已崩坏。屏幕阅读器仍会读作“标题六级”,用户听到一堆无上下文的“标题”,完全无法理解结构。
真正该做的:
最常被忽略的一点是:打开 Chrome DevTools 的 Accessibility 面板,右键检查任意标题节点,看它被识别为第几级 heading 元素——这才是机器真正“看到”的层级,不是你眼睛看到的字号大小。











