Discover how simple tags can open your website to everyone, including those who can't see the screen.
Why Semantic elements and screen readers in HTML? - Purpose & Use Cases
Imagine you build a website with only generic
Someone using a screen reader visits your site to understand the content.
The screen reader cannot tell which parts are headings, navigation, or main content because generic tags give no clues.
This makes the site confusing and frustrating for users who rely on assistive technology.
Using semantic elements like
Screen readers can then easily navigate and describe the page structure, improving accessibility.
<div>Welcome</div> <div>Menu</div> <div>Main content here</div>
<header>Welcome</header> <nav>Menu</nav> <main>Main content here</main>
Semantic elements let screen readers guide users smoothly through your site, making it usable for everyone.
A visually impaired person can jump directly to the main content or navigation using keyboard shortcuts because semantic tags define these areas clearly.
Semantic elements give meaning to page parts beyond just appearance.
They help screen readers understand and navigate content easily.
Using them improves accessibility and user experience for all.
Practice
Solution
Step 1: Understand the purpose of semantic elements
Semantic elements describe the role of content, helping screen readers know what is important.Step 2: Identify the element for main content
The<main>element specifically marks the main content unique to the page, guiding screen readers effectively.Final Answer:
<main> -> Option AQuick Check:
Main content uses <main> tag for screen readers [OK]
- Using <div> which has no semantic meaning
- Confusing <section> with main content
- Using <span> which is inline and non-semantic
Solution
Step 1: Recall the semantic tag for navigation
The<nav>element is the standard semantic tag for navigation menus.Step 2: Check syntax correctness
<nav> ... </nav>is valid HTML5 syntax recognized by screen readers.Final Answer:
<nav> ... </nav> -> Option AQuick Check:
Navigation uses <nav> tag [OK]
- Using non-existent <navigation> tag
- Confusing <menu> with <nav> (menu is different)
- Using <section> without role attribute
<header> <h1>Welcome</h1> </header> <main> <p>Hello world!</p> </main>
Solution
Step 1: Understand screen reader reading order
Screen readers read semantic elements in document order, starting with header content.Step 2: Identify first readable text
The<header>contains an<h1>with "Welcome", so it reads this first.Final Answer:
"Welcome" from the header's h1 -> Option DQuick Check:
Header content is read before main content [OK]
- Assuming main content reads first
- Thinking header is skipped
- Believing screen reader reads all at once
<div role='main'> <h2>Content</h2> </div>
Solution
Step 1: Check semantic correctness
Whilerole='main'can be used, the semantic<main>element is preferred for accessibility.Step 2: Understand best practice for screen readers
Using<main>provides built-in semantic meaning and better support than adivwith role.Final Answer:
Usingrole='main'on adivinstead of<main>-> Option BQuick Check:
Use <main> tag, not div with role [OK]
- Thinking role='main' on div is equal to <main>
- Ignoring heading level importance
- Adding tabindex unnecessarily
Solution
Step 1: Identify semantic element for complementary content
The<aside>element is designed for complementary content like sidebars.Step 2: Check ARIA attribute necessity
<aside>already implies complementary role, so extra ARIA roles are unnecessary and may confuse screen readers.Final Answer:
<aside> without extra ARIA attributes -> Option CQuick Check:
Use <aside> for complementary content [OK]
- Adding redundant ARIA roles to <aside>
- Using <section> or <div> without semantic meaning
- Confusing <nav> with sidebar role
Ready to prove it?
Pass the test and this pattern moves unknown
