← Alle Leitfäden

Menu und LCP: Wie Navigation Ihr Largest Contentful Paint blockiert

Menu-CSS und der kritische Rendering-Pfad: Inline vs. externe Stylesheets

Wann Sie Menu-CSS inline einbinden, wann Sie es extern laden, und wie Sie Above-the-Fold- vs. Below-the-Fold-Stile aufteilen.

Ihr Menu sieht fantastisch aus. Die Dropdown-Animationen sind flüssig, die Hover-States sind poliert, und das Mobile-Layout ist pixelperfekt. Aber jedes Mal, wenn Sie einen Lighthouse-Test durchführen, kennzeichnet Google Ihr CSS als render-blockierend. Ihr LCP liegt auf dem Smartphone bei 3,2 Sekunden, und die Diagnose sagt, dass die Beseitigung von render-blockierendem Stylesheets bis zu 800 Millisekunden einsparen könnte. Sie sind sich nicht sicher, was das bedeutet oder wie man es beheben kann, ohne das Design zu zerstören.

Das Problem liegt nicht im Design. Das Problem ist die Auslieferung. Browser zeichnen kein einziges Pixel, bis alle CSS-Dateien im Dokumentkopf heruntergeladen und geparst wurden. Wenn Ihr Menu ein 50-KB-Stylesheet lädt und das Netzwerk langsam ist, bleibt die gesamte Seite leer, während der Browser auf das Parsing der Menu-Stile wartet. Das Hero-Bild ist bereit. Die Überschrift ist bereit. Aber sie bleiben unsichtbar, weil der Browser immer noch Menu-Stile verarbeitet.

Dieser Artikel erläutert, wie CSS das Rendering blockiert, welche Menu-Stile von Anfang an geladen werden müssen, und wie Sie Ihr Stylesheet aufteilen, damit die kritischen Teile sofort geladen werden, während der Rest nach dem ersten Seitenaufruf geladen wird.

Schneller Überblick
  • Alle externe CSS-Dateien, die im <head> verlinkt sind, blockieren das Rendering, bis sie vollständig heruntergeladen und geparst wurden.
  • Das Inline-Einbinden von kritischem CSS (die Stile, die für Above-the-Fold-Inhalte benötigt werden) eliminiert die Netzwerk-Roundtrip.
  • Die meisten Menu-Stile sind nicht kritisch – nur die Layout-Struktur und der Abstand müssen von Anfang an geladen werden.
  • Hover-Effekte, Animationen und Dropdown-Stile können nach dem ersten Aufruf geladen werden, ohne die Benutzererfahrung zu beeinflussen.
  • Ein gut optimiertes Menu lädt 2–5 KB inline CSS und verschiebt den Rest.

Wie CSS den kritischen Rendering-Pfad blockiert

Der kritische Rendering-Pfad ist die Abfolge von Schritten, die ein Browser unternimmt, um HTML, CSS und JavaScript in sichtbare Pixel auf dem Bildschirm umzuwandeln. Die Schritte sind: HTML herunterladen, HTML parsen, CSS herunterladen, CSS parsen, Render-Tree aufbauen, Layout berechnen, Pixel zeichnen.

CSS ist absichtlich render-blockierend. Der Browser zeichnet nichts, bis alle Stylesheets im Dokumentkopf vollständig geladen und geparst sind. Dies verhindert Flash of Unstyled Content (FOUC), bei dem die Seite kurz mit Standard-Browser-Stilen angezeigt wird, bevor die echten Stile angewendet werden.

Hier ist eine Zeitleiste für einen typischen Shopify-Store mit einem externen Menu-Stylesheet:

  1. Browser lädt HTML herunter (200 ms auf 4G)
  2. Browser parst HTML, trifft auf <link rel="stylesheet" href="menu.css">
  3. Browser startet das Herunterladen von menu.css (300 ms für eine 40-KB-Datei auf 4G)
  4. Browser beendet das Herunterladen und Parsen von menu.css (50 ms Parse-Zeit auf einem Mid-Range-Smartphone)
  5. Browser kann jetzt mit dem Zeichnen der Seite beginnen

Gesamtzeit bis zum ersten Aufruf: 550 ms, nur für das Menu-CSS. Addieren Sie das Hauptstylesheet des Themas, und Sie schauen auf über eine Sekunde Verzögerung, bevor etwas erscheint.

Nach Googles Web.dev-Dokumentation zu render-blockierenden Ressourcen ist die Beseitigung oder Verschiebung von CSS, das nicht sofort benötigt wird, einer der effektivsten Wege, um LCP und First Contentful Paint zu verbessern.

Was als kritisches Menu-CSS gilt

Nicht alle Menu-Stile müssen vor dem ersten Aufruf geladen werden. Nur die Stile, die erforderlich sind, um das Above-the-Fold-Menu ohne Layout-Shift zu rendern, sind kritisch. Alles andere kann später geladen werden.

Kritisch (muss von Anfang an geladen werden)

  • Layout-Struktur: Display-Eigenschaften, Flexbox/Grid-Regeln, Positionierung für den Menu-Container.
  • Abstände: Padding, Margin, Höhe, Breite, um den richtigen Platz zu reservieren.
  • Grundlegende Sichtbarkeit: Display-/Visibility-Regeln, damit das Menu an der richtigen Stelle angezeigt wird.
  • Schriftgröße und Zeilenhöhe: Verhindert, dass der Text umgebrochen wird, wenn das vollständige Stylesheet geladen wird.

Nicht kritisch (kann verschoben werden)

  • Farben und Hintergründe: Das Menu kann anfänglich in Standardfarben gerendert werden, ohne Layout-Shift zu verursachen.
  • Hover-Effekte und Übergänge: Diese gelten nur bei Interaktion, nicht beim ersten Aufruf.
  • Dropdown-Stile: Auf dem Desktop sind Dropdowns verborgen, bis der Benutzer den Mauszeiger bewegt. Auf dem Smartphone sind sie verborgen, bis der Benutzer auf das Hamburger-Menü tippt. Diese Stile können nach der Sichtbarkeit der Seite geladen werden.
  • Symbole und dekorative Elemente: Menu-Chevrons, Trennlinien, Badge-Stile – alles nicht wesentlich für das erste Rendering.

Das Ziel ist, gerade genug CSS inline einzubinden, um Layout-Shift zu verhindern und den Rest zu verschieben.

Inline-CSS: Wann und Wie

Inline-CSS bedeutet, es direkt in ein <style>-Tag im HTML zu schreiben, anstatt es von einer externen Datei zu verlinken. Dies eliminiert die Netzwerk-Roundtrip, die Hauptquelle der render-blockierenden Verzögerung.

Hier ist ein Beispiel für kritisches inline CSS für ein Navigationsmenu:

<style>
  .menu-container {
    display: flex;
    align-items: center;
    height: 60px;
    padding: 0 20px;
  }
  .menu-nav {
    display: flex;
    gap: 24px;
  }
  .menu-link {
    font-size: 16px;
    line-height: 1.5;
    text-decoration: none;
  }
  @media (max-width: 768px) {
    .menu-nav { display: none; }
    .menu-toggle { display: block; }
  }
</style>

Dies sind ungefähr 300 Bytes. Es reserviert den richtigen Platz für das Menu, verhindert Layout-Shift und stellt sicher, dass die Menu-Struktur vorhanden ist, bevor die Seite aufgezeichnet wird. Der Rest der Menu-Stile – Farben, Hover-Effekte, Dropdown-Animationen – werden nach dem ersten Aufruf von einem externen Stylesheet geladen.

Wann Inline einbinden

Binden Sie CSS inline ein, wenn:

  • Das CSS klein ist (unter 5 KB als grobe Richtlinie).
  • Die Stile für Above-the-Fold-Inhalte auf jeder Seite benötigt werden.
  • Die Netzwerk-Latenz ein größerer Kostenfaktor ist als die Parse-Zeit.

Für Navigationsmenüs ist das Inline-Einbinden fast immer die richtige Wahl. Das Menu erscheint auf jeder Seite, und die kritische Teilmenge der Stile ist winzig.

Wann nicht inline einbinden

Binden Sie CSS nicht inline ein, wenn:

  • Das Stylesheet groß ist (über 10 KB). Das Inline-Einbinden großer CSS bläht das HTML auf und kann das HTML-Parsing verlangsamen.
  • Die Stile werden nur auf bestimmten Seiten benötigt. Das Inline-Einbinden von seitespezifischem CSS auf jeder Seite verschwendet Bandbreite.
  • Das CSS ändert sich häufig. Inline CSS wird nicht separat zwischengespeichert – es ist Teil des HTML, daher enthält jede HTML-Anfrage das CSS.

Für Menu-Apps mit umfangreicher Gestaltung (Mega Menüs mit Bildern, komplexe Animationen, mehrere Layout-Modi) binden Sie nur die Layout-Struktur inline ein und verschieben Sie den Rest.

Laden von nicht kritischem CSS ohne Rendering zu blockieren

Nachdem Sie das kritische CSS identifiziert und inline eingebunden haben, besteht der nächste Schritt darin, den Rest des CSS zu laden, ohne das Rendering zu blockieren. Es gibt zwei gängige Ansätze.

Ansatz 1: Preload und Swap

Verwenden Sie <link rel="preload">, um das Stylesheet im Hintergrund herunterzuladen und dann asynchron anzuwenden.

<link rel="preload" href="menu.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="menu.css"></noscript>

Das preload teilt dem Browser mit, dass menu.css mit hoher Priorität abgerufen werden soll, blockiert aber nicht das Rendering. Das onload-Ereignis ändert rel="preload" zu rel="stylesheet", wobei die Stile angewendet werden, sobald die Datei fertig heruntergeladen ist. Das <noscript>-Fallback stellt sicher, dass die Stile normalerweise geladen werden, wenn JavaScript deaktiviert ist.

Dieser Ansatz ist weit verbreitet und funktioniert in allen modernen Browsern.

Ansatz 2: Media-Query-Trick

Laden Sie das Stylesheet mit einer Media-Query, die nicht passt, und wechseln Sie es nach dem Laden zu all.

<link rel="stylesheet" href="menu.css" media="print" onload="this.media='all'">

Das Attribut media="print" teilt dem Browser mit, dass das Stylesheet nur zum Drucken bestimmt ist, daher blockiert es nicht das Screen-Rendering. Sobald die Datei geladen ist, ändert das onload-Ereignis die Media-Query zu all, und wendet die Stile auf dem Bildschirm an.

Dies ist ein Hack, aber es funktioniert zuverlässig und erfordert weniger JavaScript als der Preload-Ansatz.

Aufteilen Ihres Menu-Stylesheets

Die meisten Shopify-Menu-Apps werden mit einer einzigen monolithischen CSS-Datei ausgeliefert, die Layout, Farben, Animationen, responsive Breakpoints und Icon-Stile enthält. Um den kritischen Pfad zu optimieren, müssen Sie diese Datei in zwei Teile aufteilen: kritisch und nicht kritisch.

Hier ist ein praktischer Arbeitsablauf.

Schritt 1: Identifizieren Sie kritische Selektoren

Öffnen Sie Chrome DevTools, gehen Sie zur Registerkarte Coverage (unter More Tools) und laden Sie die Seite neu. Chrome zeigt Ihnen, welche CSS-Regeln während des ersten Renderings verwendet werden. Alles andere ist nicht kritisch.

Für ein Navigationsmenu umfassen kritische Selektoren typischerweise:

  • .menu-container, .menu-nav, .menu-logo
  • Layout-Eigenschaften: display, flex, grid, position, width, height, padding, margin
  • Responsive Breakpoints für Above-the-Fold-Layout

Schritt 2: Extrahieren Sie kritisches CSS

Kopieren Sie die kritischen Selektoren in eine neue Datei, menu-critical.css. Minifizieren Sie sie (entfernen Sie Leerzeichen und Kommentare). Das Ergebnis sollte 2–5 KB sein.

Schritt 3: Binden Sie das kritische CSS inline ein

Konvertieren Sie menu-critical.css in einen <style>-Block im <head> Ihres Themes. In Shopify Liquid:

<style>
  {% include 'menu-critical.css' %}
</style>

Oder fügen Sie das CSS direkt in das <style>-Tag ein.

Schritt 4: Verschieben Sie das vollständige Stylesheet

Laden Sie das vollständige menu.css asynchron mit einer der zuvor beschriebenen Methoden.

<link rel="preload" href="menu.css" as="style" onload="this.onload=null;this.rel='stylesheet'">

Jetzt wird das kritische Layout-CSS sofort geladen (keine Netzwerkverzögerung), und der Rest der Stile wird parallel geladen, ohne die Seite zu blockieren.

Shopify-spezifische CSS-Optimierung

Shopify-Themen verwenden den Filter file.css zum Laden von CSS. Standardmäßig wird damit ein Standard-<link rel="stylesheet">-Tag generiert, das render-blockierend ist.

Um ein Stylesheet nicht blockierend zu machen, ersetzen Sie den Filter durch ein manuelles Tag:

<link rel="preload" href="menu.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="menu.css"></noscript>

Für Theme-Sections, die CSS dynamisch laden, wendet Shopifys Section Rendering API nicht automatisch Preload-Strategien an. Wenn Ihr Menu eine Section ist, müssen Sie sicherstellen, dass das kritische CSS in der Hauptdatei theme.liquid inline ist, nicht im eigenen Stylesheet der Section.

Einige Shopify-Menu-Apps wie Navi+ teilen ihr CSS automatisch in kritische und nicht kritische Teile auf und handhaben das asynchrone Laden für Sie. Wenn Ihre aktuelle Menu-App dies nicht unterstützt, ist es wert, den Entwickler zu bitten, es hinzuzufügen, oder auf ein Tool zu wechseln, das dies bereits tut.

Messung der Auswirkungen

Vor und nach der Optimierung Ihres Menu-CSS messen Sie die Verbesserung mit Lighthouse oder PageSpeed Insights. Achten Sie auf drei spezifische Metriken:

  1. First Contentful Paint (FCP): Die Zeit, wenn der erste Text oder die erste Grafik angezeigt wird. Das Inline-Einbinden von kritischem CSS reduziert FCP, indem render-blockierende Netzwerkanfragen eliminiert werden.
  2. Largest Contentful Paint (LCP): Die Zeit, wenn das größte sichtbare Element fertig ist. Das Entfernen von render-blockierendem CSS ermöglicht es dem Hero-Bild oder der Überschrift, schneller gezeichnet zu werden.
  3. Cumulative Layout Shift (CLS): Ein Maß für visuelle Stabilität. Richtig inline eingebundenes kritisches CSS reserviert Platz für das Menu und verhindert, dass es den Seiteninhalt nach unten verschiebt, während es geladen wird.

Sie sollten sehen, dass FCP und LCP nach dem Verschieben von nicht kritischem Menu-CSS um 200–600 ms auf dem Smartphone sinken. Wenn Sie keine Verbesserung sehen, überprüfen Sie, ob es andere render-blockierende Stylesheets (Theme-CSS, App-CSS) gibt, die noch optimiert werden müssen.

Ein häufiger FehlerEinige Merchantsschieben das gesamte Menu-Stylesheet inline ein, um render-blockierung zu eliminieren, aber dies schlägt fehl, wenn die Datei groß ist. Ein 50-KB-inline-Stylesheet bläht das HTML auf, verlangsamt das HTML-Parsing und verhindert, dass das CSS zwischengespeichert wird. Binden Sie nur die kritische Teilmenge (2–5 KB) inline ein, und verschieben Sie den Rest.

Mobile ist wichtiger

Desktop-Verbindungen sind schnell. Eine 40-KB-CSS-Datei über Breitband erhöht die Verzögerung um vielleicht 50 Millisekunden. Auf dem Smartphone erhöht dieselbe Datei über eine 4G-Verbindung die Verzögerung um 300 Millisekunden. Auf einer langsamen 3G-Verbindung kann es bis zu 800 Millisekunden erhöhen.

Googles Core Web Vitals werden separat für Mobile und Desktop gemessen, und Mobile wird bei den Suchranglisten stärker gewichtet, da der meiste Traffic mobile ist. Die Optimierung Ihres Menu-CSS für Mobile ist nicht optional – es ist die Grundlage.

Testen Sie Ihren Store auf einem echten Gerät über eine echte mobile Verbindung, oder verwenden Sie Chrome DevTools mit aktivierter Drosselung (Fast 3G oder Slow 3G). Sie werden die echten Kosten von render-blockierendem CSS sehen, und die Verbesserung durch Inline-Einbindung und Verschiebung wird offensichtlich.

Wie gut optimiertes Menu-CSS-Laden aussieht

Ein gut optimiertes Navigationsmenu lädt CSS in zwei Etappen. Zunächst ein winziger Block mit inline kritischem CSS (2–5 KB), der Layout-Struktur, Abstände und responsive Breakpoints definiert. Dies wird sofort als Teil des HTML geladen. Zweitens das vollständige Stylesheet (30–50 KB) mit Farben, Hover-Effekten, Animationen und Dropdown-Stilen, das asynchron mit preload oder dem Media-Query-Trick geladen wird.

Die Seite wird innerhalb von 1–2 Sekunden sichtbar, auch bei einer langsamen mobilen Verbindung. Das Menu wird an der richtigen Position angezeigt, ohne das Layout zu verschieben. Die vollständigen Stile werden eine Bruchsekunde später angewendet, unmerklich für den Benutzer, aber messbar für Googles LCP-Berechnung.

Das ist nicht theoretisch. Stores, die dieses Muster implementieren, sehen typischerweise mobile LCP um 400–700 Millisekunden verbessert, verschoben von „needs improvement” zu „good” in Core Web Vitals-Berichten. Das Menu sieht und funktioniert noch genauso, aber der Browser muss nicht mehr auf das vollständige Stylesheet warten, bevor die Seite aufgezeichnet wird.

Dieser Artikel ist Teil des größeren Leitfadens zu Menu und LCP: Wie Navigation Ihr Largest Contentful Paint blockiert.

Teilen Facebook X

Beginnen Sie mit Navi+ AI Menu Builder

Wählen Sie Ihre Plattform — kostenlos zu installieren, in Minuten live.