SEOFX – SEO Agentur Nürnberg
Webentwicklung

Font Loading optimieren: FOIT und FOUT vermeiden

4 Min. Lesezeit

Webfonts sind eine der häufigsten Ursachen für schlechte Core Web Vitals. Falsch geladene Fonts verursachen FOIT (Flash of Invisible Text) oder FOUT (Flash of Unstyled Text) – beides schadet der User Experience und dem CLS-Score. Mit den richtigen Techniken laden Fonts schnell und ohne sichtbare Sprünge.

Was FOIT und FOUT bedeuten

FOIT (Flash of Invisible Text): Der Browser wartet auf den Webfont und zeigt in der Zwischenzeit keinen Text an. Die Seite lädt, aber Nutzer sehen weißen oder leeren Bereich wo Text sein sollte – typischerweise 1–3 Sekunden.

FOUT (Flash of Unstyled Text): Der Browser zeigt zuerst den Fallback-Font (System-Schrift), wechselt dann zum geladenen Webfont. Das verursacht einen sichtbaren Textsprung mit CLS-Auswirkung.

Welches ist schlimmer? Beide sind schlecht, FOIT ist tendenziell schlimmer für die User Experience, FOUT ist schlimmer für CLS-Score.

Google’s CrUX-Daten zeigen: Websites mit nicht-optimiertem Font-Loading haben im Durchschnitt einen CLS-Score von 0.15+ – deutlich über dem „Gut”-Grenzwert von 0.1. Font-Optimierung ist oft der effizienteste CLS-Fix.

font-display: Die CSS-Grundlösung

Das font-display-Attribut steuert das Ladeverhalten von Webfonts:

@font-face {
  font-family: 'Meine Font';
  src: url('/fonts/meine-font.woff2') format('woff2');
  font-display: swap;
}

Die wichtigsten Werte:

swap: Fallback-Font sofort anzeigen, dann auf Webfont wechseln. Kein FOIT, aber FOUT möglich. Bester Kompromiss für die meisten Websites.

optional: Font wird nur verwendet wenn er in sehr kurzer Zeit (< 100ms) verfügbar ist. Kein FOIT, kein FOUT, aber Font könnte nicht angezeigt werden beim ersten Besuch.

fallback: 100ms Block-Period, dann Fallback. Kurzes FOIT möglich, aber minimal.

block: Langer Block (bis 3 Sekunden), dann Fallback. Maximales FOIT – vermeiden.

Preloading: Den Font früher laden

font-display: swap verhindert FOIT, behebt aber nicht den FOUT wenn der Font spät lädt. Preloading lädt den Font früher:

<head>
  <!-- Font im <head> preloaden -->
  <link rel="preload" href="/fonts/meine-font.woff2"
        as="font" type="font/woff2" crossorigin>

  <!-- Dann im Stylesheet definieren -->
  <link rel="stylesheet" href="/css/fonts.css">
</head>

Mit Preloading kombiniert mit font-display: optional erreichen Sie das Ideal: Font lädt früh genug um ohne FOUT direkt verfügbar zu sein.

Preloaden Sie nur die wichtigsten Font-Varianten: Regular und Bold der Hauptschrift für Above-the-fold-Content. Preloading von 5+ Font-Dateien schadet der Performance mehr als es hilft – der Browser konkurriert dann mit anderen wichtigen Ressourcen um Bandbreite.

Lokale Fonts vs. Google Fonts

Google Fonts sind bequem, aber performance-kritisch:

Problem mit Google Fonts:

  1. Zusätzlicher DNS-Lookup zu fonts.googleapis.com
  2. Redirect zu fonts.gstatic.com
  3. Font-Datei von externem Server laden
  4. DSGVO-Risiko (IP-Adresse an Google übermittelt)

Lösung: Fonts lokal hosten

  1. Fonts von Google Fonts Helper herunterladen
  2. In /public/fonts/ oder /fonts/ speichern
  3. @font-face mit lokalem Pfad definieren
@font-face {
  font-family: 'Inter';
  src: url('/fonts/inter-regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

Lokale Fonts eliminieren externe Requests komplett und sind DSGVO-konform.

Variable Fonts: Eine Datei für alle Gewichte

Variable Fonts sind eine neuere Technologie die alle Gewichte in einer Datei vereint:

@font-face {
  font-family: 'Inter Variable';
  src: url('/fonts/inter-variable.woff2') format('woff2-variations');
  font-weight: 100 900; /* Alle Gewichte 100–900 */
  font-display: swap;
}

/* Nutzung: */
h1 { font-weight: 800; } /* Aus derselben Datei */
p  { font-weight: 400; } /* Aus derselben Datei */

Vorteil: Statt 3–4 Font-Dateien (Regular, Bold, Italic, Bold-Italic) nur eine Datei. Weniger HTTP-Requests, oft kleinere Gesamtgröße.

Subsetting: Nur benötigte Zeichen laden

Für deutsche Websites: Fonts oft mit kyrillischen, arabischen oder anderen Zeichensätzen ausgeliefert die Sie nie brauchen.

unicode-range einschränken:

@font-face {
  font-family: 'Meine Font';
  src: url('/fonts/font-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153,
                 U+00C4, U+00D6, U+00DC, U+00E4, U+00F6, U+00FC, U+00DF;
  /* Lateinisch + Deutsche Umlaute */
}

Google Fonts Subset für Deutsch reduziert die Font-Größe typischerweise um 40–60 %.

Die Kombination aus lokalen Fonts, font-display: swap, Preloading der Hauptschrift und Unicode-Range-Subsetting reduziert font-bezogene LCP- und CLS-Probleme in den meisten Fällen um 70–80 % – messbar in PageSpeed Insights vor/nach dem Vergleich.

Mehr zu Core Web Vitals finden Sie in unserem Artikel über WordPress Core Web Vitals optimieren.

Core Web Vitals durch Font-Optimierung verbessern.

Wir optimieren das Font-Loading Ihrer Website – von lokalem Hosting über font-display bis zu Variable Fonts und Subsetting für bessere CLS und LCP Werte.

Performance-Optimierung anfragen

Weitere Artikel zu Webentwicklung