Course topics

By WebNest Studio Engineering Team

HTML Tutorial

Semantic HTML Elements

Semantic HTML means choosing elements based on the meaning of the content they contain, not just how they happen to look. A <div> tells a browser and a screen reader nothing about what's inside it; a <nav> or <article> tells them exactly what role that content plays on the page.

Using semantic elements is not a stylistic preference — it directly affects accessibility (screen readers use these landmarks to let users jump between sections), SEO (search engines weigh semantically marked-up content differently), and long-term maintainability of your codebase.

Why it matters

A page built only from div elements looks fine but tells a screen reader or a search engine nothing about which part is the navigation, the main content or the footer. Semantic elements carry that meaning for free. They are the base of accessibility and SEO, and interviewers ask about them constantly.

Core Layout Semantic Elements

HTML5 introduced a set of elements specifically to describe common page regions, replacing the old convention of using generically named <div id="header"> or <div class="nav"> containers.

  • <header> — introductory content for a page or a section, often containing a logo, title, or navigation.
  • <nav> — a block of primary navigation links.
  • <main> — the single, unique main content of the document (only one per page).
  • <article> — a self-contained piece of content that would make sense on its own, like a blog post or news story.
  • <section> — a thematic grouping of content, usually with its own heading.
  • <footer> — closing content for a page or section, often containing copyright info or secondary links.

Semantic Elements vs. Generic div

A <div> is a generic container with no inherent meaning — it exists purely for grouping and styling. Semantic elements should be used whenever an appropriate one exists, and <div> should be reserved for cases where no semantic element fits (a purely visual wrapper for a CSS grid layout, for example). Overusing <div> for everything is sometimes called "divitis," and it strips a page of the structural meaning that assistive technology and search engines depend on.

How This Helps Accessibility and SEO

Screen readers build a navigable outline of a page using landmark elements like <nav>, <main>, and <header>, letting users skip directly to the content they want instead of tabbing through everything. Search engines similarly use semantic structure to better understand which part of a page is the primary content versus supporting material like navigation or a sidebar.

Example

A semantic page layout replacing generic divs

HTML
<body>
  <header>
    <h1>Webnest Studio</h1>
    <nav>
      <a href="/">Home</a>
      <a href="/blog">Blog</a>
    </nav>
  </header>

  <main>
    <article>
      <h2>Why Semantic HTML Matters</h2>
      <p>Semantic elements describe meaning, not just appearance.</p>
    </article>
  </main>

  <footer>
    <p>&copy; 2026 Webnest Studio</p>
  </footer>
</body>
Output
Renders a page with a header/navigation bar, a main article section with a heading and paragraph, and a footer — while also exposing header, nav, main, and footer as landmarks to screen readers.

Common Mistakes

  • Using <div> for every layout region instead of <header>, <nav>, <main>, and <footer>, which removes useful structure for accessibility tools.
  • Including more than one <main> element on a single page — there should only ever be one.
  • Using <section> purely for visual grouping without a meaningful heading, when a <div> would be more appropriate.
  • Nesting an <article> inside a <nav> or otherwise mismatching semantic elements with content that doesn't match their intended meaning.

Exercise

Replace each div with the semantic element that matches its role. Do not change the text.

Expected result: the page looks the same, but uses header, nav, main, article and footer.

HTML · starter code
<div class="header">
  <h1>WebNest Blog</h1>
  <div class="nav">
    <a href="/">Home</a>
    <a href="/posts">Posts</a>
  </div>
</div>

<div class="main">
  <div class="post">
    <h2>Why semantics matter</h2>
    <p>Semantic elements describe their content.</p>
  </div>
</div>

<div class="footer">
  <p>Copyright WebNest Studio</p>
</div>
Show hints
  • The block of links is navigation, and the self-contained blog post is an article.
  • A page should have one main element, wrapping the primary content.
Show solution
HTML · solution
<header>
  <h1>WebNest Blog</h1>
  <nav>
    <a href="/">Home</a>
    <a href="/posts">Posts</a>
  </nav>
</header>

<main>
  <article>
    <h2>Why semantics matter</h2>
    <p>Semantic elements describe their content.</p>
  </article>
</main>

<footer>
  <p>Copyright WebNest Studio</p>
</footer>

Quick quiz

1. Which element should wrap the primary content of a page, and appear only once?

  • A. <section>
  • B. <article>
  • C. <main>
  • D. <div>
Show answer

C. Assistive technology offers a shortcut that jumps straight to main.

2. Which element is right for a blog post that would still make sense on its own, outside the page?

  • A. <nav>
  • B. <aside>
  • C. <span>
  • D. <article>
Show answer

D. An article is self-contained content. An aside is content only loosely related to what surrounds it.

3. When is a div the correct choice?

  • A. When no semantic element fits and a container is needed only for styling or layout
  • B. For every block of content
  • C. For the main navigation
  • D. Never
Show answer

A. div and span have no meaning of their own, which is exactly what a styling hook needs.

Interview questions

What is semantic HTML and why does it matter?

Show answer

Semantic HTML means choosing elements for what the content is, not for how it looks: nav for navigation, button for an action, h1 to h6 for headings. It matters because screen readers use the elements to announce and navigate the page, search engines use them to understand it, and other developers can read the structure at a glance. It also brings built-in behaviour, such as keyboard support for buttons and links.

What is the difference between section, article and div?

Show answer

An article is a complete, self-contained piece of content that could be reused elsewhere, such as a blog post or a product card. A section is a thematic grouping of content within a page, normally with its own heading. A div has no meaning and is used purely as a container for styling or scripting when neither of the others applies.

Key Points to Remember

  • Semantic elements describe the meaning/role of content, not just its appearance.
  • Common landmarks: header, nav, main, article, section, footer.
  • Use <div> only when no semantic element fits the content's purpose.
  • Semantic structure directly improves screen reader navigation and SEO interpretation.

Practice in the playground

Write and run your own code for this topic, or start from the exercise or an example. Shows a live preview of your HTML, CSS and JavaScript. Your code for each topic is kept in this browser.

Run the examples

Change an input, predict the result, then compare it with the output. Explain why the result changes.

WebNest Studio

Written by

WebNest Studio Engineering Team

Practical lessons from developers working with Java, Python, React, databases and production systems.

Led by Vansh Duggal, Founder, WebNest Studio · Full-stack & software engineering