HTML专题之语义化

前言

石匠敲击石头的第 3 次

有一道经典的前端面试题:如何理解 HTML 语义化?

如果让我自己回答,我会说语义化会让 HTML 代码更利于维护,并且有利于 SEO 的优化。但这样的回答显然不够完整,所以才有了这篇文章来好好记录一下 HTML 语义化,如果哪里写的有问题欢迎指出。

HTML语义化是什么

HTML 中语义化简单来说就是使用 “有意义的标签” 来表示页面上不同的区域。

例如下图中就使用了语义化标签用来表示一个页面的各个区域。

HTML专题之语义化_第1张图片

为什么要使用HTML语义化

使用 HTML 语义化标签有以下三点好处:

  1. 有利于构建清晰的结构,有利于团队的维护和开发。
  2. 有利于搜索引擎爬虫更好的理解页面,以此来提升网页的权重。
  3. 有利于不同设备的解析,如屏幕阅读器、盲人阅读器等设备更好的区分哪些部分是主要内容用于优先阅读。

什么场景下适合使用HTML语义化

不是所有场景都适合使用 HTML 语义化!,不是所有场景都适合使用 HTML 语义化!,不是所有场景都适合使用 HTML 语义化!

使用 HTML 语义化标签,“用对” 比 “不用” 好,“不用” 比 “用错” 好。 错误的使用语义化标签只会给机器阅读造成混淆、增加嵌套,给 CSS 编写加重负担。

以下几个场景我个人认为就不适合使用 HTML 语义化标签:

  • 需要兼容 IE 等上古浏览器: 原因很简单,根本就不支持 HTML 语义化标签。
  • 没有 SEO 需求的项目: 用 HTML 语义化我认为最主要的目的是 SEO 优化,项目如果不会被搜索引擎检索到,压根就不需要 HTML 语义化。就像微信小程序的页面布局里大多只有 这一种标签,没有那么多语义化标签,因为小程序没有 SEO 的需求。
  • 高度自定义组件库: 使用通用的容器元素(如
    )来提供灵活性,而不是依赖语义化标签。
  • Vue 等单页面应用(SPA)项目: 这类项目初始加载内容不完整,只有少量的骨架(如一个空的
    ),所以搜索引擎读取不到语义化的标签。如要项目需要 SEO 优化,推荐使用服务端渲染,如:Nuxt.js、Next.js 等
  • 软件界面场景: HTML 语义化的场景更适合 “富文本” 场景,这类场景通常是由文章、博客、新闻等强调内容的结构和语义的部分组成。“软件界面” 场景更多是由 按钮、表单、图表、输入框、状态切换、交互式组件等组成,界面更关注交互,没有明确的内容结构和语义,这时推荐直接使用
    标签。

HTML语义化使用中的障碍

在平常开发网页的时候我基本上也是使用

标签偏多,语义化标签的使用对我存在一定的心智负担。基本上想要用好语义化标签存在以下几个方面的障碍:

  • 学习成本: 需要花时间学习每个语义化标签的语义以及使用场景。
  • 选择适当标签的困难: 在一些复杂的布局中选择一个合适的语义化标签不太直观,选择上会犹豫不决,影响开发效率。
  • 兼容性和浏览器支持: 这个问题在现代浏览器上不算什么大的问题,但是在国内还是有部分公司要求兼容 IE 等古老浏览器(不支持语义化标签)。
  • 团队维护上的差异: 每个人对语义化标签的理解和使用方式可能不同,导致部分代码风格不一致,增加了维护的复杂性。

解决方案:

  • 实践和经验: 说白了就是多用、多练和总结经验。
  • 合理的折衷: 不适合的场景下可以适当的使用
    标签。
  • 文档和团队规范: 制定团队编码规范,确保团队成员对语义化标签有一致的理解。

常用的语义化标签

标签既可以表示整个网页的头部,也可以表示一篇文章或者一个区块的头部。

  • 表示整个网页的头部(页眉)。

    网页标题

    通常包含网页 Logo、网页标题、导航链接等信息。

  • 表示文章的头部。

    文章标题

    CodePencil,发表于2025年2月12日

    文章内容...

    通常包含文章标题、作者、发布时间等信息。

⚠️ 注意:

  • 由于很多区块都可以有头部,所以一个页面可能包含多个
    标签。
  • 一个具体的场景中只能包含一个
    标签,例如整个页面只能有一个页眉,一个文章只能有一个头部区域。
  • 标签中不能再包含另一个
    标签。

标签既可以表示整个网页的尾部,也可以表示一篇文章、一个章节或者一个区块的尾部。

  • 表示整个网页的尾部(页尾)。

    通常包含版权信息、联系信息、相关链接等信息。

  • 表示文章的尾部。

    文章标题

    文章内容...

    作者:CodePencil | 日期:2025-02-12

    阅读更多文章:下一篇

    通常包含文章的作者、日期和链接到下一篇文章的链接等信息。

⚠️ 注意:

  • 由于很多区块都可以有尾部,所以一个页面可能包含多个
    标签。
  • 一个具体的场景中只能包含一个
    标签,例如整个页面只能有一个页尾,一个文章只能有一个尾部区域。
  • 标签中不能再包含另一个
    标签。

标签表示页面的主体内容,一个页面只能有一个
标签


  
页眉
文章
页尾

通常包含页面的核心内容,比如文章、博客内容、商品列表、用户资料等信息。

比如导航栏、页脚、广告、侧边栏、搜索栏等,通常不应该放在

中,因为它们不属于页面的核心内容。

⚠️ 注意:

标签不能放置在

你可能感兴趣的:(HTML专题之语义化)