Render-blockierende Skripte: defer und async richtig nutzen
Stand: 3. Oktober 2026 · CAZ Labs
Kurz gesagt
Ein externes Skript im `<head>` ohne `async` oder `defer` hält den Aufbau der Seite an, bis es geladen und ausgeführt ist. Bis dahin sieht der Besucher eine weiße Fläche. Die Lösung ist meist ein einziges Wort: `defer` im Script-Tag.
Warum das wichtig ist
Der Browser liest das HTML von oben nach unten. Stößt er auf ein normales <script src="...">, hört er auf zu lesen, lädt die Datei, führt sie aus und macht erst dann weiter. Im <head> heißt das: Solange das Skript lädt, gibt es keinen einzigen sichtbaren Inhalt. Kommt das Skript von einem fremden Server, hängt deine Ladezeit zusätzlich an dessen Tagesform.
Zwei Attribute ändern das. Mit defer lädt der Browser das Skript nebenher und führt es erst aus, wenn das HTML fertig gelesen ist, und zwar in der Reihenfolge, in der die Skripte im Code stehen. Mit async lädt er ebenfalls nebenher, führt das Skript aber sofort aus, sobald es da ist, ohne feste Reihenfolge. Skripte mit type="module" verhalten sich von Haus aus wie defer.
Unsere Empfehlung: Nimm defer als Standard. async lohnt sich für Skripte, die für sich allein stehen und von nichts abhängen, etwa ein Statistik-Skript.
So prüfst du es selbst
Der kostenlose Check zählt alle externen Skripte im <head>, die weder async noch defer noch type="module" tragen. Keins ist gut, ein oder zwei geben eine Warnung, ab drei ist es ein Fehler. Eingebettete Skripte ohne src zählen wir nicht mit.
Von Hand geht es so:
- Öffne den Quelltext deiner Seite mit Strg+U (Mac: Cmd+Option+U).
- Such mit Strg+F nach
<scriptund geh alle Treffer bis</head>durch. - Jedes Tag mit
src=, aber ohneasync,deferodertype="module"blockiert. - Optional: Lighthouse in den Entwicklertools (F12) laufen lassen. Der Bericht listet render-blockierende Anfragen auf, dort stehen auch CSS-Dateien, die checkfrei bei diesem Punkt nicht zählt.
So behebst du es
Teste jede Änderung mit offener Konsole (F12, Tab Konsole). Rote Fehlermeldungen nach dem Umstellen zeigen sofort, wenn ein Skript jetzt zu spät kommt.
HTML
Schreib defer an jedes Skript, das nicht schon für den allerersten Bildaufbau gebraucht wird. Das sind fast alle.
<!-- blockiert den Seitenaufbau -->
<script src="/js/slider.js"></script>
<!-- lädt nebenher, läuft nach dem HTML, Reihenfolge bleibt -->
<script src="/js/jquery.min.js" defer></script>
<script src="/js/slider.js" defer></script>
<!-- unabhängiges Skript, Reihenfolge egal -->
<script src="https://statistik.example/script.js" async></script>WordPress
Seit WordPress 6.3 können Themes und Plugins beim Einbinden eine Ladestrategie mitgeben. Das hilft dir, wenn du ein eigenes Theme oder Child-Theme pflegst.
Für Skripte aus fremden Plugins nimmst du ein Optimierungs-Plugin: WP Rocket, Autoptimize oder Perfmatters können JavaScript verzögert laden. Klick danach jede wichtige Seite durch, vor allem Menü, Slider, Formulare und Cookie-Banner.
wp_enqueue_script(
'mein-slider',
get_stylesheet_directory_uri() . '/js/slider.js',
array(),
'1.0',
array( 'strategy' => 'defer' )
);Shopify
Die Skripte des Themes stehen meist in layout/theme.liquid, erreichbar über Code bearbeiten beim jeweiligen Theme. Ergänze dort defer. Skripte von Apps kommen oft über App-Einbettungen, die du im Theme-Editor ein- und ausschaltest.
<script src="{{ 'theme.js' | asset_url }}" defer></script>Next.js
Next.js lädt seine eigenen Bündel bereits nicht blockierend. Fremde Skripte bindest du mit der Komponente next/script ein, ein rohes <script> im Kopf blockiert auch hier. Die Standardstrategie afterInteractive lädt nach der Hydration, lazyOnload erst, wenn der Browser Luft hat.
import Script from 'next/script';
<Script src="https://statistik.example/script.js" strategy="lazyOnload" />Typische Fehler
- jQuery mit defer, Inline-Code ohne. Steht weiter unten ein
<script>mit$(...)direkt im HTML, läuft es, bevor jQuery da ist. In der Konsole steht dann "$ is not defined". Pack den Inline-Code in eine eigene Datei mitdeferoder in einenDOMContentLoaded-Listener. - async bei Skripten, die aufeinander aufbauen. Das geht mal gut und mal nicht, je nachdem, welche Datei zuerst ankommt. Solche Fehler tauchen nur sporadisch auf und sind mühsam zu finden.
- Das Consent-Tool verzögern. Manche Consent-Tools müssen absichtlich als erstes und blockierend laden, damit sie Tracker zurückhalten können. Halte dich an die Einbauanleitung des Anbieters. Das ist eine berechtigte Ausnahme, auch wenn der Check sie mitzählt.
So prüft checkfrei
Wir zählen externe Skripte im <head> ohne async, defer oder type="module". Keins ist gut, ein bis zwei geben eine Warnung, ab drei ist es ein Fehler.
Gewicht 2 von 3 im Bereich Ladezeit.
Häufige Fragen
Was ist der Unterschied zwischen async und defer?
Beide laden das Skript, ohne den Seitenaufbau anzuhalten. defer führt die Skripte nach dem Lesen des HTML in fester Reihenfolge aus, async sofort nach dem Laden in beliebiger Reihenfolge. Für die meisten Skripte ist defer die sichere Wahl.
Muss ich Skripte noch ans Ende des body schreiben?
Mit defer nicht mehr. Das Verschieben ans Ende war der Trick aus der Zeit vor defer. Steht das Skript mit defer im <head>, entdeckt der Browser die Datei sogar früher.
Zählt der Google Tag Manager als blockierendes Skript?
Das Standard-Snippet nicht. Es ist ein kleines eingebettetes Skript, das gtm.js asynchron nachlädt. Die Tags, die du im Tag Manager einbaust, können die Seite aber trotzdem ausbremsen, nur eben etwas später.
Jetzt deine Seite prüfen
checkfrei prüft Blockierende Skripte und 68 weitere Punkte in einem Durchgang. Kostenlos und ohne Anmeldung.