<main>必须唯一且不能嵌套,因其代表整页唯一核心内容,是辅助技术和SEO定位主旨的关键;<section>仅作逻辑分组,须带标题,可复数嵌套。

HTML语义化不是“加分项”,而是现代网页的底线要求——不写对结构,screen reader读不准、SEO爬虫抓偏、后续维护成本翻倍,都是立刻可见的问题。
什么时候该用 <main> 而不是 <section>
<main> 表示文档中与当前页面最核心、唯一的内容区域;<section> 是对内容的逻辑分组,可嵌套、可复数。混用会导致语义冲突。
- 一个页面只能有一个
<main>,且不能嵌套在<article>、<aside>或另一个<main>里 -
<section>必须有标题(<h1>–<h6>),否则它和<div>没本质区别 - 博客列表页:整个文章流包裹在
<main>,每篇文章用<article>,文章内的章节才用<section>
<nav> 的边界到底在哪
不是所有链接集合都算导航。<nav> 专指页面级、重复性、全局跳转用途的链接组,比如顶部菜单、侧边栏主目录、页脚快速入口。
- 文章内“上一篇/下一篇”链接属于内容流,用
<footer>或普通<p>更合适 - 搜索框提交按钮、登录跳转链接不属于
<nav>,它们是表单或操作行为,应放在<form>或<aside>中 - 多个
<nav>允许存在,但建议加aria-label区分,例如<nav aria-label="主导航">和<nav aria-label="页脚导航">
为什么 <header> 和 <footer> 可以嵌套使用
它们不是页面专属,而是内容区块的“头尾”。每个 <article>、<section> 都可以自带 <header> 和 <footer>,表达局部上下文。
立即学习“前端免费学习笔记(深入)”;
-
<header>在<article>内可放作者、发布时间、分类标签 -
<footer>在<section>内可放编辑说明、参考资料链接 - 注意:页面级
<header>通常含 logo + 主导航;内容级<header>不该再塞导航
<aside> 不是“边栏”而是“旁注”
它的语义是“与主内容相关但可独立存在”的补充信息,和布局位置无关。放在右侧、左侧、甚至文章中间都合法。
- 博客正文里的术语解释、引用来源、作者简介,适合用
<aside> - 广告位、推荐文章列表,若与当前内容无直接语义关联,就该用
<div>+ ARIA role,而不是硬套<aside> - 浏览器不会自动把
<aside>渲染成侧边栏——那是 CSS 的事;语义错,样式再好看也救不了可访问性
真正难的不是记住标签名,而是每次写标签前问一句:“这个元素对内容逻辑意味着什么?”——机器不看样式,只认语义;人看多了也会养成条件反射。一旦漏掉这个判断,<div> 就又悄悄冒出来了。



















