Menu

Semantisches HTML: Tags, Seitenstruktur, Barrierefreiheit

Semantisches HTML heißt, Tags danach auszuwählen, was der Inhalt ist, nicht wie er aussieht. Hier lernst du die semantischen Layout-Tags (header, nav, main, article, aside, footer), was sie Screenreadern und Suchmaschinen bringen und wie du deine Seitenstruktur prüfst.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

Was semantisches HTML ist

Semantisches HTML heißt, jedes Tag danach auszuwählen, was der Inhalt ist: Navigation kommt in <nav>, der Hauptinhalt in <main>, ein Blogbeitrag in <article>. Die Tags sehen aus wie einfache Kästen, aber sie sagen dem Browser, Screenreadern und Suchmaschinen, was jeder Teil der Seite tut. Hier ist eine ganze Seite aus den semantischen Layout-Tags, jedes umrandet und beschriftet:

Lösch das <style>-Element, und die Seite sieht aus wie reiner Text, aber die Struktur ist immer noch da, für jeden, der den Code liest, und für Software, die ihn liest, ohne auf die Pixel zu schauen.

Die semantischen Layout-Tags

TagNimm es fürLandmark für Screenreader
<header>Die Einleitung der Seite oder eines Artikels: Logo, Titel, Autorenzeilebanner (nur wenn es nicht in article, aside, main, nav oder section steht)
<nav>Einen Block mit wichtigen Navigationslinksnavigation
<main>Den Inhalt, der nur auf dieser Seite steht, einmal pro Seitemain
<article>Einen eigenständigen Beitrag, der für sich allein Sinn ergibt: ein Post, ein Kommentar, eine Produktkartestandardmäßig keine
<section>Eine thematische Gruppe von Inhalten mit eigener Überschriftregion, nur wenn es einen zugänglichen Namen hat
<aside>Verwandten Inhalt neben dem Hauptfluss: eine Seitenleiste, eine Notizcomplementary
<footer>Abschließende Infos der Seite oder eines Artikels: Copyright, Autor, Linkscontentinfo (nur auf Seitenebene)

Jedes Tag hat eine eigene Seite mit mehr Details: header, nav, section und footer. Diese Seite zeigt, wie sie zusammenpassen.

Warum nicht einfach div

Eine Seite nur aus <div>-Elementen kann genauso aussehen wie eine semantische. Der Unterschied liegt darin, was das Markup aussagt. Drück die Buttons, um in jeder Version die Elemente zu umranden, die Bedeutung tragen:

Die div-Version findet 0, die semantische Version findet 4. Genau das sehen Hilfstechnologien: Ein Screenreader-Nutzer kann auf der semantischen Seite direkt zur Navigation oder zum Hauptinhalt springen und muss sich auf der div-Seite durch alles hindurchlesen. Klassennamen wie class="nav" bedeuten dem Browser nichts.

<div> bleibt die richtige Wahl für Kästen, die nur für Styling oder Layout existieren, wie der Flex-Wrapper .cols im ersten Beispiel.

main, article und aside

<main> umschließt, was nur auf dieser Seite steht, und kommt einmal vor. Darin markiert <article> Inhalt, der für sich allein auch auf eine andere Website kopiert Sinn ergäbe, und <aside> markiert Inhalt, der dazugehört, aber entfernt werden könnte, ohne den Artikel kaputt zu machen:

Der Artikel hat seinen eigenen <header> und <footer>. Sie sind nicht auf die Seitenebene beschränkt: Jedes leitet seinen nächstgelegenen Artikel oder Abschnitt ein oder schließt ihn ab. Das Element <time datetime> gibt das Datum maschinenlesbar an und zeigt es trotzdem in lesbarer Form.

Prüf die Gliederung deiner Überschriften

Überschriften sind die andere Hälfte der Struktur. Screenreader-Nutzer bewegen sich oft von Überschrift zu Überschrift durch eine Seite, deshalb sollten die Ebenen sich wie ein Inhaltsverzeichnis ohne übersprungene Ebenen lesen. Dieses Skript gibt die Gliederung der Seite aus, in der es läuft:

Das h4 unter „Brewing“ überspringt eine Ebene. Ändere es in h3, und die Gliederung liest sich sauber. Wähle Überschriftenebenen nach der Struktur und ändere ihre Größe mit CSS, wenn du sie größer oder kleiner willst.

Weitere semantische Tags

Bei Semantik geht es nicht nur um Layout. Auch diese Tags auf Textebene tragen Bedeutung:

TagBedeutung
<strong>Wichtiger Text (standardmäßig fett)
<em>Betonung (standardmäßig kursiv)
<figure> und <figcaption>Ein Bild, Diagramm oder Codebeispiel mit seiner Bildunterschrift
<time datetime="...">Ein Datum oder eine Uhrzeit in maschinenlesbarer Form
<address>Kontaktdaten des Autors der Seite oder des Artikels
<mark>Hervorgehobener Text, etwa ein Suchtreffer
<abbr title="...">Eine Abkürzung mit ihrer vollen Form
<button>Etwas, das eine Aktion ausführt

Fahr mit der Maus über die Abkürzung „W3C“, um ihre volle Form in einem Tooltip zu sehen.

Häufige Fehler

  • Ein Tag wegen seines Aussehens verwenden. <blockquote> ist für Zitate, nicht für Einrückungen; <h3> ist für eine Überschriftenebene, nicht für mittelgroßen fetten Text. Style mit CSS.
  • Alles in <section> packen. Ein Abschnitt sollte eine Überschrift und ein Thema haben. Wenn du einen Kasten zum Stylen brauchst, nimm <div>.
  • Mehr als ein sichtbares <main>. Behalte eines pro Seite und verschachtle es nie in <article>, <aside>, <header>, <nav> oder <footer>.
  • Jede Linkliste in <nav> setzen. Heb es dir für wichtige Navigationsblöcke auf, etwa das Menü der Website oder ein Inhaltsverzeichnis. Ein paar Links im Footer brauchen keins.
  • Anklickbare <div>-Elemente. Ein <div onclick> ist per Tastatur nicht erreichbar. Nimm <button> für Aktionen und <a href> für Navigation.

Häufig gestellte Fragen

Was ist semantisches HTML?

Semantisches HTML ist Markup, bei dem jedes Tag die Bedeutung seines Inhalts beschreibt: <nav> für Navigation, <article> für einen eigenständigen Beitrag, <button> für einen Button. Browser, Screenreader und Suchmaschinen verstehen die Seite dann, ohne aus Klassennamen oder Styles raten zu müssen.

Welche semantischen Tags gibt es in HTML?

Die Layout-Tags sind <header>, <nav>, <main>, <article>, <section>, <aside> und <footer>. Weitere häufige semantische Tags sind <figure>, <figcaption>, <time>, <address>, <strong>, <em> und die Überschriften <h1> bis <h6>.

Ist div ein semantisches Element?

Nein. <div> hat keine eigene Bedeutung; es ist ein allgemeiner Kasten für Styling und Layout. Nimm es, wenn kein semantisches Tag passt, und nimm <header>, <main>, <nav> und die anderen, wenn eines passt.

Wofür ist das aside-Tag da?

<aside> enthält Inhalt, der mit dem Hauptinhalt zusammenhängt, aber nicht zu seinem Fluss gehört: eine Seitenleiste, einen Kasten mit verwandten Links, eine Glossar-Notiz oder ein hervorgehobenes Zitat. Auf Seitenebene führen Screenreader es als ergänzende Landmark (complementary) auf.

Wie viele main-Elemente darf eine Seite haben?

Ein sichtbares <main> pro Seite. Es umschließt den Inhalt, der nur auf dieser Seite steht, und sollte nicht in <header>, <nav>, <article>, <aside> oder <footer> stehen.

Hilft semantisches HTML bei SEO?

Es hilft Suchmaschinen zu verstehen, welcher Teil der Seite der Hauptinhalt ist, welcher die Navigation und wie Überschriften zusammenhängen. Allein ist es keine Abkürzung zu besseren Rankings, aber es nimmt das Raten weg und verbessert die Barrierefreiheit, was sich ohnehin lohnt.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S