In HTML, the DOCTYPE
must come first, followed by a single <html>
element, which must contain a <head>
element containing a <title>
element, followed by a <body>
element. See the description of the global structure of an HTML document in HTML 4.01 and the HTML5 draft; the actual requirements are mostly the same other than the DOCTYPE
, but they are described differently.
The actual tags (<html>
, </html>
, <head>
, etc) are optional; the elements will be created automatically if the tags don't exist. <title>
is the only required tag in HTML. The shortest valid HTML 4.01 document (at least, that I could generate) is (needs a <p>
because there needs to be something in the <body>
to be valid):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"><title></title><p>
And the shortest valid HTML5 document:
<!DOCTYPE html><title></title>
Note that in XHTML, all tags must be specified explicitly; no elements will be inserted implicitly.
Browsers perform content type sniffing in some circumstances to determine the type of a resource that hasn't been specified using a Content-Type
HTTP header, and also character encoding sniffing if the Content-Type
header hasn't been supplied or doesn't include a charset
(you should generally try to include these headers, and make sure that they are correct, but there are some circumstances in which you cannot, such as local files not transferred over HTTP). They only sniff a limited number of bytes at the beginning of the document for these purposes, though, so anything that is intended to affect the content sniffing or character encoding sniffing should be near the beginning of the document.
For this reason, HTML5 specifies that any meta
tag which is used to specify the character set (either <meta http-equiv="Content-type" content="text/html; charset=...">
or simply <meta charset=...>
) must be within the first 512 bytes of the file in order to take effect. So, if you are going to include character encoding information within your document, you should put the tag early in the file, possibly even before the <title>
element. But recall that this tag is unnecessary if you properly specify a Content-type
header.
In CSS, later style declarations take precedence over earlier ones, all else being equal. So, you should generally put the most generic style sheets that may be overridden earlier, and the more specific style sheets later.
For performance reasons, it can be a good idea to put scripts at the bottom of the page, right before the </body>
, because loading scripts blocks the rendering of the page.
Obviously, <script>
tags should be ordered so that scripts that depend on each order have the dependencies loaded first.
On the whole, other than the constraints I have already specified, the ordering of tags within <head>
shouldn't matter too much, other than for readability. I tend to like to see the <title>
towards the top, and put the other <meta>
tags in some sort of logical order.
Most of the time, the order you should put things into the body of an HTML document should be the order they should be displayed in, or the order they should be accessed. You can use CSS to rearrange things, but screen readers will generally read things in source order, search indexes will extract things in source order, and so on.