article和section标签有什么区别?HTML语义化结构标签全解析

很多开发者觉得,用错 article 和 section 反正浏览器也不会报错,问题不大。但真相是,这会让屏幕阅读器用户一头雾水,可能导致RSS抓取失败,甚至影响SEO的权重分配。所以,关键不在于“能不能用”,而在于“该不该独立存在”。
什么时候必须用 article 而不是 section
判断标准其实非常清晰:你眼前的这块内容,能不能被完整地“剪”下来,单独发布到另一个地方(比如RSS订阅、邮件简报或第三方网站),并且其核心意义和可读性丝毫不受损?如果能,那它就是 article 的候选者。
- 内容有明确的作者和发布时间(通常用
这样的标签标注),并且很可能被聚合或分发 → 请用article。 - 同一个页面里,并列展示多条同类型内容,比如博客列表页的每篇摘要、新闻首页的每条快讯 → 每一条都应该包装在
article里。 - 内容需要被第三方嵌入或离线缓存(例如PWA应用单独保存一篇文章,CMS接口导出一条评论)→ 必须使用
article。 - 如果你已经为它搭配了
和...
这样的组合,并且这些标签描述的是内容本体,而非父容器 → 那它基本就是一个article了。
section 的正确使用场景和常见误用
千万别把 section 当成一个普通的视觉容器。它的本质是“主题分组”,而且必须自带一个语义化的标题(h2-h6),否则这个分组就失去了意义。
- 在一篇完整的教程里,划分出「安装步骤」、「排错指南」、「版本变更」等逻辑小节 → 这是
section的合理用法,每个小节记得配上对应的标题。 - 电商商品详情页中,「商品参数」、「用户评价」、「相关推荐」这几个区域 → 可以用
section,前提是它们共同服务于“本商品信息”这个上层主题。 - 常见错误1:给导航栏、页脚、侧边栏套上
section→ 它们已经有更精确的专属标签了:na v、footer、aside。 - 常见错误2:仅仅因为想加一个
class="card"的样式,就用section包一层 → 这种情况下,请改用div,语义标签的优先级不应让位于纯粹的样式需求。 - 常见错误3:在
article内部,用section去包裹一个标题加一段文字,但这并没有引入新的主题层级 → 此时,直接使用或一个标题往往更合适。
article 和 section 的嵌套关系怎么写才对
嵌套本身是允许的,但方向和逻辑必须正确,不能本末倒置。
立即学习“前端免费学习笔记(深入)”;
- ✅ 合理嵌套:
article内部包含多个section。例如,一篇教程可以分成「准备」、「实操」、「验证」三个小节,每个小节都是一个section。 - ✅ 合理嵌套:
section内部包含多个article。例如,一个名为「本周热点」的section区域,里面列出了5条独立的新闻,每条新闻都是一个article。 - ❌ 多余嵌套:
section里面只包裹了一个article,而且这个section没有提供任何额外的主题包装 → 这纯属画蛇添足,直接使用article即可。 - ❌ 错误嵌套:
article内部又包一个section,但里面只是重复展示同一条新闻的摘要和全文 → 这种交互效果应该用标签或CSS来控制,而不是通过语义嵌套来实现。
替代方案与兼容性提醒
如果实在拿不准,不妨先问自己一个简单的问题:这段内容有没有独立的作者、发布时间、或者一个可被引用的唯一ID?如果没有,那它大概率属于 section,或者更基础的容器。
- 纯布局需求:如果只是为了样式布局,没有任何语义要求 → 放心用
div,别硬套语义标签。 - 非主体语义:需要一点语义,但不属于内容主体(比如广告位、工具栏)→ 优先考虑
aside,记住,不是所有“放在旁边的东西”都叫section。 - 老项目升级:在改造老项目时,如果发现大量
section套section的情况 → 记得检查是否遗漏了main、header、footer这些更外围的结构标签。 - 无障碍访问:这一点至关重要。在无障碍测试中,屏幕阅读器会把
article当作一个独立的条目进行播报;而section必须依赖其内部的标题,才能形成有效的导航节点。一个没有标题的~
section,对于辅助技术用户来说,几乎是“隐身”的。
最后,分享一个最常被忽略的核心理念:HTML5的语义化标签,不是为了“让代码看起来更现代”的装饰品。它们的核心使命,是给机器——无论是搜索引擎、屏幕阅读器还是网络爬虫——提供清晰、可解析的结构信号。写完代码后,不妨做一次快速检查:所有的 article,是否都能作为独立的RSS条目发出去?所有的 section,是否都配备了对应的标题?这个方法,往往比死记硬背规则要可靠得多。
