Les 5: Semantische HTML
Home โ€บHTML-track โ€บLes 5

๐Ÿ—๏ธ Semantische HTML

โฑ Geschatte leestijd: 20 minuten ยท 7 stappen

Tot nu toe heb je <div> en <span> misschien gezien als universele containers. Maar HTML5 heeft speciale tags die betekenis geven aan de structuur van je pagina. Zoekmachines, schermlezers en andere ontwikkelaars begrijpen je code dan beter.

1 Wat is semantisch?

Semantisch betekent "met betekenis". Vergelijk deze twee stukken code โ€” ze zien er in de browser identiek uit, maar de eerste versie vertelt niets over de rol van de inhoud:

โœ— Niet-semantisch
<div id="header">
  <div class="nav">...</div>
</div>
<div id="main">
  <div class="article">...</div>
</div>
<div id="footer">...</div>
โœ“ Semantisch
<header>
  <nav>...</nav>
</header>
<main>
  <article>...</article>
</main>
<footer>...</footer>
Zoekmachines begrijpen welke tekst de belangrijkste inhoud is vs. navigatie.
Schermlezers kunnen blinde gebruikers direct naar de <main>-inhoud laten springen.
Andere developers snappen jouw code sneller โ€” en jijzelf ook over 6 maanden.

2 De hoofd-structuur-tags

Wat betekent dit?

<header> โ€” De koptekst van de pagina of een sectie. Bevat meestal een logo, sitetitel en navigatie. Er kan er meer dan รฉรฉn zijn (bijv. ook een artikel-header).

Wat betekent dit?

<nav> โ€” Een blok met navigatielinks. Gebruik het voor het hoofdmenu, breadcrumbs of paginering. Niet elke groep links hoeft in een <nav>.

Wat betekent dit?

<main> โ€” De unieke hoofdinhoud van de pagina. Gebruik het maar รฉรฉn keer per pagina. Navigatie, header en footer horen er niet in.

Wat betekent dit?

<footer> โ€” De voettekst van de pagina of sectie. Bevat meestal copyright, contactinfo en aanvullende links.

3 Inhoud-tags: <section>, <article> en <aside>

Wat betekent dit?

<section> โ€” Een thematisch samenhangende groep inhoud, gewoonlijk met een eigen koptekst. Gebruik het voor "Diensten", "Team", "Contact" op een landingspagina.

Wat betekent dit?

<article> โ€” Zelfstandige, herbruikbare inhoud die je los zou kunnen publiceren: een blogpost, nieuwsartikel, forumpost of productkaart. Stel jezelf af: "Heeft dit zin als ik het kopieer naar een RSS-feed?" Ja โ†’ <article>.

Wat betekent dit?

<aside> โ€” Zijdelingse inhoud die losjes gerelateerd is aan de hoofdinhoud: een sidebar, tip-box, gerelateerde links of een citaat.

Voorbeeld: blogpagina-structuur
<main>
  <article>
    <header>
      <h1>Mijn eerste HTML-pagina</h1>
      <p>Gepubliceerd op 20 mei 2026</p>
    </header>
    <section>
      <h2>Wat is HTML?</h2>
      <p>HTML staat voor...</p>
    </section>
    <section>
      <h2>Waarom HTML leren?</h2>
      <p>Omdat...</p>
    </section>
  </article>

  <aside>
    <h2>Gerelateerde lessen</h2>
    <ul>
      <li><a href="/html-2">Tekst en links</a></li>
    </ul>
  </aside>
</main>

4 Wanneer gebruik je <div>?

<div> (division) heeft geen semantische betekenis โ€” het is puur een container voor lay-out of groepering. Gebruik het als er geen passende semantische tag bestaat voor wat je wil doen.

โœ“ Goed gebruik van <div>

Een wrapper om meerdere elementen samen te stylen met CSS (bijv. een kaartje met achtergrondkleur en afgeronde hoeken).

โœ— Slecht gebruik van <div>

<div class="nav"> voor je navigatie, terwijl <nav> precies dit doet.

๐Ÿ’ก Vuistregel: zoek eerst of er een semantische tag bestaat. Alleen als er geen goede match is, gebruik je <div>. Hetzelfde geldt voor <span> (de inline-versie van <div>).

5 Oefening 1: Structureer een pagina

Opdracht:

Herschrijf de onderstaande starter-code zodat hij semantisch correct is. Vervang de <div>-containers door de juiste semantische tags.

โœ“ <header> aanwezig

โœ“ <nav> aanwezig

โœ“ <main> aanwezig

โœ“ <footer> aanwezig

editor
Live preview

6 Oefening 2: Blogartikel structuur

Opdracht:

Maak een blogpagina-structuur met een artikel en sidebar.

โœ“ <article> met een <header> en minstens รฉรฉn <section>

โœ“ <aside> naast het artikel

editor
Live preview

7 Eindopdracht: Volledige portfolio-pagina

Bouw een volledige portfolio-pagina met correcte semantische structuur:

โœ“ <header> met je naam en <nav>

โœ“ <main> met minstens 2 <section>s (bijv. "Over mij" en "Projecten")

โœ“ Minstens รฉรฉn <article> voor een project

โœ“ <aside> met contactgegevens of links

โœ“ <footer> met copyright

editor
Live preview
๐Ÿ“„ Volledig voorbeeld: portfolio.html
<!DOCTYPE html>
<html lang="nl">
<head>
  <meta charset="UTF-8">
  <title>Portfolio โ€” Jouw Naam</title>
</head>
<body>

  <header>
    <h1>Jouw Naam</h1>
    <nav>
      <a href="#over">Over mij</a> |
      <a href="#projecten">Projecten</a> |
      <a href="#contact">Contact</a>
    </nav>
  </header>

  <main>
    <section id="over">
      <h2>Over mij</h2>
      <p>Ik ben een MBO Software Developer student...</p>
    </section>

    <section id="projecten">
      <h2>Projecten</h2>

      <article>
        <header>
          <h3>Mijn eerste website</h3>
        </header>
        <p>Een eenvoudige HTML-pagina gebouwd in de HTML-track.</p>
      </article>

      <article>
        <header>
          <h3>Symfony-webshop</h3>
        </header>
        <p>Een webshop gebouwd met Symfony en Doctrine.</p>
      </article>
    </section>
  </main>

  <aside>
    <h2>Contact</h2>
    <p>Email: naam@voorbeeld.nl</p>
    <a href="https://github.com" target="_blank">GitHub</a>
  </aside>

  <footer>
    <p>&copy; 2026 Jouw Naam</p>
  </footer>

</body>
</html>