Originally published February 2020, updated today.
It’s actually been longer (I remember being introduced to the outline algorithm in 2007), but 11 years is a number worth signifying.
2020 2021 as it was in 2010 the HTML specification defines an outline algorithm and specifies how it affects heading rank regardless of the hard coded heading level
h1...h6 and how
<hgroup> automagically transforms multiple headings into a single heading.
Problem is that its never been implemented, as a consequence developers taking the specification as the truth, have been and continue to be misled. The reality of this fantasy has been burned into many books on HTML and articles over the last decade. The disconnection between implementation reality and HTML specification has been raised many a time. This was in the past partially mitigated by the the HTML5 specification (2014), which initially warned of the disconnect and later modified the definitions of the various elements effected by the non existent outline algorithm and obsoleted the
hgroup element (as it does nothing apart from provide a hook for developers to hang CSS styles off), so that they aligned with a (less) desirable but actual implementation of the semantics of headings and sectioning elements. This included updating the code examples to reflect that
<h1> elements are semantically heading level 1 elements regardless of what they are nested in.
There has been ongoing discussions with the current keepers of the HTML specification, but as such discussions do, have dragged on for years. This is not uncommon or sometimes undesirable, but what is uncommon and undesirable is that important information used by developers and expected to have a passing relationship to reality, does not and has not aligned with implementations for 10 years or so.
10 years + 1, no change
Good news was that there appeared to be movement at the station and the HTML specification may sometime soonish reflect reality. The question is still 10 years + 1:
Why is it OK to have a substantial set of authoritative semantic HTML definitions misdirect developers for so long?
And then there is the question What do we do with