16 Checks · Code Examples · Free

HTML Document Structure Checklist

Semantic HTML tells search engines what each piece of content means. Proper structure improves rankings, accessibility, and AI visibility.

Why Semantic HTML Matters

Search engines do not see your page the way users do. They read the raw HTML and parse the document structure to understand content hierarchy, topic relationships, and meaning. Using semantic HTML elements gives search engines explicit signals about what each part of your page represents.

16 semantic elements
7 landmark roles
100% free to implement

HTML5 Semantic Elements

header, nav, main, footer Landmarks
article, section, aside Content
figure, figcaption, time Media
ul, ol, dl, blockquote, address Structured

The 16 Checks

Every check ranked by impact. Start at the top and work down.

# Check Category Impact Difficulty
1Use article element for contentStructureCriticalEasy
2Use nav element for navigationStructureCriticalEasy
3Use main element for primary contentStructureCriticalEasy
4Use header and footer elementsStructureHighEasy
5Use section with headingsStructureHighEasy
6Use aside for supplementary contentStructureHighEasy
7Use figure and figcaption for imagesMediaHighEasy
8Use time element with datetime attributeDatesMediumEasy
9Use ul and ol for listsStructureMediumEasy
10Use blockquote for citationsStructureMediumEasy
11Use strong and em for emphasisSemanticsMediumEasy
12Use p elements for paragraphsStructureMediumEasy
13Avoid empty or meaningless elementsCleanupLowEasy
14Use address for contact informationSemanticsLowEasy
15Use dl, dt, dd for definition listsStructureLowEasy
16Validate HTML with W3C validatorQualityLowEasy

Semantic HTML5 Page Structure: Code Examples

See exactly how to use semantic HTML elements to build a well-structured page.

Complete Semantic Page Layout

Every page should follow this skeleton. The header, nav, main, and footer elements create landmark regions that screen readers use for navigation and search engines use to understand page structure.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Page Title</title>
</head>
<body>

  <header>
    <nav aria-label="Main">
      <ul>
        <li><a href="/">Home</a></li>
        <li><a href="/about/">About</a></li>
        <li><a href="/contact/">Contact</a></li>
      </ul>
    </nav>
  </header>

  <main>
    <article>
      <h1>Page Title Here</h1>
      <section>
        <h2>First Section</h2>
        <p>Content goes here.</p>
      </section>
      <section>
        <h2>Second Section</h2>
        <p>More content.</p>
      </section>
    </article>
    <aside>
      <h2>Related Links</h2>
      <p>Sidebar content.</p>
    </aside>
  </main>

  <footer>
    <p>© 2026 Company Name</p>
  </footer>

</body>
</html>

Article vs Section vs Div

Use article for standalone content, section for thematic groupings, and div only for styling. Each element signals different meaning to search engines.

Correct Usage
<!-- Article: self-contained content -->
<article>
  <h2>How to Bake Sourdough</h2>
  <p>A complete guide...</p>
</article>

<!-- Section: thematic grouping -->
<section>
  <h2>Ingredients</h2>
  <ul>...</ul>
</section>

<!-- Div: layout only, no semantics -->
<div class="card-grid">
  <div class="card">...</div>
</div>
Incorrect Usage
<!-- WRONG: div for content that needs semantics -->
<div class="blog-post">
  <div class="post-title">Title</div>
  <div class="post-body">Content</div>
</div>

<!-- WRONG: section without a heading -->
<section>
  <p>Random content with no topic</p>
</section>

<!-- WRONG: article for layout wrapper -->
<article class="sidebar">
  <p>Ad placement</p>
</article>

Navigation with nav Element

The nav element tells search engines and screen readers that a group of links is navigation. Always use ul inside nav for link lists, and add aria-label when there are multiple nav elements on a page.

<header>
  <a href="/"><img src="logo.svg" alt="Company Name"></a>

  <nav aria-label="Main">
    <ul>
      <li><a href="/services/" aria-current="page">Services</a></li>
      <li><a href="/about/">About</a></li>
      <li><a href="/blog/">Blog</a></li>
      <li><a href="/contact/">Contact</a></li>
    </ul>
  </nav>
</header>

<!-- Breadcrumb navigation -->
<nav aria-label="Breadcrumb">
  <ol>
    <li><a href="/">Home</a></li>
    <li><a href="/services/">Services</a></li>
    <li><span aria-current="page">SEO Audit</span></li>
  </ol>
</nav>

<!-- Footer navigation -->
<footer>
  <nav aria-label="Footer">
    <ul>
      <li><a href="/privacy/">Privacy Policy</a></li>
      <li><a href="/terms/">Terms of Service</a></li>
    </ul>
  </nav>
</footer>

Figure and Figcaption for Images

Wrap images in figure when they are referenced from the main content. The figcaption provides additional context beyond the alt attribute, giving search engines more information about the visual content.

<figure>
  <img src="traffic-growth-chart.png"
       alt="Organic traffic grew 140% after implementing semantic HTML"
       width="800" height="450">
  <figcaption>
    Organic traffic growth from January to June 2026
    after restructuring the site with semantic HTML5 elements.
  </figcaption>
</figure>

<!-- Figure for code snippets -->
<figure>
  <pre><code>.container { max-width: 1200px; }</code></pre>
  <figcaption>Basic responsive container CSS</figcaption>
</figure>

<!-- Figure for diagrams -->
<figure>
  <img src="site-architecture.svg"
       alt="Hierarchical site structure with homepage at top">
  <figcaption>
    Figure 2: Recommended site architecture for sites
    with fewer than 500 pages.
  </figcaption>
</figure>

Time Element with datetime Attribute

The time element gives search engines a machine-readable date. Google uses this to understand content freshness, which matters for time-sensitive queries.

<!-- Full date -->
<p>Published on <time datetime="2026-08-01">August 1, 2026</time></p>

<!-- Date with time -->
<p>Last updated <time datetime="2026-08-10T14:30:00Z">
  August 10, 2026 at 2:30 PM UTC</time></p>

<!-- Relative date in article footer -->
<article>
  <h1>SEO Checklist for 2026</h1>
  <footer>
    <p>By <a href="/author/amir/">Amir Ali</a>
    &mdash; <time datetime="2026-08-01">Aug 1, 2026</time></p>
  </footer>
</article>

<!-- Duration (not widely supported but valid) -->
<p>Estimated reading time: <time datetime="PT8M">8 minutes</time></p>

Lists: ul, ol, dl, dt, dd

Lists signal structured content to search engines. Use ul for unordered items, ol for ranked or sequential steps, and dl/dt/dd for key-value pairs like glossaries, specs, or FAQs.

<!-- Unordered list: features, benefits -->
<ul>
  <li>Keyword research and mapping</li>
  <li>Technical SEO audit</li>
  <li>Content optimization</li>
</ul>

<!-- Ordered list: steps, rankings -->
<ol>
  <li>Run a site audit with Screaming Frog</li>
  <li>Fix all crawl errors</li>
  <li>Optimize title tags and meta descriptions</li>
  <li>Submit updated sitemap to Google Search Console</li>
</ol>

<!-- Definition list: glossary, specs -->
<dl>
  <dt>Canonical Tag</lt>
  <dd>An HTML element that tells search engines which URL
      is the preferred version of a page when duplicate
      or similar content exists at multiple URLs.</dd>

  <dt>Crawl Budget</dt>
  <dd>The number of pages a search engine bot will crawl
      on your site within a given timeframe.</dd>

  <dt>Structured Data</dt>
  <dd>A standardized format for providing information about
      a page and classifying its content using schema.org
      vocabulary.</dd>
</dl>

Blockquote with cite

Use blockquote for quoted content from another source. The cite attribute points to the source URL, and the cite element names the work or author. This signals to search engines that you are referencing authoritative sources.

<blockquote cite="https://developers.google.com/search/docs">
  <p>Google uses structured data to understand the content
  on the page and show that content in a richer appearance
  in search results.</p>
  <footer>
    &mdash; <cite>Google Search Central Documentation</cite>
  </footer>
</blockquote>

<!-- Short inline quote -->
<p>As John Mueller from Google stated,
<q>Semantic HTML helps us understand your content better</q>,
which is why structure matters for SEO.</p>

Table Structure with thead, tbody, th, scope

Proper table structure helps search engines parse tabular data and helps screen readers navigate rows and columns. Always use thead for header rows, tbody for data, and scope attributes on th elements.

<table>
  <caption>SEO Tool Comparison</caption>
  <thead>
    <tr>
      <th scope="col">Tool</th>
      <th scope="col">Free Plan</th>
      <th scope="col">Crawl Limit</th>
      <th scope="col">Best For</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">Screaming Frog</th>
      <td>Yes</td>
      <td>500 URLs</td>
      <td>Technical audits</td>
    </tr>
    <tr>
      <th scope="row">Ahrefs</th>
      <td>No</td>
      <td>Unlimited</td>
      <td>Backlink analysis</td>
    </tr>
    <tr>
      <th scope="row">Google Search Console</th>
      <td>Yes</td>
      <td>N/A</td>
      <td>Index monitoring</td>
    </tr>
  </tbody>
</table>

Strong vs Em vs B vs I

Strong and em carry semantic meaning — they tell search engines the text is important or emphasized. B and i are purely visual. Use the semantic versions when the content genuinely carries extra weight.

Semantic (Preferred)
<!-- Strong: important text -->
<p><strong>Warning:</strong> This action
cannot be undone.</p>

<!-- Em: stress emphasis -->
<p>You should <em>never</em> skip
heading levels.</p>

<!-- Both together -->
<p><strong>Critical:</strong> The page
<em>must</em> have exactly one H1.</p>
Visual Only (Use Sparingly)
<!-- B: visual bold, no meaning -->
<p>The product name is
<b>Blue Widget Pro</b>.</p>

<!-- I: alternate voice/mood -->
<p>The term <i>canonicalization</i>
refers to...</p>

<!-- I for ship names, terms -->
<p>We sailed on the
<i>HMS Enterprise</i>.</p>

Address Element for Contact Info

The address element represents contact information for the nearest article or body element. It is not for arbitrary addresses — only for contact details. Screen readers announce it as contact information.

<footer>
  <address>
    <p>
      <a href="mailto:[email protected]">[email protected]</a><br>
      <a href="tel:+1234567890">+1 (234) 567-890</a>
    </p>
    <p>
      Clienvora SEO Agency<br>
      123 Marketing Street<br>
      New York, NY 10001
    </p>
  </address>
</footer>

<!-- Address in an article footer -->
<article>
  <h1>How to Fix Crawl Errors</h1>
  <p>Article content here...</p>
  <footer>
    <p>Written by <a href="/author/amir/">Amir Ali</a></p>
    <address>
      Contact: <a href="mailto:[email protected]">[email protected]</a>
    </address>
  </footer>
</article>

HTML Structure Tools

Free and freemium tools to audit and validate your HTML document structure.

Free

WAVE Accessibility Tool

Browser extension that shows your page's semantic structure, landmark regions, heading hierarchy, and accessibility errors. Flags missing nav, main, and other semantic elements.

wave.webaim.org →
Free (Built-in)

Lighthouse

Built into Chrome DevTools under the Lighthouse tab. Audits accessibility, SEO, and best practices — including checks for proper heading hierarchy, landmark regions, and link text.

Built into Chrome DevTools
Free (Built-in)

Chrome DevTools

Right-click any element and select "Inspect" to see its semantic HTML tag. Use the Elements panel to verify your page uses article, section, nav, and other semantic elements instead of generic divs.

Built into Chrome, Firefox, Edge
Free

HTML Validator by W3C

The official W3C validator checks your HTML for syntax errors, unclosed tags, nesting issues, and invalid element usage. Validates that your semantic elements are used correctly and in proper context.

validator.w3.org →
Free / Paid

Screaming Frog SEO Spider

Crawls your entire site and reports which pages use semantic HTML elements. Exports data on H1 tags, meta descriptions, and page structure across all URLs. Free for up to 500 URLs.

screamingfrog.co.uk →
Need Better Rankings

Let's Optimize Pages That Rank and Convert

Got pages stuck on page two? Traffic that won't convert? Let's fix it with a personalized on-page SEO audit.

Get a Free SEO Audit

Frequently Asked Questions

What is semantic HTML?

Semantic HTML uses elements that describe the meaning of content, not just its appearance. Elements like article, section, nav, header, footer, and aside tell search engines and assistive technologies what each part of the page represents, improving both SEO crawlability and accessibility for screen reader users.

Why does HTML structure matter for SEO?

HTML structure helps search engines understand the hierarchy and relationships between content sections. Proper use of headings, semantic elements, and document structure signals which content is most important. Google's documentation confirms that structured HTML helps their crawlers parse pages more efficiently, which can influence how content appears in search results and featured snippets.

What is the difference between article and section?

An article element represents a self-contained piece of content that could be independently distributed or reused — like a blog post, news article, or forum thread. A section groups thematically related content within a page, typically with its own heading. Use article for standalone content and section for topical groupings within a larger document.

What is the difference between section and div?

A section element groups thematically related content with a heading, signaling a distinct topic area to search engines and assistive technologies. A div is a generic container with no semantic meaning — use it only for styling or layout purposes when no semantic element fits. If your grouping does not have a clear topic or heading, a div is the correct choice.

How does semantic HTML help accessibility?

Screen readers and assistive technologies use semantic elements to build a navigable page structure. A nav element tells screen readers it is navigation, allowing users to jump directly to it. A main element identifies the primary content area. Landmark elements like header, footer, aside, and article let screen reader users skip between major page sections without listening to every element in sequence.

Should I use strong or b for bold text?

Use strong for text that has strong importance, seriousness, or urgency — it conveys semantic meaning to search engines and screen readers. Use b for stylistic bolding where you want to draw attention but the text has no added importance. Similarly, use em for stress emphasis (semantic) and i for alternate voice or mood (stylistic). Search engines give slight weight to strong and em tags as content signals.

When should I use figure and figcaption?

Use figure to wrap self-contained content like images, diagrams, code snippets, or tables that are referenced from the main text but could be moved without affecting the document flow. The figcaption provides a caption or description for the content inside figure. This is especially useful for SEO because figcaption gives search engines additional context about the visual content alongside the alt attribute.

Does the time element affect SEO?

The time element with a datetime attribute gives search engines a machine-readable date or time. Google uses date information to understand content freshness, which can influence rankings for time-sensitive queries. The datetime attribute ensures dates are parsed correctly regardless of how they are displayed to users, preventing ambiguity between formats like MM/DD/YYYY and DD/MM/YYYY.

AA

Amir Ali

Founder of Clienvora, a content marketing agency that combines SEO and copywriting to drive rankings, traffic, and revenue. This checklist is maintained and updated regularly.