Przejdź do treści

CLS – jak naprawić Cumulative Layout Shift na stronie

Opublikowano: 17 stycznia 2026 | Zaktualizowano: 17 marca 2026

Klikasz przycisk, a w ostatniej chwili strona się przesuwa i trafiasz w reklamę. Znasz to? Właśnie tak działa zły **Cumulative Layout Shift** – wskaźnik mierzący niestabilność wizualna strony. Google traktuje CLS jako jeden z trzech Core Web Vitals, więc jego wartość bezpośrednio wpływa na pozycje w wynikach wyszukiwania. Dobry CLS to poniżej 0.1 – a jeśli Twoja strona przekracza te granicę, tracisz zarówno użytkowników, jak i widoczność w Google. W tym poradniku pokazuje, jak zdiagnozować problem i naprawić go raz na zawsze.

Krótka odpowiedź

Główne przyczyny CLS to obrazy bez podanych wymiarów, reklamy i embedy bez zarezerwowanego miejsca, dynamicznie ładowane treści oraz web fonty powodujące FOIT/FOUT. Naprawisz to dodając atrybuty width/height do obrazów, rezerwując miejsce dla elementów dynamicznych, stosując font-display: optional i unikając wstawiania treści powyżej istniejącego contentu.

Usługi KC Mobile

Sprawdź naszą ofertę

Potrzebujesz pomocy specjalisty? Skorzystaj z naszych usług i rozwiń swój biznes online.

Co dokładnie mierzy CLS i dlaczego ma znaczenie

CLS (Cumulative Layout Shift) mierzy stabilność wizualna strony – czyli jak bardzo elementy na stronie "przeskakują" podczas ładowania. Klikasz przycisk, a w tym momencie strona się przesuwa i trafiasz w reklamę. Właśnie to mierzy CLS.

Progi Google:
- Dobry: < 0,1
- Wymaga poprawy: 0,1–0,25
- Zły: > 0,25

CLS jest jednym z trzech Core Web Vitals – czynników rankingowych Google od 2021 roku (obok LCP i INP). Strony ze złym CLS tracą pozycje w wyszukiwarce, szczególnie na mobile.

Zmiana definicji CLS w 2024 – session windows

Ważna zmiana, o której mało kto pisze. Do 2024 roku CLS mierzył łączne przesunięcie przez cały cykl ładowania strony. Teraz Google stosuje metodę "session windows" – mierzy najgorszy 5-sekundowy fragment sesji z 1-sekundowa przerwą między przesunięciami. W praktyce oznacza to, ze pojedyncze duże przesunięcie (np. Banner reklamowy ładujący po 8 sekundach) może mieć większy wpływ na CLS niż kilka drobnych przesunięć rozłożonych w czasie.

Wolisz, żebyśmy zrobili to za Ciebie?

Oszczędź czas i uniknij błędów. Zostaw kontakt – wdrożymy to rozwiązanie profesjonalnie.

  • Wdrożenie krok po kroku przez doświadczony zespół
  • Konkretny timeline + cena dopasowana do projektu
  • 20+ lat doświadczenia w projektów w 15+ lat

Najczęstsze przyczyny złego CLS

Obrazy bez atrybutów width i height

To przyczyna numer jeden. Przegladarka nie wie, ile miejsca zarezerwować na obraz, więc treść pod nim "podskakuje" po załadowaniu grafiki. Dotyczy zarówno zdjęć produktowych, jak i banerów, ikon i tła.

Dynamicznie ładowane reklamy i banery

Reklamy AdSense, bannery afiliacyjne, popupy – wszystko, co wstrzykuje się do DOM po załadowaniu strony. Jeśli reklama nie ma zarezerwowanego miejsca, popycha resztę treści w dół.

Web fonty i FOIT/FOUT

Kiedy przegladarka pobiera niestandardową czcionkę, tekst może się wyświetlić w foncie systemowym (FOUT – Flash of Unstyled Text) lub być niewidoczny do momentu załadowania (FOIT – Flash of Invisible Text). Oba zjawiska powodują przesunięcie layoutu.

Dynamicznie wstrzykiwany content

Cookie banery, chat widgety, powiadomienia push, pop-upy z zapisem na newsletter. Wszystko, co pojawia się po załadowaniu strony i "wypycha" istniejaca treść.

Lazy loading zle zaimplementowany

Lazy loading obrazów to dobra praktyka (oszczędza transfer), ale jeśli obrazy poniżej foldu nie mają zdefiniowanych wymiarów, przeladarka musi je "zgadywać". Efekt – przesunięcie layoutu w momencie ładowania obrazu.

Iframes i embedy bez wymiarów

Osadzone filmy YouTube, mapy Google, posty z social media – jeśli nie mają zdefiniowanego aspect-ratio lub min-height, powodują layout shift. Sprawdź też, jak wpływają na Core Web Vitals.

Jak naprawić CLS – rozwiązania krok po kroku

Dodanie width i height do obrazów

Najprostsze i najskuteczniejsze rozwiązanie. Każdy tag `` powinien mieć atrybuty width i height:

<img src="produkt.webp" width="800" height="600" alt="Opis produktu">

Przegladarka zarezerwuje miejsce na obraz jeszcze przed jego załadowaniem. Nie musisz podawać dokładnych pikseli – wystarczy proporcja (np. 4:3).

CSS aspect-ratio dla responsywnych kontenerów

Dla elementów, których wymiary zmieniają się w zależności od ekranu:

.video-container {
 aspect-ratio: 16 / 9;
 width: 100%;
}

.banner-slot {
 aspect-ratio: 728 / 90;
 min-height: 90px;
}

Aspect-ratio jest wspierany przez wszystkie nowoczesne przeglądarki od 2022 roku. Nie musisz już używać hacka z padding-bottom.

font-display: swap + preload czcionek

Dodaj `font-display: swap` do deklaracji @font-face – tekst wyświetli się od razu w foncie systemowym, a po załadowaniu niestandardowej czcionki podmieni się płynnie. Dodatkowo preloaduj najważniejsze czcionki:

<link rel="preload" href="/fonts/main.woff2" as="font" type="font/woff2" crossorigin>
@font-face {
 font-family: 'MainFont';
 src: url('/fonts/main.woff2') format('woff2');
 font-display: swap;
}

Rezerwacja miejsca na reklamy

Przed załadowaniem reklamy kontener powinien mieć zdefiniowany min-height:

.ad-slot-leaderboard {
 min-height: 90px;
 width: 100%;
 background: #f5f5f5;
}

Nawet jeśli reklama się nie załaduje, układ strony pozostanie stabilny.

Skeleton loading dla dynamicznego contentu

Zamiast wstrzykiwac treść "z niczego", wyświetl placeholder o takich samych wymiarach. Technika znana z aplikacji mobilnych – działa równie dobrze na stronach www.

Potrzebujesz audytu szybkości strony? Sprawdź naszą ofertę pozycjonowania SEO lub skontaktuj się z nami.

CLS w WordPress – typowe problemy i poprawki

Elementor i Divi

Sliders, animacje wejścia, dynamic widgets – te elementy często powodują layout shift, bo ładują się asynchronicznie. Rozwiązanie: ustaw stala wysokość hero section (min-height w px lub vh), wyłącz animacje "fade in" na elementach above the fold, unikaj sliderów z różnym rozmiarem slajdów.

WooCommerce

Galeria produktów (swiper/lightbox) bez zdefiniowanych wymiarów to klasyczne źródło CLS. Podobnie warianty produktu zmieniające cenę i opis – rezerwuj miejsce na najdłuższy wariant. Lazy-loaded images na stronie produktowej powinny mieć explicite width i height.

Wtyczki cache i optymalizacji

WP Rocket i LiteSpeed Cache oferują "Remove Unused CSS" i "Delay JavaScript". Te funkcje mogą pogorszyć CLS, jeśli opóźnia załadowanie CSS odpowiedzialnego za layout. Przetestuj po włączeniu – jeśli CLS wzrośnie, wyłącz opoznianie krytycznego CSS.

Motyw – hero section bez wysokości

Większość motywów WordPress nie definiuje stałej wysokości hero section. Po załadowaniu obrazu tła cala strona "przeskakuje". Poprawka: dodaj min-height do sekcji hero w CSS customizera lub w pliku functions.php.

Narzędzia do diagnozowania CLS

  • PageSpeed Insights (pagespeed.web.dev) – pokazuje zarówno lab data (symulacja) jak i field data (realne dane użytkowników z CrUX). Najważniejsze źródło prawdy o CLS.
  • Chrome DevTools > Performance tab – nagraj sesje, znajdź dokładnie który element powoduje layout shift. Szukaj "Layout Shift" w flamegraph.
  • Web Vitals Extension (Chrome) – wyświetla CLS, LCP i INP w czasie rzeczywistym podczas przeglądania strony. Świetne do szybkiego testowania po zmianach.
  • Google Search Console > Core Web Vitals – raport z danymi field data dla całej witryny. Pokazuje które URL-e mają problem z CLS.
  • CrUX Dashboard (Google Data Studio) – historyczne dane Core Web Vitals. Przydatne do śledzenia trendów po wdrożeniu poprawek.

Checklist naprawy CLS – co sprawdzić w pierwszej kolejności

1. Wszystkie obrazy mają atrybuty width i height (lub CSS aspect-ratio)
2. Reklamy i bannery mają zarezerwowane miejsce (min-height)
3. Web fonty uzywaaja font-display: swap + sa preloadowane
4. Iframes i embedy (YouTube, mapy) mają zdefiniowane wymiary
5. Cookie banner i chat widget nie przesuwają treści strony
6. Hero section ma stala wysokość (min-height)
7. Lazy loading nie dotyczy obrazów above the fold
8. Elementor/Divi sliders mają stały rozmiar konteneraa
9. WooCommerce gallery ma zdefiniowane wymiary kontenerów
10. "Remove Unused CSS" w WP Rocket/LiteSpeed nie opóźnia krytycznego CSS

Priorytet naprawy: punkty 1–3 dają największy efekt przy najmniejszym nakładzie pracy. Zacznij od nich – często to wystarczy, żeby zejść poniżej progu 0,1.

Potrzebujesz pomocy z optymalizacja Core Web Vitals? Skontaktuj się z nami – poprawiamy wydajność stron WordPress i WooCommerce.

Wspomniane narzędzia

Chrome DevTools PageSpeed Insights Lighthouse Web Vitals Extension Google Search Console Layout Shift Debugger

Chcesz więcej ruchu z Google?

Pozycjonujemy strony firmowe i sklepy internetowe. White-hat SEO, comiesięczne raporty. Bez długich umów.

Najczęściej zadawane pytania

Jaki CLS jest akceptowalny dla Google w 2026?
Google uznaje CLS poniżej 0,1 za "dobry". Wartość między 0,1 a 0,25 "wymaga poprawy", a powyżej 0,25 jest "zla". W praktyce warto celów w CLS poniżej 0,05 – daje to margines bezpieczeństwa, bo różne urządzenia i połączenia internetowe mogą generować nieco inne wyniki. Google mierzy CLS na danych 75. Percentyla użytkowników.
Czy CLS wpływa na pozycje w wyszukiwarce?
Tak – CLS jest jednym z trzech Core Web Vitals, które Google używa jako czynnik rankingowy od czerwca 2021. Nie jest to najważniejszy czynnik (treść i linki mają wieksza wagę), ale przy dwóch stronach o podobnej jakości treści lepsza CLS może przechylic szale. Na mobile wpływ jest silniejszy niż na desktop.
Jak naprawić CLS spowodowany przez reklamy AdSense?
Zarezerwuj miejsce na reklamę za pomocą CSS: ustaw min-height na kontenerze reklamy odpowiadający rozmiarowi kreacji (np. 250px dla medium rectangle, 90px dla leaderboard). Dodaj tło (np. Szare) żeby uniknąć pustej przestrzeni jeśli reklama się nie załaduje. Unikaj auto-sized reklam nad treścią – umieszczaj je poniżej foldu lub w sidebarze.
Czy font-display: swap pogarsza CLS?
Może, jeśli font systemowy i niestandardowy znacznie różnią się rozmiarem. Zmiana czcionki po załadowaniu powoduje drobne przesunięcie tekstu. Rozwiązanie: dobierz font systemowy o podobnych metrykach jako fallback (np. Dla Inter użyj system-ui) i zastosuj CSS size-adjust w @font-face. W większość przypadków swap jest lepszy niż FOIT.
Jak sprawdzić CLS na urządzeniach mobilnych?
Najdokładniejsze dane to field data z Google Search Console (raport Core Web Vitals, zakładka "mobilne"). Do testów ręcznych użyj Chrome DevTools z wlaczona emulacja mobilna (Toggle Device Toolbar) i nagraj sesje w zakładce Performance. Web Vitals Extension dla Chrome też pokazuje CLS w czasie rzeczywistym. Pamiętaj – CLS na mobile jest zazwyczaj gorszy niż na desktop z powodu wolniejszego ładowania zasobów i mniejszego viewportu.
#cls#core-web-vitals#layout-shift#page-speed#optymalizacja#ux#wordpress
Zdjęcie autora: Krzysztof Czapnik
O autorze

Krzysztof Czapnik

Founder & Technical Lead, KC Mobile

20 lat WordPress + 12 lat WooCommerce. Specjalizuję się w technicznej stronie e-commerce: automatyzacje WooCommerce, Google Ads dla SMB, migracje sklepów i optymalizacja konwersji. Realizacje dla 500+ klientów.

Potrzebujesz pomocy z tym tematem? Napisz – odpowiem osobiście w 24h.

Potrzebujesz pomocy?

Wolisz, żebyśmy zrobili to za Ciebie?

Oszczędź czas i uniknij błędów. Zostaw kontakt – wdrożymy to rozwiązanie profesjonalnie.

  • Wdrożenie krok po kroku przez doświadczony zespół
  • Konkretny timeline + cena dopasowana do projektu
  • 20+ lat doświadczenia w projektów w 15+ lat
Bezpłatna wycena