For a typical website, for example. blog, h1 must contain the name of the site. Yes, on every page of the site.
Why? There are various parts on a website that are accessible to all of their web pages. Let's take navigation as an example:
<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>
This #site-navigation repeated on every page of the site. It is a site navigation, not a page navigation. The difference is important! {Page navigation can be a table of contents (for example, in a Wikipedia article) or pagination for a long article.}
If youd uses the article title as h1 , site navigation will be within that title.
<body> <div>John's blog</div> <h1>My first blog post</h1> <p>…</p> <h2>Navigation</h2> <ul id="site-navigation">…</ul> </body>
Thus, this markup conveys: Navigation (→ starting with h2 ) is part of the article (→ h1 running). But this is not true, this navigation is not navigation for the article. Links are indeed part of the entire site, and the site is represented by the site title.
The problem becomes clearer when the article contains subheadings:
<body> <div>John's blog</div> <h1>My first blog post</h1> <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> </body>
As you can see, there is no way to distinguish between article headings and navigation. There are three subheadings in the article: “Why am I a blog,” “Why should you read my blog,” and “Navigation.”
So, if instead of using the h2 site header, use h1 and h2 to navigate the site, it could be in the site header area, also using h2 :
<body> <h1>John's blog</h1> <h2>My first blog post</h2> <p>…</p> <h2>Navigation</h2> <ul id="site-navigation">…</ul> </body>
Now this markup conveys: There is a site called “Jones's Blog” (→ h1 launched), and it contains an article (→ started by the first h2 ) and site navigation (→ the second h2 launched). The article headings would be h3 now, of course.
Another problem when using h1 for the title of an article is that then usually there is content before the first title, for example. The title of the site, including the name of the site and other materials. For users who navigate through the headers, this first content will be "invisible." Therefore, it is good practice to give each individual block its own title.
HTML5 formalizes this using a partitioning / allocation algorithm . It solves many problems that may arise with HTML 4.01, because ordering content can be (mostly) free now, and you don’t need to “invent” the actual headers if you don’t want to, thanks to section / article / nav / aside . But also in HTML5, the site header should be h1 , which is a child of the body , but not a child of any element of the / root section. All other sections are included in the title of this site.