
🛠 So fügen Sie Expires-Header in .htaccess hinzu: Schritt-für-Schritt-Anleitung
Sie haben einen Test in GTmetrix durchgeführt, und dort erscheint es in Rot: „Add Expires Headers". Ein vertrauter Anblick. Die Website läuft auf WordPress, das Hosting auf Apache, und der Geschwindigkeitstest verlangt, dass Sie das Browser-Caching über eine .htaccess konfigurieren.
Der Fehler ist nicht kritisch, aber er stört. Ohne Expires-Header lädt der Browser Bilder, CSS und Skripte bei jedem Besuch erneut vom Server. Immer wieder. Selbst wenn sich nichts geändert hat. Die Geschwindigkeit sinkt, Nutzer warten, Google stuft das Ranking herab.
Sie können das in fünf Minuten beheben. Zwei Wege: manuell per Code in der.htaccess oder mit einem Plugin in zwei Klicks. Nachfolgend beide, mit fertigem Code und Einstellungen.
💡 Kurzer Überblick:
- Verstehen, wie Expires- und Cache-Control-Header den Browser-Cache steuern
- Fertigen Code in die.htaccess einfügen: kopieren, einfügen, prüfen
- Das Plugin AEH Speed Optimization in einer Minute installieren, wenn Sie keinen Code anfassen möchten
- Optimale Caching-Dauern für Bilder, CSS, JS und Schriften konfigurieren
Wie Expires-Header funktionieren
Wenn ein Besucher eine Website aufruft, lädt der Browser Dutzende Dateien: die HTML-Seite, CSS-Stile, JavaScript, Schriften, Icons, Bilder. Jede Datei ist eine separate HTTP-Anfrage an den Server. Je mehr Anfragen, desto länger die Ladezeit.
Der Expires-Header teilt dem Browser mit: „Diese Datei ändert sich nicht, speichere sie im Cache und frage erst wieder zu diesem Datum an." Bei wiederholten Besuchen holt der Browser die Dateien aus dem lokalen Cache, statt sie erneut vom Server zu laden. Ergebnis: Dutzende Anfragen weniger und schnelles Laden.
Das moderne Äquivalent ist der Cache-Control-Header mit der max-age-Direktive. Er setzt die Cache-Lebensdauer in Sekunden, nicht als festes Datum, und gilt heute als primär. Wir empfehlen, beide Header gleichzeitig zu konfigurieren: Expires für alte Browser und Proxys, Cache-Control für alles Moderne. Beide werden im selben.htaccess-Block geschrieben.

Methode 1: Code in der.htaccess
Der direkteste Weg ist, Caching-Regeln direkt in die Apache-Konfigurationsdatei einzufügen. Die .htaccess-Datei liegt im Wurzelverzeichnis der Website (dort, wo auch die wp-config.php liegt). Wenn Sie sie nicht sehen, aktivieren Sie die Anzeige versteckter Dateien in Ihrem FTP-Client oder dem Dateimanager des Hostings.
Laden Sie vor der Bearbeitung eine Kopie der Datei auf Ihren Computer herunter. Ein Syntaxfehler in der.htaccess kann die Website mit einem 500-Fehler lahmlegen, ein Backup erlaubt das Zurücksetzen in einer Sekunde.
Öffnen Sie die .htaccess in einem Editor und fügen Sie den folgenden Block vor # BEGIN WordPress ein:
1 # Browser caching: Expires and Cache-Control headers 2 <IfModule mod_expires.c> 3 ExpiresActive On 4 5 # Images 6 ExpiresByType image/jpg "access plus 1 year" 7 ExpiresByType image/jpeg "access plus 1 year" 8 ExpiresByType image/gif "access plus 1 year" 9 ExpiresByType image/png "access plus 1 year" 10 ExpiresByType image/webp "access plus 1 year" 11 ExpiresByType image/avif "access plus 1 year" 12 ExpiresByType image/svg+xml "access plus 1 year" 13 ExpiresByType image/x-icon "access plus 1 year" 14 15 # CSS and JavaScript 16 ExpiresByType text/css "access plus 1 month" 17 ExpiresByType application/javascript "access plus 1 month" 18 19 # Fonts 20 ExpiresByType font/woff2 "access plus 1 year" 21 ExpiresByType font/woff "access plus 1 year" 22 23 # PDF and other documents 24 ExpiresByType application/pdf "access plus 1 month" 25 26 # Default 27 ExpiresDefault "access plus 2 days" 28 </IfModule> 29 30 # Cache-Control headers for modern browsers 31 <IfModule mod_headers.c> 32 <FilesMatch "\.(jpg|jpeg|png|gif|webp|avif|svg|ico|woff2|woff)$"> 33 Header set Cache-Control "max-age=31536000, public" 34 </FilesMatch> 35 <FilesMatch "\.(css|js)$"> 36 Header set Cache-Control "max-age=2592000, public" 37 </FilesMatch> 38 </IfModule>
Was hier passiert. Der erste Block <IfModule mod_expires.c> aktiviert das Expires-Modul und setzt Speicherfristen für jeden Dateityp. Ein Jahr für Bilder und Schriften, sie ändern sich fast nie. Ein Monat für CSS und JavaScript, sie werden regelmäßig aktualisiert.
Der zweite Block <IfModule mod_headers.c> fügt das moderne Cache-Control mit denselben Fristen, aber in Sekunden hinzu: 31536000 = ein Jahr, 2592000 = ein Monat.
Wichtig: Die Module mod_expires und mod_headers müssen auf dem Server aktiviert sein. Bei den meisten Apache-Hosts sind sie standardmäßig aktiv: Der Support schaltet sie bei der Ersteinrichtung frei. Wenn das Caching nach dem Speichern nicht funktioniert, schreiben Sie an den Hosting-Support: „Bitte aktivieren Sie mod_expires und mod_headers."
Nach dem Einfügen speichern Sie die Datei und laden sie zurück ins Wurzelverzeichnis. Öffnen Sie die Website im Browser, gehen Sie zu DevTools (F12) → Netzwerk → Seite aktualisieren. Klicken Sie auf eine beliebige CSS- oder JS-Datei, im Tab „Header" sollten Sie Expires und Cache-Control mit Werten ungleich null sehen.
Führen Sie GTmetrix erneut aus, der Fehler sollte verschwunden sein.
Methode 2: AEH Speed Optimization Plugin
Wenn Sie nicht manuell in der.htaccess arbeiten möchten, gibt es ein Plugin. Es hieß früher einfach Add Expires Headers, heute ist es zu AEH Speed Optimization gewachsen. Neben Caching-Headern beherrscht es CSS-Minifizierung, Lazy Loading von Bildern und Komprimierung.

Installationsschritte:
Plugins → Installieren, in der Suche „AEH Speed Optimization" eingeben
Klicken Sie auf Jetzt installieren, dann auf Aktivieren
Gehen Sie zu Einstellungen → AEH Speed Optimization
Aktivieren Sie auf dem Tab „Cache-Einstellungen" die Dateitypen und legen Sie die Speicherdauer in Tagen fest

- Klicken Sie auf Senden
Das Plugin schreibt die Regeln selbstständig in die.htaccess, Sie müssen keine einzige Codezeile schreiben. Für die meisten Websites reicht die kostenlose Version. Die Pro-Version fügt Gzip-Komprimierung, Caching externer Ressourcen (Google Fonts, CDN-Skripte) und benutzerdefinierte Dateitypen hinzu.

🔗 AEH Speed Optimization auf WordPress.org
Wenn Sie bereits ein Caching-Plugin wie W3 Total Cache oder WP Rocket nutzen, benötigen Sie kein separates Expires-Plugin. Jedes ernsthafte Cache-Plugin kann Expires- und Cache-Control-Header automatisch in die.htaccess einfügen. Gehen Sie in die Einstellungen Ihres Plugins und prüfen Sie, ob der Tab „Browser-Cache" aktiv ist.
Welche Caching-Dauer sollte man einstellen?
Es gibt keine allgemeingültige Antwort, die Dauer hängt davon ab, wie oft Sie einen bestimmten Dateityp ändern.

Dateityp | Empfohlene Dauer | Warum |
|---|---|---|
Bilder (jpg, png, webp, avif, gif, svg) | 1 Jahr | Ändern sich selten, wiegen viel, maximaler Cache-Nutzen |
Icons und Favicon | 1 Jahr | Ändern sich jahrelang nicht |
Schriften (woff2, woff) | 1 Jahr | Werden einmal eingebunden und nicht aktualisiert |
CSS-Stile | 1 Monat | Werden gelegentlich bearbeitet; bei einem Redesign Cache leeren |
JavaScript | 1 Monat | Gleiche Logik wie bei CSS |
PDF und Dokumente | 1 Monat | Werden selten heruntergeladen, können aber aktualisiert werden |
Faustregel: Je stabiler die Datei, desto länger die Dauer. Für Bilder ist ein Jahr Standard. Für CSS und JS ist ein Monat ein vernünftiger Kompromiss zwischen Geschwindigkeit und Aktualität.
Wenn Sie die Website aktiv entwickeln und sich die Stile wöchentlich ändern, setzen Sie CSS auf eine Woche, nicht auf einen Monat. Wenn Sie mit den Änderungen fertig sind, kehren Sie zu einem Monat zurück.
⁉️🤔 Häufige Fragen
Ich habe Code in die.htaccess eingefügt, aber GTmetrix zeigt den Fehler immer noch an. Warum?
Der häufigste Grund ist, dass die Module
mod_expiresodermod_headersauf dem Server nicht aktiviert sind. Schreiben Sie an den Hosting-Support mit der Bitte, beide Module zu aktivieren. Zweiter Grund: Sie haben den Code nach# BEGIN WordPresseingefügt, nicht davor. WordPress überschreibt alles, was nach seiner Markierung kommt. Drittens: Ein Caching-Plugin (W3 Total Cache, WP Rocket) verwaltet bereits die.htaccess und hat Ihre Regeln mit seinen eigenen überschrieben. Konfigurieren Sie in diesem Fall den Browser-Cache innerhalb des Plugins selbst, nicht manuell.
Was ist der Unterschied zwischen Expires und Cache-Control?
Expiressetzt ein festes Datum und eine Uhrzeit („gültig bis 15. Juni 2027").Cache-Controlmit dermax-age-Direktive setzt die Dauer in Sekunden ab dem Zeitpunkt der Anfrage („gültig für 31536000 Sekunden").Cache-Controlist flexibler und hat Vorrang: Wenn beide gesetzt sind, folgt der BrowserCache-Control. Wir empfehlen, beide zu schreiben, für maximale Kompatibilität mit alten und neuen Clients.
Die Website läuft auf Nginx, die.htaccess funktioniert nicht. Was tun?
Die
.htaccess-Datei ist eine Apache-Konfiguration. Nginx ignoriert sie. Bei Nginx werden Caching-Regeln mit derexpires-Direktive imserver-Abschnitt der Website-Konfigurationsdatei hinzugefügt. Wenn Sie Nginx nutzen (Hosts wie Kinsta, Cloudways), verwenden Sie das AEH Speed Optimization Plugin: Es funktioniert auf jedem Webserver, da es Header über PHP verwaltet, nicht über die Serverkonfiguration.
Muss ich Expires konfigurieren, wenn ich bereits ein CDN nutze?
Ja. Ein CDN (Cloudflare, BunnyCDN) speichert Inhalte auf seinen weltweiten Servern zwischen, aber der Browser-Cache ist eine separate Ebene. Richtig konfigurierte
Expires- undCache-Control-Header reduzieren sogar die Anfragen an das CDN: Der Browser geht für eine Datei gar nicht erst ins Netz, wenn seine lokale Kopie noch frisch ist. Zwei Cache-Ebenen, CDN + Browser, arbeiten zusammen und ersetzen einander nicht.
Kollidiert das AEH Speed Optimization Plugin mit meinem Cache-Plugin?
Das kann passieren, wenn beide versuchen, Regeln in die.htaccess zu schreiben. Deaktivieren Sie vor der Installation von AEH Speed Optimization den Browser-Cache in Ihrem Haupt-Caching-Plugin, oder behalten Sie umgekehrt ein Plugin, das sowohl Seiten-Cache als auch Browser-Cache verwaltet. WP Rocket und W3 Total Cache können alles out of the box, ein separates Expires-Plugin ist bei ihnen nicht nötig.
Sollte man Expires manuell konfigurieren oder reicht ein Plugin?
Wenn Sie sicher mit FTP arbeiten und keine Scheu vor einem Code-Editor haben, gibt Ihnen die manuelle Konfiguration über die.htaccess volle Kontrolle und fügt dem Admin-Bereich kein zusätzliches Plugin hinzu. Der obige Code: kopieren, einfügen, und die Sache ist erledigt.
Für alle anderen löst das AEH Speed Optimization Plugin die Aufgabe ohne das Risiko eines Tippfehlers in der Konfiguration. Zudem bietet es Minifizierung und Lazy Loading, was die Website ebenfalls beschleunigt.
Die Hauptsache ist, den GTmetrix-Fehler nicht so stehen zu lassen. Fünf Minuten für die Konfiguration der Expires-Header bringen einen spürbaren Geschwindigkeitsschub, und Geschwindigkeit ist sowohl Nutzererlebnis als auch Suchmaschinenranking.



