Semantic page structure
Landmarks, not just <div>s.
header, nav, main, article, section, aside, and footer give a page meaning that browsers, assistive tech, and search engines can all act on β for free.
Why landmarks beat a wall of divs
A page built from <div class="header"> and <div class="main"> looks identical to one built from <header> and <main> β to a sighted mouse user. But a <div> carries zero meaning. The semantic elements map to ARIA landmark roles: <header> is banner, <nav> is navigation, <main> is main, <aside> is complementary, <footer> is contentinfo. Screen-reader users jump between landmarks the way you skim with your eyes, so the tag you pick is the table of contents they hear.
The seven you actually use
<header> introduces a page or section (logo, title, intro). <nav> wraps a block of navigation links β not every link, just the primary sets. <main> is the unique, central content of the page; there is exactly one per document and it must not sit inside <article>, <aside>, <header>, or <footer>. <article> is a self-contained, independently distributable unit (a blog post, a comment, a product card). <section> is a thematic grouping that almost always has a heading. <aside> is tangential content β a sidebar, a pull quote, related links. <footer> closes a page or section with metadata, copyright, or links.
Article vs section β the test that settles it
The confusion is constant, and the rule is simple: would the chunk still make sense lifted out and republished on its own β in a feed, an email, an RSS reader? Then it is an <article>. Is it just one thematic slice of a larger whole, glued to its surroundings by a heading? Then it is a <section>. An <article> can contain <section>s (a post split into "Intro", "Body", "Conclusion"), and a <section> can contain <article>s (a "Latest posts" section listing several article cards). Never reach for <section> purely as a styling hook β that is what <div> is for.
Tags that describe their content
Two smaller elements round out a semantic page. <figure> with <figcaption> ties an image, chart, code listing, or diagram to a caption as one referenceable unit β the caption belongs to the figure, not just floating text beneath it. And <time> wraps a date or duration with a machine-readable datetime attribute, so "last June" or "3 days ago" still parses to an unambiguous ISO value for browsers, calendars, and crawlers.
Try it 4 examples
A full landmark skeleton
HTML+CSS+JSintroThe page renders as four distinct regions β a banner with the title and Primary nav, a two-column main holding the article and a complementary See also panel, and a contentinfo footer β and that structure is what a screen reader exposes as jumpable landmarks, not just a visual grid.