语义化是让html标签自身表达内容角色,而非依赖类名猜测结构;用等标签明确区分页面功能区块,提升可访问性、seo与维护性。

语义化不是让代码“看起来更专业”,而是让代码自己“说清楚它在干什么”。用对标签,别人扫一眼就能分清哪是导航、哪是正文、哪是侧边推荐;机器也能准确识别内容角色,避免靠猜 class 名或翻 CSS 才能搞懂结构。
让结构一目了然,降低理解成本
传统写法中大量使用 <div class="header"> 或 <code><div class="main-content">,类名易过时、难统一、无强制约束。换成 <code><header></header> 和 <main></main>,标签本身即文档——无需注释,新成员打开源码就能定位核心区块。
-
<nav></nav>明确表示“这是跳转入口集合”,不是任意一组链接 -
<article></article>暗示该区块可独立分发(如 RSS 订阅、分享链接) -
<aside></aside>表明内容与主文相关但非必需,比如作者简介或推荐阅读 -
<section></section>要搭配标题(<h2></h2>~<h6></h6>),否则容易沦为“视觉分隔 div”
避免“改一处崩三处”的维护陷阱
当所有区块都靠 class 控制逻辑时,JS 查询(如 document.querySelector('.sidebar'))、CSS 样式、甚至 SEO 抓取都绑定在脆弱的类名上。一旦设计师改版、组件库升级,class 名可能失效,而语义标签保持稳定。
-
<main></main>全页唯一,且不能嵌套在<header></header>、<footer></footer>或另一个<main></main>中——这是 DOM 查询稳定的前提 - 禁止“语义套娃”:比如
<section><article><section></section></article></section>这类无实际区分意义的嵌套,反而模糊层级 - 纯图标按钮旁的说明文字,用
<small></small>或<span></span>更合适;只有完整信息块(含标题、时间、摘要)才用<article></article>
支撑自动化工具与团队协作
语义结构是 axe、Lighthouse 等工具校验无障碍和 SEO 的基础。一个正确使用 <nav></nav> 和 <main></main> 的页面,能直接通过“跳转到主要内容”快捷键测试;而靠 role="navigation" 模拟的 <div>,屏幕阅读器支持不稳定。
<ul>
<li>
<code>document.querySelector('main') 总能稳稳拿到主体内容,不依赖 class 变更
<main></main> 是否重复、<article></article> 是否缺失标题data-module 替代 class 做 JS 锚点,把行为逻辑从样式层解耦出来不是堆标签,而是讲清角色
语义化不是给每个 div 换个名字,而是动手前先问:这块内容能单独存在吗?它在整个页面里承担什么角色?去掉样式后,别人还能看出它是导航还是正文吗?
- 能独立分发 → 用
<article></article> - 整页最核心的信息区 → 用唯一
<main></main> - 一组主要跳转链接 → 用
<nav></nav> - 与主文相关但非必需的补充 → 用
<aside></aside> - 按主题划分的连续内容块 → 用
<section></section>,并配上<h2></h2>~<h6></h6>











