When you check a HTML document, using the W3C HTML conformance checker, to find out whether its code conforms to the rules defined in the HTML specification (and other referenced specifications). It’s useful to understand what the output means.
Tip: Running your HTML through a conformance checker will miss any errors you may have introduced when adding to elements/attributes via JavaScript. There is a bookmarklet https://t.co/iho9lKLtrA that will send the HTML DOM of a page to https://t.co/BHtU1P2RhA
— Steve Faulkner (@stevefaulkner) March 16, 2018
Errors
Errors are instances where the code you are checking does not conform to MUST level requirements defined in the HTML specification.
1. MUST This word, or the terms "REQUIRED" or "SHALL", mean that the definition is an absolute requirement of the specification. 2. MUST NOT This phrase, or the phrase "SHALL NOT", mean that the definition is an absolute prohibition of the specification.
For example, the following code snippet breaks the rule:
Content model for element
ol
: Zero or moreli
and script-supporting elements.
<body> <ol> <div></div> </ol> </body>
In other words, an ol
element must only contain li
, script
or template
elements as child elements.
<body> <ol> <template></template> <script></script> <li><div></div></li> </ol> </body>
MUST level requirements and the errors they produce are there to stop you doing stuff that can cause problems or remind you to do stuff that you need to do to avoid problems.
Warnings
Warnings are instances where the code you are checking does not conform to SHOULD level requirements defined in the HTML specification.
3. SHOULD This word, or the adjective "RECOMMENDED", mean that there may exist valid reasons in particular circumstances to ignore a particular item, but the full implications must be understood and carefully weighed before choosing a different course. 4. SHOULD NOT This phrase, or the phrase "NOT RECOMMENDED" mean that there may exist valid reasons in particular circumstances when the particular behavior is acceptable or even useful, but the full implications should be understood and the case carefully weighed before implementing any behavior described with this label.
For example, the following code snippet breaks the rule:
Default Implicit ARIA semantics – SHOULD NOT be used
<body> <ol role="list"> <li>item 1 </ol> </body>
In other words, ol
has a an implicit role of list
, which is conveyed by browsers automatically, so there is no neeed to add the explicit role as an attribute.
<body> <ol> <li>list item </ol> </body>
SHOULD level requirements and the warnings they produce are there to stop you doing stuff that is unecessary or harmful in general or as a reminder to do stuff that it is useful or helpful to do, in general.
Where do these requirement terms come from?
An ancient (1997) text handed down by our ancestors: Key words for use in RFCs to Indicate Requirement Levels. Which you will find referenced by many (all?) W3C specifications that define what are known as normative requirements. Requirements are defined in HTML, for user agent implementers, conformance tool implementers or web developers (AKA authors).