Co je CLS (Cumulative Layout Shift) a proč na něm záleží
Cumulative Layout Shift (CLS) je metrika Core Web Vitals, která měří vizuální stabilitu stránky. Vyjadřuje, do jaké míry se prvky na obrazovce nečekaně posouvají během načítání nebo interakce, aniž by k tomu uživatel dal přímý podnět. Vysoké CLS snižuje čitelnost, způsobuje chybné kliknutí a zhoršuje konverze i vnímanou kvalitu značky.
- Dobré: CLS ≤ 0,1
- Vyžaduje zlepšení: 0,1 < CLS ≤ 0,25
- Špatné: CLS > 0,25
Jak se CLS počítá (Session Windowed CLS)
CLS se počítá jako součet událostí layout shift v rámci takzvaných relací posunů (session windows). Každý posun má skóre: impact fraction × distance fraction.
- Impact fraction: podíl viditelné oblasti, který zasáhne posun prvku mezi dvěma snímky.
- Distance fraction: jak velkou část výšky nebo šířky viewportu se prvek posunul (větší z obou hodnot).
- Relace posunů: seskupení posunů s maximální prodlevou 1 s a délkou okna 5 s; výsledné CLS je maximum ze všech relací.
CLS se počítá pouze u neúmyslných posunů, které nejsou způsobeny přímým vstupem (kliknutí, klávesnice). Animace založené na transform obvykle posun layoutu nezpůsobují.
Typické příčiny nestability layoutu
- Obrázky a video bez definovaného poměru stran (
width/heightneboaspect-ratio). - Reklamní boxy, vložené prvky a moduly iFrame bez vyhrazeného prostoru.
- Zpožděné načítání webfontů (FOIT/FOUT) a změna zalomení textu po načtení fontu.
- Vkládání prvků nad již vykreslený obsah (bannery, lišty, dialogy cookies, A/B skripty).
- Lazy load bez zástupných prvků (placeholderů) nebo skeletonů se stabilními rozměry.
- Hydratace aplikací SPA/SSR, při níž klientská verze mění rozložení oproti serverové.
- Dynamické CSS a styly aplikované až po spuštění asynchronních skriptů.
Diagnostika: nástroje a postup
- Field data: sledujte skutečná uživatelská data (RUM). Integrační skript Web Vitals nebo analytický nástroj umožní měřit CLS na vzorku návštěvníků a segmentovat podle zařízení a sítí.
- Lab data: použijte Lighthouse a emulaci v Chrome DevTools. Aktivujte překryv Layout Shift Regions, který zobrazuje přesné oblasti, jež se posunuly.
- Opakovatelné scénáře: testujte s blokováním/odblokováním reklam, pomalou sítí a prázdnou cache, abyste simulovali reálné podmínky.
- Trasy SPA: spouštějte měření při přechodech mezi routami; nestabilita se často projeví až po prvním interaktivním zobrazení.
- Regresní testy: zaveďte prahové limity do CI/CD (např. sestavení selže, pokud CLS u klíčových šablon překročí limit).
Ověřené techniky ke snížení CLS
- Vyhraďte prostor pro média: vždy definujte rozměry nebo
aspect-ratiopro<img>a kontejnery videa. - Stabilní reklamy a vložené prvky: vyhraďte minimální výšku; u adaptivních formátů použijte kontejnery s pravidly pro náhradní řešení (např.
min-height). - Fonty bez blikání: proveďte předběžné načtení a preload kritických fontů; použijte
font-display: swapnebooptionala font fallback s podobnými metrikami (line-height, letter-spacing). - Nevkládejte obsah nad fold: doplňky, souhlasy a promo panely vkládejte pod stávající obsah nebo pro ně od začátku vyhraďte místo.
- Animace pomocí transform: pohyb a nástupy realizujte přes
transform/opacity, nikoli změnou vlastností layoutu (top/left/width/height). - Lazy load se skeletony: používejte zástupné prvky s pevnými rozměry; obrázky načítejte pomocí
loading="lazy"adecoding="async". - Stabilní hydratace: slaďte markup serveru a klienta; vyhněte se podmínkám, které po hydrataci mění počet prvků.
- Deterministické A/B testování: vybranou variantu vykreslete už na serveru nebo vyhraďte místo pro největší variantu.
Vzorové implementační postupy (bez překvapení)
- Obrázky: přidejte
widthaheightpodle skutečných pixelových rozměrů; pro responzivní design použijte CSSmax-width: 100%aheight: auto– prohlížeč vypočítá stabilní poměr stran. - CSS aspect-ratio: u karet, videa a kontejnerů vložených prvků používejte
aspect-ratio: 16 / 9nebo dynamické hodnoty získané z dat. - Reklamní slot: vytvořte kontejner s
min-heightpro nejčastější formát; u menší kreativy vycentrujte obsah, nikoli kontejner. - Webfonty: použijte
<link rel="preload" as="font" type="font/woff2" crossorigin>pro klíčové řezy a nastavtefont-displaypodle strategie načítání. - Lišta cookies: od začátku vyhraďte pevný prostor (např.
padding-bottomnabodyu spodní lišty) nebo ji vykreslete jako overlay bez posunu layoutu.
Specifika moderních frontendových architektur
- SSR/SSG: zajistěte, aby klient nepřepisoval HTML ze serveru způsobem, který mění rozměry (podmíněné vykreslování, rozdíly v datech, kontrola protokolů hydration mismatch).
- SPA a routování: používejte trvalé struktury layoutu a nahrazujte pouze obsah; skeletony by měly mít podobnou výšku jako výsledné komponenty.
- Virtuální seznamy: definujte pevnou výšku položek nebo predikční model výšek, aby recyklace prvků nezpůsobovala skoky.
- CMS a UGC: šablony musí kontrolovat rozměry vložených prvků (mapy, příspěvky ze sociálních sítí) a automaticky jim nastavovat
aspect-ratio.
Měření v praxi: field vs. lab
Lab (Lighthouse, DevTools) umožňuje rychlé iterace, ale nezachytí skutečné rozdíly mezi zařízeními, sítěmi a reklamami. Měření field (RUM) poskytují percentily (např. p75) a odrážejí skutečné složení návštěvnosti. Optimalizace by měla cílit na p75 CLS ≤ 0,1 u všech klíčových šablon (domovská stránka, produkt, kategorie, článek, košík).
Kontrolní seznam pro zlepšení CLS
- Má každý obrázek definované
width/heightneboaspect-ratio? - Mají reklamní/affiliate/iframe zóny stabilní kontejner a
min-height? - Je lišta cookies/promo panel bez posunu obsahu (overlay nebo vyhrazené místo)?
- Je načítání fontů přehledné (font loading: preload, swap/optional) a náhradní font konzistentní?
- Má uživatelské rozhraní načítané metodou lazy load skeletony s odpovídajícími rozměry?
- Probíhá hydratace bez změny počtu/pořadí prvků a bez přepočítání layoutu?
- Jsou animace řešeny pomocí
transform/opacitynamísto vlastností layoutu? - Běží metriky RUM a sledujete p75 podle zařízení a šablon?
Byznysový dopad: souvislost se SEO, AIO/AEO a konverzemi
CLS je součástí kvality stránek v organickém vyhledávání a ovlivňuje viditelnost, ale především zlepšuje použitelnost pro LLM/AI agenty (AIO/AEO): stabilní rozhraní umožňuje spolehlivější extrakci dat a automatizované interakce bez chyb. Nižší CLS snižuje chybovost kliknutí, zvyšuje dokončení mikroakcí a přímo se promítá do tržeb.
Plán implementace
- Audit šablon: identifikujte hlavní cesty (SEO/SEM/Direct) a seznam prvků, které posouvají layout.
- Stabilizace médií a slotů: přidejte rozměry, aspect-ratio a minimální výšky.
- Optimalizace fontů: preload kritických řezů, vyvážené nastavení
font-display, sladěný náhradní font. - Zásady pro UI: žádné vkládání nad fold, používejte overlaye a animace přes transform.
- Soulad SPA/SSR: stabilní markup a hydratace; skeletony se skutečnými rozměry.
- Monitoring: nasaďte RUM, sledujte p75, zařízení a regrese v CI.
Nejčastější anti-patterny, kterým se vyhnout
- Vkládání bannerů nad nadpis článku po načtení.
- Dynamické změny velikosti komponent bez přechodu přes
transform. - Nedefinované rozměry hlavních obrázků a carouselů.
- Asynchronní načítání CSS, které změní typografii a naruší zalomení textu.
- Widgety třetích stran bez sandboxu a bez pevně stanovené šířky/výšky.
Shrnutí
CLS je klíčový ukazatel vizuální stability. Technické zásady jsou jednoduché: vyhraďte prostor, stabilizujte načítání fontů a médií, po načtení skriptů nehýbejte layoutem, animujte pomocí transform/opacity a měřte v reálném provozu. Důsledná implementace přinese plynulejší UX, lepší výkon SEO a robustnější zpracování AIO/AEO vašich stránek.
