Das Barrierefreiheitsstärkungsgesetz (BFSG) ist seit dem 28. Juni 2025 in Kraft. Alle betroffenen Unternehmen müssen ihre Websites WCAG 2.1 Level AA-konform gestalten.
Dieser Guide zeigt Ihnen konkrete technische Umsetzung mit Code-Beispielen, Testing-Tools und Best Practices für BFSG-konforme Websites.
Was bedeutet BFSG technisch?
Die rechtliche Grundlage
| Aspekt | Details |
|---|---|
| Gesetz | Barrierefreiheitsstärkungsgesetz (BFSG) |
| Inkrafttreten | 28. Juni 2025 |
| Standard | WCAG 2.1 Level AA |
| Strafen | Bis zu 100.000€ Bußgeld + Abmahnrisiko |
| Betroffen | Online-Shops, Websites, Web-Apps |
WCAG 2.1 Level AA: Die 4 Prinzipien (POUR)
Perceivable (Wahrnehmbar)
Inhalte müssen für alle Sinne zugänglich sein
Operable (Bedienbar)
Navigation ohne Maus möglich
Understandable (Verständlich)
Klare Sprache, konsistente Bedienung
Robust
Kompatibel mit assistiven Technologien
1. Semantisches HTML: Die Basis jeder barrierefreien Website
Problem: Div-Suppe ohne Struktur
<div class="header">
<div class="nav">
<div class="link">Home</div>
<div class="link">Über uns</div>
</div>
</div>
<div class="content">
<div class="article">
<div class="title">Überschrift</div>
<div class="text">Artikeltext...</div>
</div>
</div> <header>
<nav aria-label="Hauptnavigation">
<ul>
<li><a href="/">Home</a></li>
<li><a href="/ueber-uns">Über uns</a></li>
</ul>
</nav>
</header>
<main>
<article>
<h1>Artikel-Überschrift</h1>
<p>Artikeltext...</p>
</article>
</main>
<footer>
<p>© 2025 Wendermedia</p>
</footer> - Screen Reader erkennen Landmarks (
<main>,<nav>,<header>) - Nutzer können direkt zum Hauptinhalt springen
- Bessere SEO durch klare Struktur
- Konsistente User Experience
Überschriften-Hierarchie
<h1>Hauptüberschrift</h1>
<h3>Unterüberschrift</h3> <!-- h2 übersprungen! -->
<h2>Weitere Überschrift</h2> <!-- Falsche Reihenfolge --> <h1>Hauptüberschrift</h1>
<h2>Unterüberschrift Ebene 2</h2>
<h3>Unterüberschrift Ebene 3</h3>
<h3>Weitere Ebene 3</h3>
<h2>Weitere Ebene 2</h2> Genau eine h1 pro Seite. Logische Hierarchie ohne Sprünge (h1 → h2 → h3, nicht h1 → h3). Keine Überschriften aus rein optischen Gründen.
3. Barrierefreie Formulare
Label und Input-Verknüpfung
<div>Name:</div>
<input type="text" placeholder="Ihr Name">
<!-- Kein Label, Placeholder verschwindet! --> <label for="name">Name *</label>
<input type="text" id="name" name="name" required
aria-required="true" aria-describedby="name-hint">
<span id="name-hint" class="hint">
Bitte Vor- und Nachname eingeben
</span> Fehlermeldungen
<input type="email" style="border-color: red;">
<!-- Nur visuelle Fehleranzeige --> <label for="email">E-Mail-Adresse *</label>
<input type="email" id="email" name="email"
aria-invalid="true"
aria-describedby="email-error">
<span id="email-error" role="alert" class="error">
⚠️ Bitte geben Sie eine gültige E-Mail-Adresse ein
</span> Komplexes Formular-Beispiel
<form method="post" aria-labelledby="form-title">
<h2 id="form-title">Kontaktformular</h2>
<fieldset>
<legend>Persönliche Daten</legend>
<div class="form-group">
<label for="firstname">Vorname *</label>
<input type="text" id="firstname" name="firstname"
required aria-required="true" autocomplete="given-name">
</div>
<div class="form-group">
<label for="lastname">Nachname *</label>
<input type="text" id="lastname" name="lastname"
required aria-required="true" autocomplete="family-name">
</div>
</fieldset>
<button type="submit">Absenden</button>
</form> Formular Best Practices
4. Farbkontrast & visuelle Gestaltung
Kontrastverhältnisse nach WCAG 2.1
| Textart | Mindestkontrast |
|---|---|
| Normal Text (unter 18pt) | 4.5:1 |
| Großer Text (ab 18pt oder 14pt fett) | 3:1 |
| UI-Komponenten (Buttons, Icons) | 3:1 |
/* Kontrast nur 2.8:1 - NICHT ausreichend! */
.text {
color: #999999;
background: #ffffff;
} /* Kontrast 7.0:1 - WCAG AAA konform */
.text {
color: #333333;
background: #ffffff;
}
/* Kontrast 4.6:1 - WCAG AA konform */
.text-inverted {
color: #ffffff;
background: #0066cc;
} Farbe allein reicht nicht
<p style="color: red;">Fehler</p>
<p style="color: green;">Erfolg</p>
<!-- Nur Farbe für Information! --> <p class="error">
<span aria-hidden="true">⚠️</span>
<span class="sr-only">Fehler:</span>
Fehler aufgetreten
</p>
<p class="success">
<span aria-hidden="true">✅</span>
<span class="sr-only">Erfolg:</span>
Erfolgreich gespeichert
</p> Farbe darf nicht das einzige Mittel sein, um Informationen zu vermitteln. Nutzen Sie zusätzlich Icons, Text oder andere visuelle Hinweise.
5. Alternative Texte für Bilder
Bilder richtig beschreiben
<img src="team.jpg">
<img src="logo.png" alt="Bild">
<img src="chart.png" alt="chart.png"> <!-- Informatives Bild -->
<img src="team.jpg"
alt="Unser Team von 5 Mitarbeitern im Büro bei der Arbeit">
<!-- Dekoratives Bild -->
<img src="decoration.svg" alt="" role="presentation">
<!-- Logo -->
<img src="logo.png" alt="Wendermedia - Webdesign aus Halle">
<!-- Komplexes Diagramm -->
<img src="sales-chart.png" alt="Umsatzentwicklung 2024"
aria-describedby="chart-description">
<div id="chart-description">
<p>Der Umsatz stieg von 100.000€ im Januar
auf 250.000€ im Dezember 2024.</p>
</div> SVG-Icons barrierefrei
<svg class="icon">...</svg>
<!-- Keine Beschreibung! --> <!-- Dekoratives Icon -->
<svg aria-hidden="true" focusable="false">...</svg>
<!-- Icon-Button mit Label -->
<button aria-label="Suchen">
<svg aria-hidden="true" focusable="false">
<!-- Icon-Pfade -->
</svg>
</button>
<!-- SVG mit Titel und Beschreibung -->
<svg role="img" aria-labelledby="icon-title icon-desc">
<title id="icon-title">Erfolgreich</title>
<desc id="icon-desc">Grüner Haken</desc>
<!-- Icon-Pfade -->
</svg> 6. Video & Audio barrierefrei
Video mit Untertiteln
<video controls>
<source src="video.mp4" type="video/mp4">
<!-- Untertitel (Deutsch) -->
<track kind="subtitles" src="video-de.vtt"
srclang="de" label="Deutsch" default>
<!-- Untertitel (Englisch) -->
<track kind="subtitles" src="video-en.vtt"
srclang="en" label="English">
<!-- Audiodeskription -->
<track kind="descriptions" src="video-ad.vtt"
srclang="de" label="Audiodeskription">
<p>Ihr Browser unterstützt kein HTML5 Video.
<a href="video.mp4">Video herunterladen</a></p>
</video>
<!-- Transkript -->
<details>
<summary>Vollständiges Transkript</summary>
<div>
<p><strong>0:00</strong> - Willkommen...</p>
</div>
</details> WCAG-Anforderungen für Videos
| Level | Anforderung |
|---|---|
| Level A | Untertitel für aufgezeichnete Videos |
| Level AA | Audiodeskription oder Volltext-Alternative |
| Level AAA | Gebärdensprache-Übersetzung |
7. ARIA (Accessible Rich Internet Applications)
- No ARIA is better than bad ARIA - Nutze natives HTML
- Don't change native semantics -
<button role="link">ist falsch - All interactive controls must be keyboard accessible
- Don't hide focusable elements mit aria-hidden="true"
- All interactive elements need an accessible name
ARIA States & Properties
<div onclick="toggle()">Menü</div>
<div id="menu" style="display:none">
<div>Item 1</div>
</div>
<!-- Keine ARIA-Attribute! --> <!-- aria-expanded für Accordions -->
<button aria-expanded="false" aria-controls="menu">
Menü
</button>
<ul id="menu" hidden>
<li>Item 1</li>
</ul>
<!-- aria-live für dynamische Inhalte -->
<div role="status" aria-live="polite" aria-atomic="true">
<p id="status-message"></p>
</div>
<!-- aria-current für Navigation -->
<nav>
<a href="/" aria-current="page">Home</a>
<a href="/blog">Blog</a>
</nav> Modal Dialog Pattern
<div role="dialog" aria-labelledby="dialog-title"
aria-modal="true" class="dialog" hidden>
<div class="dialog-content">
<h2 id="dialog-title">Bestätigung</h2>
<p>Möchten Sie fortfahren?</p>
<button id="confirm">Ja</button>
<button id="cancel">Abbrechen</button>
<button id="close" aria-label="Dialog schließen">×</button>
</div>
</div> 8. Responsive & Zoom-fähig
Inhalte müssen bei 320px Breite ohne horizontales Scrollen lesbar sein (WCAG 1.4.10)
/* Fixed width - bricht bei kleinen Viewports */
.container {
width: 1200px;
} /* Fluid width */
.container {
max-width: 1200px;
width: 100%;
padding: 0 20px;
margin: 0 auto;
}
/* Mobile First */
@media (min-width: 768px) {
.container {
padding: 0 40px;
}
} Text-Skalierung
/* px-basiert - skaliert NICHT mit Browser */
body {
font-size: 16px;
} /* rem-basiert - skaliert mit Browser-Einstellungen */
html {
font-size: 100%;
}
body {
font-size: 1rem; /* 16px */
line-height: 1.5; /* Mindestens 1.5 für Lesbarkeit */
}
h1 {
font-size: 2.5rem; /* 40px */
line-height: 1.2;
} 9. Testing & Qualitätssicherung
Automatisierte Tests
axe DevTools
Chrome/Firefox Extension. Findet ca. 57% aller Fehler automatisch.
npm install -g @axe-core/cli Lighthouse
Integriert in Chrome DevTools. Accessibility-Score von 0-100.
npm install -g lighthouse Pa11y
CI/CD Integration möglich.
npm install -g pa11y Manuelle Test-Checkliste
Manuelle Accessibility-Tests
10. Entwickler-Workflow für BFSG-Konformität
Pre-Commit Hook für Accessibility
#!/bin/sh
echo "Running accessibility tests..."
npm run test:a11y
if [ $? -ne 0 ]; then
echo "❌ Accessibility tests failed. Commit aborted."
exit 1
fi
echo "✅ Accessibility tests passed." GitHub Actions Workflow
name: Accessibility Tests
on: [push, pull_request]
jobs:
a11y:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- run: npm run build
- run: npm run preview &
- run: npx wait-on http://localhost:4173
- run: npm run test:a11y
- run: npx @axe-core/cli http://localhost:4173 --tags wcag2aa Budget & Zeitaufwand
Neues Projekt (von Anfang an barrierefrei)
Mehraufwand bei neuen Projekten
| Phase | Aufwand | Mehrkosten |
|---|---|---|
| Planung & Konzeption | +10% | +800€ |
| Design (Kontraste, Fokus-Stile) | +15% | +1.200€ |
| Entwicklung (HTML, ARIA) | +20% | +2.500€ |
| Testing & QA | +40% | +2.000€ |
| Gesamt Mehraufwand | +20-25% | +6.500€ |
Bestehendes Projekt nachrüsten
Nachrüstungskosten
| Komplexität | Aufwand | Kosten |
|---|---|---|
| Kleine Website (5-10 Seiten) | 40-60h | 4.000€ - 6.000€ |
| Mittlere Website (20-50 Seiten) | 80-120h | 8.000€ - 12.000€ |
| Große Website/Shop (100+ Seiten) | 200-400h | 20.000€ - 40.000€ |
| Web-App (komplex) | 400-800h | 40.000€ - 80.000€ |
Bei Planung von Anfang an ist der Mehraufwand minimal (20-25%). Nachträgliche Anpassungen kosten 3-5x mehr.
Fazit: BFSG-Konformität ist machbar
Die technische Umsetzung des BFSG erfordert systematisches Vorgehen, aber keine Raketenwissenschaft:
Die 5 Kern-Prinzipien
BFSG-Umsetzung starten
Wir unterstützen Sie bei der technischen Umsetzung - vom Audit bis zur vollständigen Compliance.