Performance-Ratgeber

Bis zu 90% schnellere Ladezeiten für wiederkehrende Besucher

Browser-Caching speichert Dateien lokal beim Besucher – CSS, JavaScript, Bilder und Schriften müssen nicht bei jedem Besuch neu geladen werden. Das Ergebnis: Deutlich schnellere Ladezeiten und weniger Server-Last. In diesem Leitfaden zeigen wir Ihnen, wie Sie Caching richtig konfigurieren.

Was ist Browser-Caching?

Wenn jemand Ihre Website besucht, lädt der Browser alle Ressourcen herunter: HTML, CSS, JavaScript, Bilder, Schriften usw. Bei Browser-Caching speichert der Browser diese Dateien lokal auf der Festplatte des Besuchers. Beim nächsten Besuch muss er sie nicht erneut vom Server laden – er nutzt einfach die gespeicherte Version.

Ohne Caching
Erster Besuch: 2,5 MB Download, 3,2 Sekunden Ladezeit
Zweiter Besuch: 2,5 MB Download, 3,2 Sekunden Ladezeit
Dritter Besuch: 2,5 MB Download, 3,2 Sekunden Ladezeit
Mit Caching
Erster Besuch: 2,5 MB Download, 3,2 Sekunden Ladezeit
Zweiter Besuch: 45 KB Download, 0,4 Sekunden Ladezeit
Dritter Besuch: 45 KB Download, 0,4 Sekunden Ladezeit

Der Unterschied ist enorm: Statt 2,5 MB müssen nur noch 45 KB geladen werden – das ist eine Reduzierung um 98%. Für wiederkehrende Besucher bedeutet das nahezu sofortige Ladezeiten.

💡 Wichtig: Cache-Dauer richtig wählen

Die Cache-Dauer bestimmt, wie lange Dateien im Browser-Cache bleiben. Zu kurz (z.B. 1 Tag) und Sie verschenken Performance. Zu lang (z.B. 1 Jahr für HTML) und Besucher sehen veraltete Inhalte. Die Kunst liegt darin, für jeden Dateityp die passende Dauer zu wählen.

Browser-Caching für Apache (.htaccess)

Die meisten Webhoster nutzen Apache als Webserver. Die Caching-Konfiguration erfolgt über die .htaccess-Datei im Root-Verzeichnis Ihrer Website. Falls die Datei noch nicht existiert, erstellen Sie sie einfach.

📄 .htaccess – Empfohlene Caching-Konfiguration
# Browser-Caching aktivieren
<IfModule mod_expires.c>
    ExpiresActive On

    # Standard-Cache: 1 Jahr für statische Assets
    ExpiresDefault "access plus 1 year"

    # HTML-Dateien: 1 Stunde (ändern sich häufig)
    ExpiresByType text/html "access plus 1 hour"

    # CSS und JavaScript: 1 Monat
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresByType text/javascript "access plus 1 month"

    # Bilder: 1 Jahr (ändern sich selten)
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType image/webp "access plus 1 year"
    ExpiresByType image/svg+xml "access plus 1 year"
    ExpiresByType image/gif "access plus 1 year"
    ExpiresByType image/x-icon "access plus 1 year"

    # Schriften: 1 Jahr
    ExpiresByType font/woff "access plus 1 year"
    ExpiresByType font/woff2 "access plus 1 year"
    ExpiresByType application/font-woff "access plus 1 year"
    ExpiresByType application/font-woff2 "access plus 1 year"

    # Videos: 1 Jahr
    ExpiresByType video/mp4 "access plus 1 year"
    ExpiresByType video/webm "access plus 1 year"
</IfModule>

# Cache-Control Header setzen
<IfModule mod_headers.c>
    # Für statische Dateien: öffentlich cachebar
    <FilesMatch "\.(jpg|jpeg|png|gif|webp|svg|css|js|woff|woff2)$">
        Header set Cache-Control "public, max-age=31536000, immutable"
    </FilesMatch>

    # Für HTML: kürzerer Cache, Revalidierung nötig
    <FilesMatch "\.(html|htm)$">
        Header set Cache-Control "public, max-age=3600, must-revalidate"
    </FilesMatch>
</IfModule>

So aktivieren Sie die .htaccess-Konfiguration

1. Kopieren Sie den Code oben
2. Öffnen Sie Ihre .htaccess-Datei im Root-Verzeichnis (oder erstellen Sie sie)
3. Fügen Sie den Code am Ende der Datei ein
4. Speichern Sie die Datei
5. Testen Sie die Funktionsweise (siehe unten)

Browser-Caching für Nginx

Wenn Ihr Webserver Nginx nutzt, erfolgt die Konfiguration in der Server-Block-Konfiguration. Diese befindet sich meist unter /etc/nginx/sites-available/.

⚙️ nginx.conf – Empfohlene Caching-Konfiguration
server {
    # ... Ihre anderen Einstellungen ...

    # HTML-Dateien: kurzer Cache
    location ~* \.html?$ {
        expires 1h;
        add_header Cache-Control "public, must-revalidate";
    }

    # CSS und JavaScript: mittlerer Cache
    location ~* \.(css|js)$ {
        expires 1M;
        add_header Cache-Control "public, immutable";
    }

    # Bilder: langer Cache
    location ~* \.(jpg|jpeg|png|gif|webp|svg|ico)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    # Schriften: langer Cache
    location ~* \.(woff|woff2|ttf|otf|eot)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    # Videos: langer Cache
    location ~* \.(mp4|webm|ogg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}

Nach Änderungen an der Nginx-Konfiguration müssen Sie den Server neu laden:

sudo systemctl reload nginx
oder (bei älteren Systemen):
sudo service nginx reload

Navigieren Sie zum Nginx-Installationsverzeichnis und führen Sie aus:
nginx.exe -s reload

sudo nginx -s reload
oder bei Installation via Homebrew:
brew services restart nginx

Optimale Cache-Dauern für verschiedene Dateitypen

📊 Praxis-Beispiel: WordPress-Blog

Vorher (ohne Caching):
- Erster Besuch: 2,1 MB, 2,8 Sekunden
- Zweiter Besuch: 2,1 MB, 2,8 Sekunden
- Serverlast: 2,1 MB pro Besuch

Nachher (mit Caching):
- Erster Besuch: 2,1 MB, 2,8 Sekunden
- Zweiter Besuch: 38 KB, 0,3 Sekunden (nur HTML neu laden)
- Serverlast: 98% Reduktion bei wiederkehrenden Besuchern

Cache-Busting: Updates trotz langem Cache

Problem: Sie haben CSS-Dateien mit 1-Jahr-Cache konfiguriert. Jetzt ändern Sie das Design – aber Besucher sehen die alte Version aus dem Cache. Die Lösung heißt Cache-Busting.

Methode 1: Versionsnummer im Dateinamen
Statt style.css nutzen Sie style.v2.css. Bei jedem Update erhöhen Sie die Versionsnummer. Der Browser sieht einen neuen Dateinamen und lädt die Datei neu.

Methode 2: Query-String-Parameter
Nutzen Sie style.css?v=1.2.3 in Ihrem HTML. Bei Updates ändern Sie die Versionsnummer. Vorsicht: Manche Proxy-Server cachen Dateien mit Query-Strings nicht.

Methode 3: Hash im Dateinamen (beste Lösung)
Build-Tools wie Webpack oder Vite generieren automatisch Dateinamen mit Content-Hash: style.a3f2b9c1.css. Ändert sich der Inhalt, ändert sich der Hash – perfektes Cache-Busting.

⚠️ Häufiger Fehler: Query-Strings in .htaccess ignorieren

Manche Webserver und CDNs ignorieren Query-Strings beim Caching. Das bedeutet: style.css?v=1 und style.css?v=2 werden als identisch behandelt. Nutzen Sie stattdessen echte Versionierung im Dateinamen oder konfigurieren Sie Ihren Server entsprechend.

Caching testen: Funktioniert es wirklich?

Nach der Konfiguration sollten Sie testen, ob Caching wirklich aktiv ist. Es gibt mehrere Methoden:

🔧

Chrome DevTools

F12 drücken → Network-Tab → Seite neu laden → Spalte "Size" prüfen. Bei gecachten Dateien steht "(from disk cache)" oder "(from memory cache)".

🌐

GTmetrix

Online-Tool, das Ihre Caching-Header analysiert und konkrete Verbesserungsvorschläge gibt. Zeigt auch Cache-Dauer für jede Datei.

Zu GTmetrix

PageSpeed Insights

Google prüft Ihre Cache-Richtlinien und warnt bei zu kurzen Cache-Dauern. Zeigt genau, welche Ressourcen optimiert werden sollten.

Zu PageSpeed Insights
📡

RedBot

Detaillierter Header-Checker von der Internet Society. Analysiert alle Cache-Header und erklärt, was sie bedeuten.

Zu RedBot

Cache-Control Header verstehen

Der Cache-Control-Header ist der moderne Standard für Caching-Anweisungen. Er ersetzt den älteren Expires-Header und bietet mehr Kontrolle.

💡 Beispiele für optimale Cache-Control-Werte

Statische Bilder: Cache-Control: public, max-age=31536000, immutable
→ 1 Jahr Cache, wird nie geprüft

CSS mit Versionierung: Cache-Control: public, max-age=31536000, immutable
→ 1 Jahr Cache, da Dateiname bei Updates ändert

HTML-Seiten: Cache-Control: public, max-age=3600, must-revalidate
→ 1 Stunde Cache, dann Prüfung nötig

API-Responses: Cache-Control: private, max-age=300
→ 5 Minuten Cache, nur im Browser

WordPress: Caching mit Plugins

Für WordPress-Websites gibt es mehrere Plugins, die Browser-Caching automatisch konfigurieren. Sie bieten grafische Oberflächen und übernehmen die .htaccess-Anpassungen für Sie.

⚙️ Tipp: Kombinieren Sie verschiedene Caching-Ebenen

Für optimale Performance kombinieren Sie mehrere Caching-Strategien:
1. Browser-Caching (dieser Artikel) – Dateien beim Besucher speichern
2. Server-Caching – Generierte HTML-Seiten auf dem Server zwischenspeichern
3. CDN-Caching – Statische Dateien global verteilen
4. Objekt-Caching – Datenbank-Queries cachen (Redis, Memcached)

Häufig gestellte Fragen

Alles, was Sie wissen müssen

Nein, auch dynamische HTML-Seiten können gecacht werden. Allerdings sollten Sie hier kürzere Cache-Dauern wählen (z.B. 1 Stunde), damit Besucher aktuelle Inhalte sehen. Für personalisierte Inhalte (z.B. eingeloggte Benutzer) verwenden Sie "private" statt "public" im Cache-Control-Header.
Sie können den Cache Ihrer Besucher nicht direkt leeren. Deshalb ist Cache-Busting wichtig: Ändern Sie den Dateinamen oder fügen Sie einen Versions-Parameter hinzu (z.B. style.css?v=2). Moderne Build-Tools wie Webpack machen das automatisch durch Hash-basierte Dateinamen.
Ja, wenn falsch konfiguriert. Häufigste Probleme: (1) Zu lange Cache-Dauern für HTML – Besucher sehen veraltete Inhalte. (2) Kein Cache-Busting – Updates werden nicht angezeigt. (3) Sensible Daten werden gecacht. Die Lösung: Unterschiedliche Cache-Dauern für verschiedene Dateitypen und Cache-Busting für Updates.
Für wiederkehrende Besucher enorm viel. Typischerweise reduziert sich die Ladezeit um 70-90%. Ein Erstbesucher profitiert nicht vom Browser-Cache, aber ab dem zweiten Besuch sind die Verbesserungen massiv. Bei Websites mit vielen Stammbesuchern (Blogs, Shops, Web-Apps) ist der Impact enorm.
Die Konfiguration funktioniert bei den meisten Hostern, die Apache verwenden. Voraussetzung: Die Module mod_expires und mod_headers müssen aktiviert sein (bei den meisten Hostern Standard). Bei Nginx müssen Sie die Server-Konfiguration anpassen. Shared-Hosting-Nutzer haben hier oft keinen Zugriff – nutzen Sie dann WordPress-Plugins.
Browser-Cache speichert Dateien beim Besucher lokal. Server-Cache speichert generierte HTML-Seiten auf dem Server, damit sie nicht bei jeder Anfrage neu generiert werden müssen. Idealerweise kombinieren Sie beides: Server-Cache für schnelle HTML-Generierung, Browser-Cache für wiederkehrende Besucher.
Nur wenn Sie sicher sind, dass die Datei sich nie unter demselben Namen ändert. Bei versionierten Dateien (style.v2.css) oder Hash-basierten Namen (style.a3f2b9.css) ist "immutable" perfekt. Ohne Versionierung riskieren Sie, dass Besucher veraltete Versionen sehen. Nutzen Sie dann stattdessen "must-revalidate".
🚀

Caching professionell einrichten lassen?

Ich konfiguriere Browser-Caching, Server-Caching und CDN für optimale Performance – und sorge dafür, dass Updates trotzdem problemlos funktionieren.