Semantic HTML elements are used
Why it matters
HTML built entirely from <div> and <span> elements has no machine-readable meaning. Screen readers cannot distinguish navigation from content from footers — everything is an undifferentiated block. Semantic elements like <nav>, <main>, <header>, and <footer> expose ARIA landmark roles automatically, letting screen reader users jump directly to the content region they need. WCAG 2.2 SC 1.3.1 (Info and Relationships) and SC 4.1.2 (Name, Role, Value) both require structure to be programmatically determinable. Search engines also use semantic structure to understand page organization, affecting how content is indexed and ranked.
Severity rationale
Info because semantic elements improve assistive technology navigation significantly but their absence does not prevent page functionality — the visual experience is unaffected for sighted users.
Remediation
Replace structural <div> wrappers with their semantic equivalents. At minimum, every page should use these four elements:
<header>
<nav>...</nav>
</header>
<main>
<section>
<article>...</article>
</section>
</main>
<footer>...</footer>
In React/Next.js components, swap container <div> elements for <main>, <section>, or <article> based on the content's role. Use <section> when the content could appear in a table of contents. Use <article> for self-contained content (blog posts, product cards, comments). Do not nest <main> — there should be exactly one per page.
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Site Health Check audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- wcag:2.2 · 1.3.1 — Info and Relationships
- wcag:2.2 · 4.1.2 — Name, Role, Value
Taxons
History
- 2026-04-18·v1.0.0·Initial import from site-health-check·automated