必须唯一且不嵌套,和须成对存在于整页及每个/中;用于主导航;表独立内容,表依附段落;+强制包裹独立媒体并确保无障碍识别。

<main></main> 必须且只能出现一次,<header></header> 和 <footer></footer> 在整页或每个 <article></article> 内部都必须成对存在——不是“建议用”,是结构逻辑和可访问性强制要求。
哪些标签属于强制语义化节点
浏览器、屏幕阅读器和搜索引擎在解析页面时,会依赖特定标签建立基础导航路径。缺失或错用,会导致主内容不可达、导航跳过、SEO 权重错配。
-
<main></main>:整个文档中仅允许一个,且不能嵌套在<article></article>、<aside></aside>或<nav></nav>内;漏写或重复,会让辅助技术无法定位核心内容 -
<header></header>和<footer></footer>:每个<article></article>或<section></section>可自带独立的<header></header>/<footer></footer>(比如博客文章顶部的发布时间、底部的作者信息),但整页也必须有顶层<header></header>(含 logo/nav)和<footer></footer>(含版权/联系方式) -
<nav></nav>:只要页面存在主导航(非面包屑、非页内锚点、非底部友情链接),就必须用<nav></nav>包裹;否则键盘用户按 Ctrl+Alt+1 等快捷键跳转导航时会失效
<article></article> 和 <section></section> 的使用边界在哪
二者都表示“分组”,但语义权重完全不同:一个强调“可脱离上下文独立存在”,一个强调“依附当前文档的逻辑段落”。混用会破坏 RSS 抓取、打印样式、甚至影响 document outline 生成。
- 用
<article></article>:新闻正文、用户评论、独立商品卡片、博客单篇;它自带隐式aria-roledescription="article",会被 RSS 阅读器识别为可订阅单元 - 用
<section></section>:同一页面内带<h2></h2>的功能模块,如“安装步骤”“客户评价”“技术参数”;它不自带独立语义,只是文档大纲里的一个层级节点 - 禁止把整页导航栏、页脚链接列表硬塞进
<article></article>;也不该把纯 CSS 布局 wrapper(如<div class="grid-container">)替换成 <code><section></section>为什么
<figure></figure>+<figcaption></figcaption>不是可选装饰这对标签直接关联无障碍访问标准:没有
<figure></figure>,图片就算加了alt,屏幕阅读器也无法判断它是“插图”“代码示例”还是“装饰性元素”;没有<figcaption></figcaption>,就等于放弃对图表、截图、引用块的语义标注。- 所有独立媒体内容(非背景图、非图标)都应包裹在
<figure></figure>中,包括<img>、<video></video>、<pre class="brush:php;toolbar:false;"><code></code> 块、甚至引文 <code><blockquote></blockquote></code></pre> -
<figcaption></figcaption>必须是<figure></figure>的第一个或最后一个子元素;放在中间会被忽略,且无法被document.querySelector('figure figcaption')稳定获取 - 不要用
<div class="figure"> 模拟——CSS 类名对机器无意义,<code>role="figure"是补救手段,不是替代方案最容易被忽略的是
<main></main>的唯一性和<figure></figure>的强制包裹逻辑:前者出错,整页主内容对残障用户“不可见”;后者缺失,图表类内容在无障碍树里直接降级为普通容器。这两个点没做对,语义化就只完成了骨架,没通电。
- 所有独立媒体内容(非背景图、非图标)都应包裹在











