Analytics choices

Analytics is optional. If allowed, Google measures public pages, navigation, recognized acquisition sources and engagement, including tool and playground use. The site excludes entered code, search terms and form contents from its Analytics events. You can withdraw here. This choice does not change advertising consent.

Read about Analytics and your information.

HTML Semantic Elements

Learn how to create meaningful, accessible web structures using HTML5 semantic elements.

Quick Answer

Why use semantic HTML?

Semantic HTML provides meaning to web content through descriptive tags like <article>, <nav>, and <footer> instead of generic <div> elements. Benefits include clearer content structure for search engines, better accessibility for screen readers, easier code maintenance, and clearer document structure for developers and browsers.

What are Semantic Elements?

Semantic HTML elements clearly describe their meaning in a human and machine-readable way. Unlike generic elements like <div> and <span>, semantic elements tell browsers, screen readers, and search engines what content they contain and how it relates to the overall document structure.

💡 Benefits of Semantic HTML:
  • Accessibility: Screen readers can navigate content more effectively
  • SEO: Search engines better understand your content structure
  • Maintainability: Code is more readable and easier to maintain
  • Standards: Follows modern web development best practices
  • Future-proof: Works well with emerging technologies

Semantic vs Non-Semantic Elements

Compare how semantic and non-semantic HTML structures differ in meaning and accessibility.

Example: Semantic vs Non-Semantic

<!DOCTYPE html>
<html>
<head>
    <title>Semantic vs Non-Semantic - HTML Free Codes</title>
    <style>
        .comparison {
            display: flex;
            gap: 20px;
            margin: 20px 0;
        }

        .example-box {
            flex: 1;
            padding: 15px;
            border: 2px solid #ddd;
            border-radius: 8px;
        }

        .non-semantic {
            border-color: #e74c3c;
            background: #fdedec;
        }

        .semantic {
            border-color: #27ae60;
            background: #eafaf1;
        }

        .example-title {
            font-weight: bold;
            margin-bottom: 10px;
            padding: 5px 10px;
            border-radius: 4px;
        }

        .non-semantic .example-title {
            background: #e74c3c;
            color: #101521;
        }

        .semantic .example-title {
            background: #27ae60;
            color: #101521;
        }
    </style>
</head>
<body>
    <h2>HTML Free Codes: Semantic Structure Comparison</h2>

    <div class="comparison">
        <!-- Non-Semantic Example -->
        <div class="example-box non-semantic">
            <div class="example-title"> Non-Semantic (Avoid)</div>
            <div id="top-section">
                <div id="site-title">HTML Free Codes</div>
                <div id="menu">
                    <div>Home</div>
                    <div>Tutorials</div>
                    <div>Contact</div>
                </div>
            </div>

            <div id="content-area">
                <div id="main-content">
                    <div class="post">
                        <div class="post-title">Learn HTML</div>
                        <div class="post-content">HTML tutorial content here...</div>
                    </div>
                </div>

                <div id="sidebar">
                    <div class="widget">Recent Posts</div>
                    <div class="widget">Categories</div>
                </div>
            </div>

            <div id="bottom-section">
                <div>© 2024 www.htmlfreecodes.com</div>
            </div>
        </div>

        <!-- Semantic Example -->
        <div class="example-box semantic">
            <div class="example-title"> Semantic (Recommended)</div>
            <header>
                <h1>HTML Free Codes</h1>
                <nav>
                    <ul>
                        <li>Home</li>
                        <li>Tutorials</li>
                        <li>Contact</li>
                    </ul>
                </nav>
            </header>

            <main>
                <article>
                    <h2>Learn HTML</h2>
                    <p>HTML tutorial content here...</p>
                </article>
            </main>

            <aside>
                <section>
                    <h3>Recent Posts</h3>
                </section>
                <section>
                    <h3>Categories</h3>
                </section>
            </aside>

            <footer>
                <p>© 2024 www.htmlfreecodes.com</p>
            </footer>
        </div>
    </div>

    <p>Learn more about semantic HTML at <strong>www.htmlfreecodes.com</strong>!</p>
</body>
</html>

Result:

HTML Free Codes: Semantic Structure Comparison

❌ Non-Semantic (Avoid)
<div id="top-section">
  <div id="site-title">HTML Free Codes</div>
  <div id="menu">...</div>
</div>
<div id="content-area">
  <div id="main-content">...</div>
  <div id="sidebar">...</div>
</div>
<div id="bottom-section">...</div>

No semantic meaning for assistive technologies

✅ Semantic (Recommended)
<header>
  <h1>HTML Free Codes</h1>
  <nav>...</nav>
</header>
<main>
  <article>...</article>
</main>
<aside>...</aside>
<footer>...</footer>

Clear semantic meaning for all users and technologies

Learn more about semantic HTML at www.htmlfreecodes.com!

Main Semantic Elements

HTML5 introduced several semantic elements that define different parts of a web page structure.

Example: Complete Semantic Structure

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Semantic Structure - HTML Free Codes</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            line-height: 1.6;
            margin: 0;
            padding: 0;
        }

        header {
            background: #2c3e50;
            color: white;
            padding: 1rem;
        }

        header h1 {
            margin: 0;
        }

        nav {
            background: #34495e;
            padding: 0.5rem;
        }

        nav ul {
            list-style: none;
            margin: 0;
            padding: 0;
            display: flex;
        }

        nav li {
            margin-right: 20px;
        }

        nav a {
            color: white;
            text-decoration: none;
        }

        .content-wrapper {
            display: flex;
            max-width: 1200px;
            margin: 0 auto;
            padding: 20px;
            gap: 20px;
        }

        main {
            flex: 2;
        }

        aside {
            flex: 1;
            background: #ecf0f1;
            padding: 20px;
            border-radius: 5px;
        }

        article {
            background: white;
            padding: 20px;
            margin-bottom: 20px;
            border: 1px solid #ddd;
            border-radius: 5px;
        }

        section {
            margin-bottom: 20px;
        }

        footer {
            background: #2c3e50;
            color: white;
            text-align: center;
            padding: 20px;
            margin-top: 40px;
        }

        .semantic-highlight {
            background: #f39c12;
            color: #101521;
            padding: 2px 6px;
            border-radius: 3px;
            font-weight: bold;
        }
        footer a {
            color: white;
        }
    </style>
</head>
<body>
    <!-- Page Header -->
    <header>
        <h1>HTML Free Codes</h1>
        <p>Learn Web Development with Free Tutorials</p>

        <!-- Main Navigation -->
        <nav>
            <ul>
                <li><a href="https://www.htmlfreecodes.com">Home</a></li>
                <li><a href="https://www.htmlfreecodes.com/tutorials">Tutorials</a></li>
                <li><a href="https://www.htmlfreecodes.com/examples">Examples</a></li>
                <li><a href="https://www.htmlfreecodes.com/contact">Contact</a></li>
            </ul>
        </nav>
    </header>

    <div class="content-wrapper">
        <!-- Main Content Area -->
        <main>
            <!-- Individual Article -->
            <article>
                <header>
                    <h2>Understanding HTML Semantic Elements</h2>
                    <p><time datetime="2024-01-15">Published: January 15, 2024</time></p>
                </header>

                <section>
                    <h3>Introduction to Semantic HTML</h3>
                    <p>Semantic HTML elements like <span class="semantic-highlight">&lt;header&gt;</span>,
                    <span class="semantic-highlight">&lt;nav&gt;</span>, and
                    <span class="semantic-highlight">&lt;main&gt;</span> provide meaning to your content structure.</p>
                </section>

                <section>
                    <h3>Benefits of Semantic Elements</h3>
                    <p>Using semantic HTML improves accessibility, SEO, and code maintainability.
                    Screen readers can navigate your content more effectively, and search engines
                    better understand your page structure.</p>
                </section>

                <footer>
                    <p>Learn more at <a href="https://www.htmlfreecodes.com">www.htmlfreecodes.com</a></p>
                </footer>
            </article>

            <!-- Another Article -->
            <article>
                <header>
                    <h2>Getting Started with HTML Free Codes</h2>
                    <p><time datetime="2024-01-10">Published: January 10, 2024</time></p>
                </header>

                <section>
                    <h3>Why Choose HTML Free Codes?</h3>
                    <p>Our platform offers comprehensive, free tutorials that teach you modern web development
                    practices including proper use of semantic HTML elements.</p>
                </section>
            </article>
        </main>

        <!-- Sidebar Content -->
        <aside>
            <section>
                <h3>Quick Links</h3>
                <ul>
                    <li><a href="https://www.htmlfreecodes.com/html">HTML Tutorials</a></li>
                    <li><a href="https://www.htmlfreecodes.com/css">CSS Tutorials</a></li>
                    <li><a href="https://www.htmlfreecodes.com/javascript">JavaScript Tutorials</a></li>
                </ul>
            </section>

            <section>
                <h3>Latest Updates</h3>
                <ul>
                    <li>New HTML Semantic Elements Guide</li>
                    <li>CSS Grid Layout Tutorial</li>
                    <li>JavaScript ES6 Features</li>
                </ul>
            </section>

            <section>
                <h3>About HTML Free Codes</h3>
                <p>We provide free, high-quality web development tutorials to help you learn HTML, CSS, and JavaScript.</p>
            </section>
        </aside>
    </div>

    <!-- Page Footer -->
    <footer>
        <p>© 2024 HTML Free Codes. All rights reserved.</p>
        <p>Visit us at <a href="https://www.htmlfreecodes.com" style="color: white;">www.htmlfreecodes.com</a></p>
    </footer>
</body>
</html>

Result:

HTML Free Codes

Learn Web Development with Free Tutorials

Understanding HTML Semantic Elements

Introduction to Semantic HTML

Semantic HTML elements like <header>, <nav>, and <main> provide meaning to your content structure.

Benefits of Semantic Elements

Using semantic HTML improves accessibility, SEO, and code maintainability.

Learn more at www.htmlfreecodes.com

© 2024 HTML Free Codes. All rights reserved.

Visit us at www.htmlfreecodes.com

Semantic Elements Reference

Here's a comprehensive guide to HTML5 semantic elements and their proper usage:

Semantic Elements Guide

📄 <header>

Purpose: Introductory content for a page or section

Contains: Headings, logos, navigation, search forms

Example: Site header, article header

🧭 <nav>

Purpose: Navigation links

Contains: Menus, breadcrumbs, table of contents

Example: Main menu, footer links

📰 <main>

Purpose: Primary content of the page

Contains: The main topic or functionality

Example: Only one per page, excludes header/footer

📝 <article>

Purpose: Self-contained, reusable content

Contains: Blog posts, news articles, comments

Example: Content that makes sense alone

📋 <section>

Purpose: Thematic grouping of content

Contains: Related content with a heading

Example: Chapters, tabbed content

📤 <aside>

Purpose: Supplementary content

Contains: Sidebars, pull quotes, related links

Example: Content related but not essential

🦶 <footer>

Purpose: Closing content for a page or section

Contains: Copyright, contact info, related links

Example: Site footer, article footer

🏷️ <figure>

Purpose: Self-contained content with optional caption

Contains: Images, diagrams, code listings

Example: Images with captions

⏰ <time>

Purpose: Date and time information

Contains: Specific dates, times, durations

Example: Publication dates, event times

Semantic HTML Best Practices

🎯 Semantic HTML Best Practices

  • Use one <main> per page: Each page should have exactly one main element
  • Nest semantic elements logically: Articles can contain sections, but not vice versa
  • Use headings hierarchically: Don't skip heading levels (h1, h2, h3...)
  • Provide meaningful content: Every semantic element should have a clear purpose
  • Use <div> for styling only: When you need containers without semantic meaning
  • Test with screen readers: Verify your semantic structure makes sense
  • Validate your HTML: Ensure proper nesting and structure

⚠️ Common Semantic Mistakes

  • Using multiple <main> elements on one page
  • Misusing <section> as a generic container
  • Nesting <article> and <section> incorrectly
  • Using semantic elements purely for styling
  • Forgetting to provide headings for sections
  • Overusing <div> when semantic elements are appropriate
  • Not considering the document outline

🧠 Test Your Knowledge

Question 1: What is the recommended number of visible main landmarks for a page with primary content?

Question 2: Which element is best for a blog post?

Question 3: What is the purpose of the <nav> element?

Question 4: Which element is appropriate for sidebar content?

Question 5: What's the main benefit of semantic HTML?

Additional semantic-element examples

HTML Semantic Elements

Employ contextually meaningful markup conveying content purpose and structural significance

Quick Answer

What are HTML semantic elements?

Semantic HTML elements clearly describe their meaning to both browsers and developers. Examples include <header>, <nav>, <main>, <article>, <section>, <aside>, and <footer>. Using semantic elements improves SEO, accessibility for screen readers, and code maintainability compared to generic <div> tags.

Semantic tags communicate explicit meaning benefiting both rendering engines and development teams. These elements enhance markup legibility, assistive technology compatibility, and search optimization through purposeful document structuring.

What are Semantic Elements?

A semantic element clearly describes its meaning in a human- and machine-readable way.

Examples

Non-semantic elements: <div> and <span> - Tells nothing about its content.

Semantic elements: <article>, <nav>, <header>, <footer> - Clearly defines its content.

Why Use Semantic HTML?

Benefits of Semantic HTML

  • Accessibility: Screen readers can better navigate your page
  • SEO: Search engines understand your content structure better
  • Readability: Developers can understand the code more easily
  • Maintainability: Easier to update and maintain code
  • Consistency: Standard elements work the same way everywhere

HTML Semantic Elements

Here are the most commonly used semantic elements in HTML5:

<header>
<nav>
<aside>
<main>
<article>
<section>
<footer>

The <article> Element

The <article> element specifies independent, self-contained content. An article should make sense on its own and be distributable independently from the rest of the site.

Example - Blog Post Article

<article
  >
    <h2>Getting Started with HTML</h2>
    <p
    >Published on <time datetime="2025-01-15">January 15, 2025</time></p
  >
    <p>HTML is the standard markup language for creating web pages...</p>
    <p>In this tutorial, you'll learn the basics of HTML...</p>
</article
>

Common Uses

  • Blog posts
  • News articles
  • Forum posts
  • Product cards
  • User comments

The <section> Element

The <section> element defines a thematic grouping of content, typically with a heading. A section groups related content together.

Example - Page Sections

<section
  >
    <h2>Introduction</h2>
    <p>Welcome to our website...</p>
</section
>

<section>
    <h2>Our Services</h2>
    <p>We offer the following services...</p>
</section>

<section
  >
    <h2>Contact Us</h2>
    <p>Get in touch with our team...</p>
</section
>

The <aside> Element

The <aside> element defines content aside from the main content. It should be indirectly related to the surrounding content.

Example - Sidebar Content

<article
  >
    <h2>HTML Tutorial</h2>
    <p>HTML is the foundation of web development...</p>

    <aside>
        <h3>Related Topics</h3>
        <ul>
            <li>CSS Styling</li>
            <li>JavaScript Basics</li>
            <li>Web Accessibility</li>
        </ul>
    </aside>
</article
>

Common Uses

  • Sidebars
  • Pull quotes
  • Advertisements
  • Related links
  • Glossary definitions

The <main> Element

The <main> element specifies the main content of a document. The content should be unique to the document and not repeated across pages.

Example - Main Content

<body
  >
    <header>
        <h1>My Website</h1>
    </header>

    <nav
    >
        <!-- Navigation links -->
    </nav
  >

    <main>
        <h2>Welcome</h2>
        <p>This is the main content of the page...</p>
    </main>

    <footer>
        <p>Copyright information</p>
    </footer>
</body
>

Important: There should be only ONE <main> element per page, and it should not be inside <article>, <aside>, <header>, <footer>, or <nav> elements.

The <figure> and <figcaption> Elements

The <figure> element specifies self-contained content like images, diagrams, or code listings. The <figcaption> element defines a caption for the figure.

Example - Image with Caption

Unavailable or blocked: image “sunset.jpg”. Provide inline styles and scripts, embedded images or the missing HTML context. External requests and browser dialogs stay blocked.

<figure
  >
    <img
    src="sunset.jpg"
    alt="Beautiful sunset over the ocean"
  />
    <figcaption>Fig.1 - Sunset at the beach, 2025</figcaption>
</figure
>

Example - Code Listing with Caption

<figure>
    <pre><code>
function greet(name) {
    return "Hello, " + name;
}
    </code></pre>
    <figcaption>Listing 1: A simple greeting function in JavaScript</figcaption>
</figure>

The <time> Element

The <time> element represents a specific time or date. It can include the datetime attribute for machine-readable format.

Example - Date and Time

<p
  >The meeting is scheduled for <time datetime="2025-03-15T10:00">March 15, 2025 at 10:00 AM</time
  >.</p
>

<article
  >
    <h2>Blog Post Title</h2>
    <p
    >Published on <time datetime="2025-01-20">January 20, 2025</time></p
  >
</article
>

The <mark> Element

The <mark> element defines highlighted or marked text, typically for reference or notation purposes.

Example - Highlighted Text

<p>Search results for "HTML":</p>
<p><mark>HTML</mark> is the standard markup language for web pages.</p>
<p>Learn <mark>HTML</mark> to build your first website.</p>

Complete Semantic HTML Example

Example - Full Page Structure

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>My Blog</title>
</head>
<body>
    <header>
        <h1>My Personal Blog</h1>
        <nav>
            <ul>
                <li><a href="/">Home</a></li>
                <li><a href="/about">About</a></li>
                <li><a href="/blog">Blog</a></li>
            </ul>
        </nav>
    </header>

    <main>
        <article>
            <header>
                <h2>Understanding HTML Semantics</h2>
                <p>Published on <time datetime="2025-01-15">January 15, 2025</time></p>
            </header>

            <section>
                <h3>Introduction</h3>
                <p>Semantic HTML is important for accessibility...</p>
            </section>

            <section>
                <h3>Main Benefits</h3>
                <p>Using semantic elements provides several advantages...</p>
            </section>

            <footer>
                <p>Tags: HTML, Web Development, Semantics</p>
            </footer>
        </article>

        <aside>
            <h3>Related Articles</h3>
            <ul>
                <li><a href="#">HTML5 Features</a></li>
                <li><a href="#">CSS Best Practices</a></li>
            </ul>
        </aside>
    </main>

    <footer>
        <p>© 2025 My Blog. All rights reserved.</p>
    </footer>
</body>
</html>

Semantic vs Non-Semantic HTML

❌ Non-Semantic (Bad Practice)

Example - Using Only Divs

<div id="header"
  >
    <div id="logo">My Website</div
  >
    <div id="nav"
    >
        <div><a href="/">Home</a></div
    >
        <div><a href="/about">About</a></div
    >
    </div
  >
</div
>

<div id="main"
  >
    <div class="post"
    >
        <div class="title">Blog Post Title</div
    >
        <div class="content">Post content...</div
    >
    </div
  >
</div
>

<div id="footer"
  >
    <div>Copyright 2025</div>
</div
>

✅ Semantic (Good Practice)

Example - Using Semantic Elements

<header
  >
    <h1>My Website</h1>
    <nav
    >
        <a href="/">Home</a>
        <a
      href="/about"
      >About</a
    >
    </nav
  >
</header
>

<main>
    <article>
        <h2>Blog Post Title</h2>
        <p>Post content...</p>
    </article>
</main>

<footer
  >
    <p>Copyright 2025</p>
</footer
>

Semantic HTML Best Practices

✓ Guidelines

  • Always use semantic elements when appropriate instead of generic divs
  • Use only one <main> element per page
  • Use <article> for self-contained content
  • Use <section> to group related content with a heading
  • Reserve <nav> for major navigation blocks
  • Use <header> and <footer> for introductory and closing content
  • Use <aside> for tangentially related content
  • Combine semantic elements with proper heading hierarchy (h1-h6)
  • Add ARIA labels when you have multiple landmarks of the same type
  • Test your page structure with screen readers

Test Your Knowledge

5 practice questions are available. Choose Start practice to try them.

A smaller starting example and practical notes

Semantic elements describe a content role. A main region identifies primary content, nav groups major navigation, and article can contain a self-contained piece. These names help people and software understand the page when decoration is unavailable.

<header><p>Little projects</p></header>
<nav aria-label="Main"><a href="/examples/">Examples</a></nav>
<main>
  <h1>Build one useful thing</h1>
  <article><h2>Start with a card</h2><p>A small introduction to your work.</p></article>
</main>
<footer><p>Keep experimenting.</p></footer>

Choose headings as an outline

Use a main heading for the page and appropriate levels for its sections. Select levels based on the relationship between topics, then use CSS to choose their sizes. A section generally needs a useful heading. Do not add a section solely because you need a styling wrapper; a div can serve that purpose.

Landmarks should clarify the page

Keep one primary main region visible at a time. Label multiple navigation regions so their purposes are distinguishable. Use aside for related content that is separate from the main flow. Semantic tags do not automatically make every interaction accessible; labels, focus behavior and keyboard access still need to be checked.

Use native interactions

A button already supports keyboard activation and exposes its role. An anchor already supports navigation. Recreating those controls with a div adds work and often misses important behavior. Inspect the profile card and identify which elements express structure and which are purely decorative.