Skip to content

Semantic Structure

You have probably used <div> to group things — it is a neutral container with no meaning of its own. HTML also gives you a set of containers that do carry meaning. These are called semantic elements, and they map almost perfectly to the regions you already define in your Figma designs.

“Semantic” just means “meaningful”. When you use <header> instead of <div class="header">, the browser, screen readers, and search engines all understand what that region is — not just what it looks like.

HTML elementWhat it meansFigma equivalent
<header>Introductory content for a page or section — usually logo, site name, top navTop-level frame with branding
<nav>A block of navigation linksNavigation component frame
<main>The primary, unique content of the page (use once)Main content area frame
<section>A thematic group of content, typically with its own headingA section frame on your canvas
<article>A piece of content that makes sense on its own — a blog post, a card, a news itemA card or post component
<aside>Content tangentially related to the main content — a sidebar, a calloutA sidebar frame
<footer>Closing content — copyright, secondary links, contact infoBottom frame
  1. Screen readers use these landmarks to let users jump directly to <main> content, skipping the header and nav on every page. That is a massive usability improvement for blind users.
  2. Search engines understand that content in <article> is the primary text of the page and weight it accordingly.
  3. Your own team can read the HTML and understand the page layout at a glance, without decoding class names.

Look at how clearly each region maps to a named element. Try changing <section> to <div> — the page looks identical, but the meaning is lost. That invisible difference is what semantics is about.

Which element should wrap the primary, unique content of a page?
What is the key benefit of using <nav> instead of <div class="nav">?
Which element best wraps a blog post or a news article — content that makes sense on its own?
How many <main> elements should a page have?