Lesson · Beginner
HTML document structure
Understand how the root element, metadata, and visible document content form a predictable HTML page.
- Published
- Last checked
One document, two responsibilities
The head describes the page to browsers and other systems. The body contains
what a visitor reads and operates. Both live inside the root html element.
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Community garden schedule</title>
</head>
<body>
<header>
<h1>Community garden schedule</h1>
</header>
<main>
<p>Saturday work sessions begin at 9 a.m.</p>
</main>
</body>
</html>
Parsing order matters
Put the character encoding near the beginning of head so later bytes are
decoded correctly. Use one root element and keep visible elements out of
metadata.
Accessibility implication
The document language helps screen readers choose pronunciation rules. It also helps translation and indexing systems interpret the text.
How browsers actually behave
The parser has defined insertion modes for document metadata and body content.
Even if the literal head or body tags are omitted, the browser creates those
nodes in the DOM. Misplaced visible content can cause the parser to close head
early and move later nodes, which is another reason to inspect the resulting DOM
instead of relying on a forgiving render.
Scripts and styles referenced from head can affect when content becomes
usable. A classic blocking script pauses parsing unless it is deferred; a
stylesheet can delay rendering while it loads. Metadata should stay concise and
purposeful so the document begins exposing useful body content quickly.
Decisions and trade-offs
Keep global metadata in a shared template when a site has several pages, but
generate page-specific titles, descriptions, and canonicals from page data.
Blindly copying one head across the site creates duplicate or misleading
identity. Add preload hints and social metadata only when measurement or a real
sharing requirement justifies them.
The body should follow task and reading order. Header, navigation, main content, and footer are common responsibilities, not a mandatory visual template. Use semantic regions where their meaning fits and generic containers where no semantic element applies.
Accessibility consequences
Language can change within a document; mark a phrase with a different lang
when pronunciation depends on it. The title and first heading may be similar,
but they serve different contexts: the title distinguishes the browser tab,
while the heading names the visible page.
Only one visible main landmark should identify the primary content. Repeated
navigation regions need labels. Source order must remain sensible when CSS is
disabled, zoom is high, or columns collapse.
Common failures and fixes
- Visible text appears before metadata. Body content was placed in
head. Move it after the body begins and validate the tree. - Every tab has the same name. A shared title was never specialized. Generate a concise page-specific title.
- The screen reader uses the wrong pronunciation. The root language is absent or incorrect. Declare the primary language and mark genuine changes.
- Content flashes late. Blocking assets delay parsing or rendering. Defer noncritical scripts and measure critical styles before adding hints.
Verify it
Inspect the Elements panel rather than only View Source. Confirm exactly one root, one metadata head, and one body; then inspect the document language, encoding, title, and first visible heading. Block CSS and JavaScript to test source order and baseline content. Check the Network waterfall for blocking assets. Validate the HTML, complete the primary task with a keyboard, and test reflow at 320 CSS pixels.
Exercise and next step
Inspect a page you use often. Identify its title, declared language, and first visible heading. These values may differ because they serve different contexts. Then build a heading outline for the body without choosing any font sizes.
Boundary of this lesson
A valid document shell does not guarantee useful content, a fast page, or a complete accessibility experience. It establishes the contexts in which later elements behave. Metadata still needs page-specific truth, body regions need a logical task order, and scripts and styles need independent performance and failure review. Treat the shell as a dependable starting contract rather than a template to copy unchanged into every route. On a generated site, validate the rendered result from several route families because one shared layout can hide page-specific mistakes.
Practice across routes
Create home, article, and contact documents from one shell. Give each a distinct title, description, main heading, and body structure while preserving encoding, language, shared navigation, and one main landmark. Inspect the received source and live DOM for all three. This catches template defaults that a single route cannot reveal and demonstrates which declarations belong to the shared shell versus page content.
Free template + launch checklist
Build a page you can check before launch
Start with one reviewed semantic HTML page, then work through the one-page checklist against your published URL.