真正语义化的标签是浏览器、搜索引擎和辅助技术能据此推断内容角色的标签,如这7个核心结构标签,以及等关键辅助标签。

哪些标签才算真正“语义化”?
不是所有 HTML5 新增标签都算语义化标签——只有那些**浏览器、搜索引擎和辅助技术能据此推断内容角色**的标签才算。比如 <div> 和 <code><span></span> 永远不算,哪怕你加了 class="header";而 <header></header>、<nav></nav>、<main></main> 这类,一写出来,机器就知道“这是页眉”“这是导航”“这是主体内容”。
核心语义结构标签就 7 个,必须记牢:
-
<header></header>:页面或区块的顶部区域(可嵌套在@#@#@#@#@#@#@#@#@#@0 粘贴源码,看生成的大纲是否符合直觉(比如 <code><main></main>下不该直接跟<footer></footer>,中间得有内容层)
<figure></figure> 和 <time></time> 这类“小众但关键”的标签怎么用?
它们不参与主结构,但对 SEO 和无障碍至关重要,常被忽略:
-
<figure></figure>+<figcaption></figcaption>:不只是给图片加标题。图表、代码块、引用块、甚至一段 SVG 都适用。注意:<figcaption></figcaption>必须是<figure></figure>的**第一个或最后一个子元素** -
<time datetime="2025-12-16">去年十二月十六日</time>:让机器精准识别日期。搜索引擎会抓取datetime值而非文本,所以中文写法不影响解析 -
<cite></cite>:只用于作品名(书名、电影名、文章标题),不是作者名;作者名该用<span></span>或<small></small> -
<dfn></dfn>:包裹首次出现的专业术语,如<dfn>语义化标签</dfn>,屏幕阅读器会提示“定义”
最易被忽视的一点:<main></main> 标签在旧版 Safari(≤15.6)中需配合 role="main" 才能被正确识别;若目标用户含大量 iOS 15 及以下设备,建议补上。
const tags = ['header','nav','main','article','section','aside','footer'];
tags.forEach(t => document.querySelectorAll(t).forEach(el => {
if (el.parentElement && !tags.includes(el.parentElement.tagName.toLowerCase()) && el.parentElement.tagName !== 'BODY') {
console.warn(`${t} inside ${el.parentElement.tagName.toLowerCase()} — likely invalid`);
}
}));











