语义化核心是用对标签而非取好class名,header/nav/main/article/aside/footer等必须替代div,section与article不可混用,标题需严格层级,time/strong/button/img等细节标签不可忽略。

直接用对的标签,比“怎么加语义”更重要。HTML语义化不是给
header就是头部,nav就是导航,main就是主内容,没商量。
哪些标签必须立刻替换掉 div?
不是所有div都要删,但以下几类场景中,div属于明确违规,应无条件替换:
- 页面顶部区域(含 logo、主导航)→ 改用
header,不要<div class="header"> <li>主导航链接集合 → 改用 <code>nav,且建议加aria-label="主导航"(辅助技术依赖这个) - 整页主体内容容器 → 必须用
main,且整个页面只出现一次;别用div id="content" - 独立可分发/可订阅的内容单元(如博客文章、新闻条目)→ 用
article,不是div class="post" - 侧边栏、广告位、相关推荐等辅助内容 → 用
aside,而非div class="sidebar" -
article:内容能独立存在、可被单独分发或重用(比如一篇博客、一条微博、一个用户评论) -
section:只是主题性分组,不具备独立传播价值(比如“产品介绍”“客户评价”“技术参数”这些区块) - 一个
article内部可以嵌套多个section,但反过来不行 - 没有标题的
section很可疑——W3C 明确建议每个section应有h1–h6标题 - 每个
article、section、nav等区块,都该有且仅有一个标题(h1–h6),哪怕视觉上不明显 - 标题必须严格递进:不能
h1后面直接跟h3;也不能在section里用h1(除非它是整个页面唯一h1) -
h1全局只应出现一次,代表页面核心主题;子区块用h2起始,依此类推 - 别为了样式省标题——可用 CSS 隐藏文字但保留语义,例如
h2 { font-size: 0; }+h2::before { content: "产品特性"; } - 发布时间、活动日期 → 必须用
time,并带datetime属性:<time datetime="2026-04-29">今天</time>,否则搜索引擎无法识别时效性 - 强调重要信息(如警告、价格、操作后果)→ 用
strong,不是b;b只是视觉加粗,无语义权重 - 所有可点击交互控件 → 优先用
button,不用div或span模拟;否则键盘 Tab 焦点、屏幕阅读器朗读、禁用状态都会失效 -
img必须带alt,空字符串alt=""仅适用于纯装饰图;功能图(如提交按钮图标)需描述行为,如alt="提交表单"
错误示例:<div class="footer"><p>©2026</p></div> → 正确写法:<footer><p>©2026</p></footer>
section 和 article 到底怎么选?
section 和 article 都表示“一块内容”,但语义完全不同,混用会误导搜索引擎和辅助工具:
反例:<section><p>这是用户评论</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher"><img
src="https://img.php.cn/upload/skill/000/000/081/179109368394970.jpg" alt="Wechat HTML Publisher" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher" class="overflowclass">Wechat HTML Publisher</a>
<p class="overflowclass">直接上传HTML富文本到微信公众号草稿箱。支持完整的HTML格式,无需Markdown转换。</p>
</div>
<a rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div></section> → 应改为 <article><p>这是用户评论</p></article>
标题层级和嵌套不能跳级也不能裸奔
语义化不是只换标签,还要守结构规矩。标题层级错乱会让屏幕阅读器跳读失败,SEO 权重也会打散:
常见坑:<article><p>正文…</p></article> —— 缺标题,语义断裂。
time、strong、button 这些小标签最容易被忽略
很多人以为语义化只关乎大结构,其实细节标签才是专业分水岭:
最常被跳过的细节:button 缺少 type 属性,默认是 submit,放在表单里可能意外触发表单提交。
语义化真正的难点不在“用什么标签”,而在“理解每个标签背后的内容模型约束”。比如 nav 里面不能放段落,main 不能嵌套在 article 里——这些不是样式问题,是 HTML 规范强制要求,违反会导致可访问性工具直接跳过整块内容。










