All Docs
FeaturesMaking Tax DigitalUpdated March 10, 2026

SEO Fix: Adding the <main> Landmark to the Homepage

SEO Fix: Adding the <main> Landmark to the Homepage

Release: v1.0.378
Control: SEO-13
Area: Semantic HTML / Accessibility


Background

HTML5 landmark elements — <header>, <nav>, <main>, <footer>, <aside> — give browsers, screen readers, and search crawlers a structured map of a page. The <main> element specifically designates the primary content region: the content that is unique to that page and distinct from repeated chrome like navigation or footers.

The WAI-ARIA specification and WCAG 2.1 (Technique ARIA11) both require that pages expose a <main> landmark so that assistive technologies can offer "skip to main content" functionality.


The Problem

The homepage (src/app/page.tsx) had the following structure:

<!-- Before: no <main> landmark -->
<div class="flex min-h-screen flex-col">
  <header>…</header>
  <div> <!-- anonymous wrapper -->
    <section> <!-- hero --> </section>
    <section> <!-- features --> </section>
    <section> <!-- trust / CTA --> </section>
  </div>
  <footer>…</footer>
</div>

All section content — the hero, feature highlights, and the trust/CTA block — sat inside an anonymous <div>. There was no <main> element, so:

  • Screen readers presented the page without a navigable content landmark.
  • Keyboard users had no "skip to main content" target.
  • Search crawlers could not distinguish primary page content from surrounding layout.

By contrast, the Pricing, Privacy, Terms, and ROPA pages already used <main> correctly, creating an inconsistency across the site.


The Fix

The anonymous content wrapper <div> was replaced with a <main> element:

<!-- After: correct landmark structure -->
<div class="flex min-h-screen flex-col">
  <header>…</header>
  <main class="flex flex-1 flex-col">
    <section> <!-- hero --> </section>
    <section> <!-- features --> </section>
    <section> <!-- trust / CTA --> </section>
  </main>
  <footer>…</footer>
</div>

The change is a single tag substitution. The Tailwind utility classes (flex flex-1 flex-col) are preserved, so the visual layout is completely unaffected.


Impact

AreaBeforeAfter
Screen reader landmark navigationNo <main> region announced<main> region correctly identified
"Skip to content" link targetNo valid target<main> serves as the skip target
Search crawler content weightingPrimary content in anonymous <div>Primary content inside <main>
Visual layoutUnchangedUnchanged
Other pages (Pricing, Privacy, Terms, ROPA)Already correctAlready correct

Accessibility & SEO Notes

  • A page must not contain more than one <main> element (excluding hidden ones). This fix adds exactly one.
  • The <main> element implicitly carries the ARIA role main, so no explicit role="main" attribute is needed.
  • This change resolves a potential WCAG 2.1 Level A failure under Success Criterion 1.3.6 (Identify Purpose) and supports SC 2.4.1 (Bypass Blocks).
  • From an SEO perspective, content within <main> is treated as the canonical body of the document by major crawlers, improving content signal clarity for the homepage — the highest-value page on the domain.