Kumulative Layoutverschiebung (CLS)

Was Cumulative Layout Shift misst, wie der Wert berechnet wird (Auswirkung × Entfernung), Sitzungsfenster, Schwellenwerte, häufige Ursachen sowie ihre Behebung und Diagnose.

Erstveröffentlicht: 26. Juni 2026 · Zuletzt aktualisiert: 9. Aug. 2026 · Fortgeschritten
Sprachen

Cumulative Layout Shift (CLS) ist das Core Web Vital für visuelle Stabilität: wie stark sich sichtbarer Inhalt während der Nutzung unerwartet bewegt. Der Wert ist einheitenlos (Impact fraction × Distance fraction pro Shift); seit Juni 2021 ist er das größte Sitzungsfenster von Shifts und nicht mehr die Lebenszeitsumme. Gut ist ≤ 0,1 am 75. Perzentil der Felddaten; 0,1–0,25 ist verbesserungsbedürftig, über 0,25 ist schlecht. Häufige Ursachen sind Bilder, Anzeigen, Iframes und Embeds ohne Größenangaben, Webfonts sowie oberhalb des Folds eingeschobener Inhalt. Reserviere Platz mit width/height oder aspect-ratio, passe font-display an und animiere mit transform. Lighthouse liest oft nahezu 0, weil es nicht mit der Seite interagiert und nicht den gesamten Lebenszyklus ausführt; Felddaten aus CrUX zeigen, worauf Google tatsächlich rankt.

TL;DR — CLS ist das Core Web Vital für visuelle Stabilität. Jeder Shift wird als impact fraction × distance fraction bewertet; die Metrik selbst ist das größte Sitzungsfenster von Shifts (≤ 1 s zwischen Shifts, ≤ 5 s Fenster) – nicht die Lebenszeitsumme, wie vor Juni 2021. Gut ist ≤ 0,1, verbesserungsbedürftig ≤ 0,25, schlecht > 0,25, am 75. Perzentil der Felddaten. Nur im Viewport sichtbare Shifts zählen; Shifts innerhalb von 500 ms einer diskreten Eingabe werden ausgeschlossen (Scrollen nicht). Ursachen sind Bilder/Videos/Anzeigen/Iframes/Embeds ohne Größen, Webfonts und über bestehende Inhalte eingeschobener Inhalt; Abhilfe schaffen reservierter Platz, font-display/size-adjust und Animationen ausschließlich mit transform. Die Falle: Lighthouse (Labor) liest routinemäßig nahezu 0, weil es nicht mit der Seite interagiert und nicht den gesamten Lebenszyklus ausführt – Felddaten (CrUX) sind das, was Google tatsächlich misst.

Was CLS misst

Googles Beschreibung lautet: „Cumulative Layout Shift (CLS) ist eine stabile Core-Web-Vital-Metrik. Sie ist eine wichtige nutzerzentrierte Metrik für die visuelle Stabilität, weil sie hilft zu quantifizieren, wie oft Nutzer unerwartete Layout Shifts erleben.“ Das entscheidende Wort ist unerwartet – Inhalte, die sich von selbst bewegen, nicht wegen einer Aktion des Nutzers.

CLS gehört mit Largest Contentful Paint (Ladezeit) und Interaction to Next Paint (Reaktionsfähigkeit) zum Trio der Core Web Vitals. Während LCP und INP in Millisekunden gemessen werden, ist CLS der Sonderfall: ein einheitenloser Verhältniswert. Das führt ständig zu Missverständnissen. Ein CLS von 0,05 sind nicht 50 ms; der Wert hat überhaupt keine Zeiteinheit.

Die Formel: Auswirkung × Entfernung

Google definiert den Wert pro Shift so:

layout shift score = impact fraction × distance fraction
  • Impact fraction „misst, wie instabile Elemente die Viewport-Fläche zwischen zwei Frames beeinflussen“ – also die kombinierte sichtbare Fläche der bewegten Elemente vor und nach der Verschiebung als Anteil des Viewports.
  • Distance fraction ist „die größte horizontale oder vertikale Entfernung, die sich ein instabiles Element im Frame bewegt hat, geteilt durch die größte Dimension des Viewports (Breite oder Höhe, je nachdem, was größer ist)“.

Beide Dimensionen zählen unabhängig voneinander. Ein kleines Element, das über fast den ganzen Bildschirm wandert, und ein großes Element, das nur leicht ruckelt, können sehr unterschiedliche Werte erreichen. Das Rechenbeispiel von web.dev: Eine Impact fraction von 0.75 und eine Distance fraction von 0.25 ergeben einen Layout-Shift-Wert von 0.1875.

One shift scores the visible area affected multiplied by the farthest movement relative to the viewport. Quelle: web.dev

Three cards form the equation. Impact fraction is 0.75: the visible viewport area affected between two frames. Distance fraction is 0.25: the farthest movement divided by the viewport's largest dimension. Multiplying them produces a unitless individual layout-shift score of 0.1875. CLS ultimately keeps the largest session-window total, not a lifetime sum of every shift.

© Patrick Stox LLC · CC BY 4.0 ·

Sitzungsfenster: der Teil, bei dem sich fast alle irren

Hier ist der am häufigsten falsch wiedergegebene CLS-Fakt und der, den du dir am meisten merken solltest: CLS ist nicht die Summe aller Shifts über die Lebensdauer der Seite. Früher war das so – das änderte sich im Juni 2021.

Heute gilt: „CLS misst den größten Burst von Layout-Shift-Werten für jeden unerwarteten Layout Shift, der während des gesamten Lebenszyklus einer Seite auftritt.“ Ein Burst ist ein Sitzungsfenster: „ein oder mehrere einzelne Layout Shifts treten schnell hintereinander auf, mit weniger als 1 Sekunde zwischen den Shifts und höchstens 5 Sekunden für die gesamte Fensterdauer.“ CLS ist der Wert des größten solchen Fensters – nicht die Summe und nicht der Durchschnitt.

Evidence for this claim CLS uses the largest session window of unexpected layout shifts, with gaps under one second and a maximum five-second window; recent discrete input can exclude a shift. Scope: Current CLS session-window and recent-input rules. Confidence: high · Verified: web.dev: Cumulative Layout Shift

Warum die Änderung? Die alte Definition, alles zu summieren, bestrafte langlebige Seiten stillschweigend. Eine Single-Page-App oder ein Infinite-Scroll-Feed sammelte allein durch seine längere Existenz mehr CLS, selbst wenn jeder einzelne Shift klein und gut verteilt war. Das Chrome-Speed-Metrics-Team wechselte zu einem maximalen Sitzungsfenster, um die Dauer nicht zu bestrafen, und wählte maximal statt durchschnittlich, damit die Behebung eines kleinen sekundären Shifts den Wert nicht paradoxerweise verschlechtert. Nach der Einführung bekam kein Origin einen schlechteren Wert, bei den meisten änderte sich nichts und ein Teil der langsamen UIs und Infinite-Scroll-Seiten verbesserte sich. Ein älterer Beitrag, der noch von der „Summe aller Shifts“ spricht, ist veraltet.

Was zählt – und was nicht

Drei Ausschlüsse bestimmen, was tatsächlich in deinen Wert eingeht:

  • Unterhalb des Folds zählt es nicht. Bewertet werden nur Shifts von Inhalten, die im aktuellen Viewport sichtbar sind. Ein Shift am Ende einer langen Seite, zu dem der Nutzer nie scrollt, hat keine Auswirkung. In der Praxis bringt es fast immer mehr, sichtbare Shifts zu beheben, als weit unten auf der Seite nach ihnen zu suchen.
  • Nutzerinitiierte Shifts erhalten 500 ms Schonfrist. „Layout Shifts, die innerhalb von 500 Millisekunden nach einer Nutzereingabe auftreten, erhalten das Flag hadRecentInput und können daher aus den Berechnungen ausgeschlossen werden.“ Google sagt: Shifts, „die als Reaktion auf Nutzerinteraktionen auftreten, sind im Allgemeinen in Ordnung, solange der Shift zeitlich nah genug an der Interaktion auftritt, dass der Zusammenhang für den Nutzer klar ist.“ Ein Akkordeon öffnen oder ein Menü aufklappen – diese Bewegung ist erwartet und wird verziehen.
  • Scrollen ist aber keine Schonfrist. Der Ausschluss von 500 ms gilt nur für diskrete Ereignisse – Tippen, Klicken oder eine Tastenbetätigung. Kontinuierliche Gesten wie Scrollen oder Pinch-Zoom lösen das Ausschlussfenster nicht aus. Verschiebt sich Inhalt während des Scrollens, zählt das weiterhin. Diese Unterscheidung wird in vielen Darstellungen falsch erklärt; sie ist wichtig.
Evidence for this claim A layout shift occurring within 500 milliseconds of a qualifying recent user input has hadRecentInput set and is excluded from CLS. Scope: field and lab Confidence: high · Verified: Cumulative Layout Shift (CLS)

Schwellenwerte und Herkunft des Werts

„Für eine gute Nutzererfahrung sollten Websites einen CLS-Wert von 0,1 oder weniger anstreben“, gemessen am „75. Perzentil der Seitenaufrufe, aufgeteilt nach Mobil- und Desktopgeräten“. Die vollständigen Bereiche sind:

Evidence for this claim CLS is good at 0.1 or less and poor above 0.25, assessed at the 75th percentile of page loads. Scope: Current web.dev CLS field thresholds. Confidence: high · Verified: web.dev: Cumulative Layout Shift
  • Gut: ≤ 0,1
  • Verbesserungsbedürftig: 0,1–0,25
  • Schlecht: > 0,25
Evidence for this claim CLS is good at 0.1 or less and poor above 0.25, assessed at the 75th percentile of page loads. Scope: Current web.dev CLS field thresholds. Confidence: high · Verified: web.dev: Cumulative Layout Shift

Die Grenze von 0,1 ist nicht willkürlich. Googles Nutzerforschung ergab, dass „Shift-Werte ab 0,15 durchgehend als störend wahrgenommen wurden, während Shifts von 0,1 und weniger zwar auffielen, aber nicht übermäßig störend waren.“ Man entschied sich unter anderem deshalb für 0,1 statt für eine strengere Grenze, weil Drittanbieter-Embeds wie Anzeigen und soziale Widgets so häufig Shifts verursachen, dass ein strengerer Maßstab für das echte Web unpraktisch wäre.

Der Teil „75. Perzentil der Felddaten“ ist entscheidend – und führt uns zur größten Messfalle.

Labor und Feld: Warum die Werte nicht übereinstimmen

Hier tappt die Mehrheit in die Falle. Lighthouse und andere Labortools melden oft einen CLS nahe 0,0, während Felddaten – und Google – einen deutlich schlechteren Wert zeigen. Der Unterschied bedeutet nicht, dass eines der Tools unehrlich ist; es geht um den Umfang. Ein Labortest ist ein einzelner, kurzer, skriptgesteuerter Seitenaufruf: Er scrollt nicht, klickt nicht und bleibt nicht lange genug, sondern erfasst nur Shifts beim initialen Laden. Felddaten (CrUX) aggregieren echte Besuche vieler Nutzer, Geräte und Navigationen über ein rollierendes Fenster; CLS ist für den gesamten Lebenszyklus der Seite definiert – Menüs werden geöffnet, Lazy Content lädt beim Scrollen, späte Anzeigen werden gefüllt, und die Sitzung kann beliebig lange dauern. Ein kurzer Labortest kann den Großteil davon strukturell nicht sehen.

Die praktische Regel lautet daher: Nutze Labordaten zum Debuggen eines bestimmten Shifts und Felddaten, um deinen echten Wert zu kennen. Google rankt anhand von Felddaten aus dem Chrome User Experience Report (CrUX), die in PageSpeed Insights und der Search Console sichtbar sind. Wenn Lighthouse 0,0 liest, PageSpeed Insights aber 0,18 zeigt, behandle den Feldwert als denjenigen, der deine tatsächlichen Nutzer widerspiegelt – und reproduziere den Shift anschließend im Labor, indem du wie ein echter Besucher mit der Seite interagierst. Zwei weitere Unterschiede im Umfang sind wichtig: Die meisten Tools einschließlich Lighthouse übertragen Layout Shifts aus Iframes nicht in den Wert des übergeordneten Dokuments, obwohl CrUX sie berücksichtigen kann. Auch RUM auf Basis der Layout Instability API hat diesen blinden Fleck bei Iframes; deshalb kann dein eigenes Real-User-Monitoring einen CrUX-Wert, der schlechter aussieht als deine First-Party-Zuordnung, nicht vollständig erklären.

Die häufigsten Ursachen

Ungefähr in der Reihenfolge, in der ich sie antreffe:

  1. Bilder und Videos ohne Abmessungen. Ohne reservierte Höhe springt alles darunter, sobald das Medium geladen ist.
  2. Anzeigen, Embeds und Iframes ohne reservierten Platz. Werbenetzwerke liefern dynamische Größen; Embeds kündigen ihre Höhe vor dem Laden nicht an.
  3. Dynamisch oberhalb bestehender Inhalte eingefügter Inhalt. Cookie-Banner, Hinweisleisten, „Verwandt“-Widgets, spät geladene Werbeaktionen – alles, was bereits sichtbaren Inhalt nach unten schiebt.
  4. Webfonts (FOIT/FOUT). Wenn die eigene Schrift die Fallback-Schrift ersetzt, läuft der Text neu um, falls sich ihre Metriken unterscheiden.
  5. Animationen von Layout-auslösenden Eigenschaften. Das Animieren von top, left, margin, box-shadow oder box-sizing zwingt den Browser, die Seite in jedem Frame neu zu layouten.

Die Lösungen

Jede Lösung entspricht ihrer Ursache:

  • Bilder/Videos – Platz reservieren. Setze die Attribute width und height, damit der Browser das Seitenverhältnis berechnet und den Bereich freihält; kombiniere das für responsive Verhalten mit img { height: auto; width: 100%; } oder verwende die CSS-Eigenschaft aspect-ratio. Auf den meisten Websites ist das die CLS-Maßnahme mit dem größten Hebel.
  • Anzeigen/Embeds/Iframes – ebenfalls Platz reservieren. Nutze min-height oder aspect-ratio am Container. Für Anzeigenplätze ist Googles Publisher-Tag-Empfehlung eindeutig: „Eine feste Höhe und Breite direkt am div des Anzeigenplatzes festzulegen, ist die wirksamste Methode.“ Bei Plätzen mit mehreren Größen reservierst du den Platz für die größte konfigurierte Größe. Schiebe spät ladenden Inhalt nach unten, damit ein verbleibender Shift unterhalb des Folds liegt.
  • Dynamischer Inhalt – nicht in den Fluss einsetzen. Reserviere einen Platzhalter in der endgültigen Größe oder lege den Inhalt über, statt ihn einzufügen. Skeleton-Loader helfen nur, wenn sie exakt die endgültigen Abmessungen haben – ein Skeleton, das nur wenige Pixel kürzer als der echte Inhalt ist, verursacht weiterhin einen Shift. Bevorzuge vom Nutzer ausgelöste Ladevorgänge („Mehr laden“) gegenüber überraschenden Einfügungen.
  • Schriften – Metriken angleichen. font-display: optional ist der einzige Wert mit praktisch null CLS-Risiko; swap verkürzt die Zeit unsichtbaren Textes, kann beim Austausch aber einen Shift erzeugen. Noch besser sind die CSS-Metriküberschreibungen size-adjust, ascent-override, descent-override und line-gap-override, mit denen du die Fallback-Schrift an die Webfont anpasst. Kritische Schriften vorladen.
  • Animationen – nur transform. Animieren solltest du mit transform (translate, scale, rotate) statt mit top, left oder margin. Transform-basierte Animationen werden zusammengesetzt und lösen kein neues Layout aus; dadurch verschieben sie nichts.

Wie CLS in Rankings einzuordnen ist

CLS ist ein Eingangswert für Googles Signal zur Seitenerfahrung. Google sagt, dass Core Web Vitals von seinen Rankingsystemen verwendet werden – die aktuelle Search-Dokumentation veröffentlicht aber weder ein genaues CLS-Gewicht noch eine Tie-Breaker-Regel oder eine Ranking-Garantie. Behandle jede konkrete Mechanik, auch „CLS ist ein Tie-Breaker“, deshalb als Arbeitsnäherung und nicht als dokumentierte Tatsache. Mein ständiger Rat zu Core Web Vitals lautet: Erreiche den Bereich „Gut“ und mach weiter. Die meisten Websites sehen keinen messbaren Ranking- oder Geschäftseffekt, wenn sie 0,08 auf 0,02 drücken; ein einzelner Wert erklärt selten allein Umsatz oder Conversion. CLS gehört zur Grundausstattung – die Grenze sollte überschritten werden, aber CLS darf nicht zum Mittelpunkt deines SEO-Programms werden und dabei LCP, INP oder schlicht deinen eigentlichen Inhalt verdrängen.

Zwei operative Hinweise ersparen viel Verwirrung:

  • CrUX hinkt ungefähr 28 Tage hinterher. Es ist ein rollierendes 28-Tage-Fenster. Eine heute veröffentlichte Korrektur wird sich in PageSpeed Insights oder der Search Console daher erst nach Wochen vollständig zeigen. Keine Panik, wenn sich der Wert am nächsten Morgen nicht bewegt.
  • Das zugeordnete Element ist oft nicht die Root Cause. Die Layout Shift Attribution API zeigt, welches Element sich bewegt hat; web.dev weist aber darauf hin, dass „diese Elemente möglicherweise nur indirekt mit der ‚Root Cause‘ der Layout-Instabilität zusammenhängen“. Der gesprungene Text ist meist das Opfer eines unsized Bildes darüber, das spät geladen wurde – behebe die Ursache, nicht das Symptom. Arbeite mit einer Zeitstempel-zu-Trigger-Schleife: Notiere die Startzeit des Shifts und prüfe dann, was sich im selben Zeitfenster sonst geändert hat – eine abgeschlossene Netzwerkanfrage, ein eingetroffenes Bild oder eine Schrift, eine Größenänderung oder eine Klassen-/Stiländerung. Behandle den zugeordneten Knoten als Hinweis, nicht als Beweis, bis du ihn diesem Trigger zuordnen kannst.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.