在 HTML5 出现之前,前端开发者几乎只能依赖 <div><span> 来构建页面结构。整个文档充斥着没有语义的容器,搜索引擎和屏幕阅读器很难理解页面的内容层次。HTML5 引入了一系列语义化标签,让我们能够用更有意义的元素来描述内容的结构和含义。

为什么语义化很重要

语义化标签带来三大核心好处:

传统写法 vs 语义化写法

下面是一个典型的页面结构对比。先看传统 <div> 堆叠的写法:

<!-- 传统写法:语义不清 -->
<div id="header">
  <div class="logo">前端博客</div>
  <div class="navigation">
    <a href="/">首页</a>
    <a href="/about">关于</a>
  </div>
</div>
<div id="main">
  <div class="post">
    <h2>文章标题</h2>
    <p>文章内容...</p>
  </div>
  <div class="sidebar">
    <h3>推荐阅读</h3>
  </div>
</div>
<div id="footer">
  <p>版权所有</p>
</div>

再用 HTML5 语义化标签重写同样的结构:

<!-- 语义化写法:结构清晰 -->
<header>
  <div class="logo">前端博客</div>
  <nav>
    <a href="/">首页</a>
    <a href="/about">关于</a>
  </nav>
</header>
<main>
  <article>
    <h2>文章标题</h2>
    <p>文章内容...</p>
  </article>
  <aside>
    <h3>推荐阅读</h3>
  </aside>
</main>
<footer>
  <p>版权所有</p>
</footer>

对比之下,语义化版本的每一个标签都清楚地表达了它的用途,无需额外的 id 或 class 来解释。

常用语义化标签一览

页面结构标签

<header> 定义页面或区块的头部信息,通常包含 Logo、标题和导航。一个页面可以有多个 <header>,每个 <article><section> 内部都可以有自己的 <header>

<nav> 专门标记导航链接的区域。屏幕阅读器会将其识别为导航地标,用户可以快速跳转到或跳过该区域。

<main> 表示页面的核心内容,每个页面只能有一个。搜索引擎会优先抓取 <main> 内的内容,辅助技术也提供直接跳转到主内容的快捷键。

<article> 包裹独立的、可被单独引用的内容单元,比如一篇博客文章、一条评论或一个新闻条目。判断标准是:这段内容能否独立发布或被 RSS 订阅抓取?

<section> 表示文档中的一个主题性分组,通常带有标题。它不同于 <div><section> 暗示其内容在逻辑上相关。如果仅仅是为了样式而分组,应该使用 <div>

<aside> 表示与主内容间接相关的辅助内容,如侧边栏、广告、引用块或相关链接列表。

<footer> 定义页面或区块的底部信息,通常包含版权声明、联系方式和友情链接。

内容语义标签

<figure><figcaption> 用于包裹自包含的图文内容,为图片、图表、代码示例等提供说明文字:

<figure>
  <img src="layout-diagram.png" alt="Flexbox 布局示意图">
  <figcaption>图 1:Flexbox 主轴与交叉轴示意图</figcaption>
</figure>

<time> 标签为日期和时间提供机器可读的格式,有助于搜索引擎提取时间信息:

<time datetime="2026-04-28">2026 年 4 月 28 日</time>
<time datetime="2026-05-01T14:30">5 月 1 日下午 2:30</time>

<address> 用于标记联系方式信息,通常放在 <footer> 内:

<address>
  联系我们:<a href="mailto:hello@example.com">hello@example.com</a><br>
  地址:北京市朝阳区某某路 100 号
</address>

实际项目中的最佳实践

在实际开发中,语义化标签的使用有几个常见误区需要注意。首先,不要滥用 <section> 替代 <div>,只有当内容构成一个逻辑主题分组时才使用 <section>。其次,<article> 并非只能用于博客文章,任何可以独立存在的内容块都适合用它包裹。最后,一个页面应该有且仅有一个 <main> 标签,且不应嵌套在 <article><aside><nav> 中。

语义化 HTML 是现代 Web 开发的基础。它不增加任何视觉样式,却能显著提升页面的可访问性、搜索引擎友好度和团队协作效率。从今天开始,在项目中自觉地使用语义化标签,让 HTML 回归它描述内容结构的本质。