对于典型的网站,例如博客,h1
应该包含网站标题。是的,在网站的每个页面上。
为什么?在一个网站中,它的所有网页都有不同的部分。我们以导航为例:
<ul id="site-navigation">
<li><a href="/">Home</a></li>
<li><a href="/about">About me</a></li>
<li><a href="/contact">Contact</a></li>
</ul>
这#site-navigation
在网站的每个页面上都会重复。它代表站点导航,而不是页面导航。区别很重要!{页面导航可以是目录(如在维基百科文章中)或长文章的分页。}
如果您将文章标题用作h1
,则站点导航将在此标题的范围内。
<body>
<div>John’s blog</div> <!-- the site title -->
<h1>My first blog post</h1> <!-- the article title -->
<p>…</p>
<h2>Navigation</h2>
<ul id="site-navigation">…</ul> <!-- the site-wide navigation -->
</body>
所以这个标记传达了:导航(→ 由 开始h2
)是文章的一部分(→ 由 开始h1
)。但这不是真的,这个导航不是文章的导航。链接实际上是整个站点的一部分,站点由站点标题表示。
当文章也包含副标题时,问题变得更加清晰:
<body>
<div>John’s blog</div> <!-- the site title -->
<h1>My first blog post</h1> <!-- the article title -->
<p>…</p>
<h2>Why I’m blogging</h2>
<p>…</p>
<h2>Why you should read my blog</h2>
<p>…</p>
<h2>Navigation</h2>
<ul id="site-navigation">…</ul> <!-- the site-wide navigation -->
</body>
如您所见,没有办法将文章子标题与导航区分开来。看起来这篇文章有三个子标题:“我为什么要写博客”、“你为什么要阅读我的博客”和“导航”。
因此,如果我们改为使用h1
站点标题和h2
文章标题,导航也可以在站点标题范围内,也可以使用h2
:
<body>
<h1>John’s blog</h1> <!-- the site title -->
<h2>My first blog post</h2> <!-- the article title -->
<p>…</p>
<h2>Navigation</h2>
<ul id="site-navigation">…</ul> <!-- the site-wide navigation -->
</body>
现在这个标记传达了:有一个名为“John's blog”的站点(→ 由 开始h1
),它包含一篇文章(→ 由第一个开始h2
)和一个站点导航(→ 由第二个开始h2
)。文章的小标题h3
当然是现在。
使用h1
文章标题的另一个问题是,通常在第一个标题之前有内容,例如包含网站标题和其他内容的网站标题。对于通过标题导航的用户,第一个内容将是“不可见的”。因此,给每个单独的块一个自己的标题是一个很好的做法。
HTML5 使用分段/大纲算法将其形式化。它解决了您在使用 HTML 4.01 时可能遇到的许多大纲问题,因为内容顺序现在(大部分)是免费的,而且如果您不想这样做,您不必“发明”实际标题,这要感谢section
/ article
/ nav
/ aside
。但在 HTML5 中,站点标题也应该是任何分段元素/根的子元素h1
,body
但不是子元素。所有其他部分都在本网站标题的范围内。