Semantic elements tell the browser and people what the content means. Non-semantic elements just group content without meaning.
Semantic vs non-semantic elements in HTML
<semantic-element>Content</semantic-element> <div>Content</div>
Semantic elements have names that describe their purpose, like <header> or <article>.
Non-semantic elements like <div> and <span> do not describe their content.
<header> <h1>Welcome to my website</h1> </header>
<div> <h1>Welcome to my website</h1> </div>
<nav> element clearly shows this is a navigation menu.<nav> <ul> <li><a href="#">Home</a></li> <li><a href="#">About</a></li> </ul> </nav>
<span> is a non-semantic inline element used to style or group text.<span>Some text</span>
This page shows semantic elements with blue borders and non-semantic divs with red dashed borders. You can see how semantic tags describe the page parts clearly.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Semantic vs Non-semantic</title> <style> body { font-family: Arial, sans-serif; margin: 2rem; line-height: 1.5; } header, nav, main, footer { border: 2px solid #4a90e2; padding: 1rem; margin-bottom: 1rem; border-radius: 0.5rem; background-color: #e8f0fe; } div { border: 2px dashed #d9534f; padding: 1rem; margin-bottom: 1rem; border-radius: 0.5rem; background-color: #fdecea; } </style> </head> <body> <header> <h1>Semantic Header</h1> </header> <div> <h1>Non-semantic Div</h1> </div> <nav> <ul> <li><a href="#">Home</a></li> <li><a href="#">Contact</a></li> </ul> </nav> <div> <p>This is just a generic container.</p> </div> <footer> <p>Semantic Footer</p> </footer> </body> </html>
Using semantic elements helps screen readers understand your page better.
Search engines use semantic tags to rank your page more accurately.
Non-semantic elements are still useful for styling and layout but should be used wisely.
Semantic elements describe the meaning of content, making pages clearer.
Non-semantic elements only group content without meaning.
Use semantic tags to improve accessibility, SEO, and code clarity.
Practice
Solution
Step 1: Understand semantic elements
Semantic elements clearly describe their meaning, like<article>which represents an independent piece of content.Step 2: Identify non-semantic elements
<div>and<span>are generic containers without meaning.<b>is a presentational element without semantic meaning.Final Answer:
<article> -> Option AQuick Check:
Semantic element = <article> [OK]
- Confusing <div> as semantic
- Thinking <span> is semantic
- Thinking <b> is semantic
Solution
Step 1: Recognize semantic header tag
<header>is the semantic tag for page or section headers.Step 2: Differentiate from
<head><head>contains metadata, not visible content.<heading>is not a valid HTML tag.Final Answer:
<header>Welcome</header> -> Option CQuick Check:
Semantic header = <header> [OK]
- Using <head> for visible content
- Writing invalid <heading> tag
- Confusing metadata with page content
<div><h1>Title</h1><p>Paragraph</p></div>
Choose the best description.
Solution
Step 1: Understand
<div>usage<div>is a non-semantic container that can hold any flow content including headings and paragraphs.Step 2: Check rendering of heading and paragraph
The<h1>will display as a large bold heading, and<p>as a paragraph below it, both visible inside the container.Final Answer:
A heading 'Title' and a paragraph 'Paragraph' inside a generic container -> Option BQuick Check:
Non-semantic container shows all content [OK]
- Thinking div restricts content types
- Assuming heading is hidden
- Believing invalid nesting error occurs
<section><div>Content</section></div>
Solution
Step 1: Check tag nesting order
The<div>opens inside<section>but closes after</section>, breaking proper nesting.Step 2: Understand correct nesting rules
Tags must close in reverse order of opening. Here,<div>should close before</section>.Final Answer:
The <div> tag is not closed before </section> -> Option DQuick Check:
Proper nesting = close inner tags first [OK]
- Ignoring tag closing order
- Thinking div can't be inside section
- Missing closing tags
<div><div>Main content</div><div>Footer info</div></div>
Solution
Step 1: Identify semantic tags for main content and footer
<main>is the semantic tag for main page content, and<footer>is for footer information.Step 2: Replace non-semantic
Changing the outer<div>with semantic tags<div>to<main>and the footer<div>to<footer>improves meaning and accessibility.Final Answer:
Replace outer <div> with <main> and inner footer <div> with <footer> -> Option AQuick Check:
Use <main> and <footer> for better semantics [OK]
- Using <article> instead of <main> for main content
- Replacing all divs with <section> unnecessarily
- Ignoring semantic improvements
Ready to prove it?
Pass the test and this pattern moves unknown
