Zrozumienie Core Web Vitals
Core Web Vitals od Google to kluczowe metryki wydajności dla SEO i doświadczenia użytkownika:
LCP (Largest Contentful Paint): jak długo trwa załadowanie największego widocznego elementu strony? Cel: poniżej 2,5 sekundy, idealnie poniżej 1 sekundy.
INP (Interaction to Next Paint): jak szybko strona reaguje na działania użytkownika? Cel: poniżej 200 ms, idealnie poniżej 50 ms.
CLS (Cumulative Layout Shift): jak mocno elementy przesuwają się podczas ładowania? Cel: poniżej 0,1, idealnie 0,02 lub mniej.
Next.js z założenia zapewnia lepsze warunki dla wszystkich trzech metryk niż WordPress czy klasyczne aplikacje SPA — ale błędne implementacje mogą te przewagi niwelować.
Google wykorzystuje Core Web Vitals jako czynnik rankingowy. Strony z dobrymi wskaźnikami rankują średnio o 15–25% lepiej niż porównywalne strony ze słabymi wskaźnikami.
Optymalizacja obrazów z next/image
Obrazy są najczęstszym zabójcą LCP. Next.js `` rozwiązuje większość problemów automatycznie:
Automatyczna konwersja do WebP/AVIF: Next.js dostarcza obrazy w najlepszym formacie obsługiwanym przez przeglądarkę. AVIF jest o 40–60% mniejszy niż JPEG przy tej samej jakości.
Lazy loading: obrazy poniżej widoku ładują się dopiero, gdy użytkownik przewija stronę. Poprawnie ustawia `loading="lazy"`.
Flaga priority dla obrazów LCP: główny obraz (często hero) powinien mieć `priority`, aby ładował się wcześnie. Brak tej flagi to częsta przyczyna słabego LCP.
Stałe wymiary: zawsze ustawiaj `width` i `height`, aby zapobiec CLS spowodowanemu przez późno ładowane obrazy.
Rozmyty placeholder: `placeholder="blur"` pokazuje rozmyty placeholder podczas ładowania i zapobiega skokom wizualnym.
Częsty błąd: obraz hero bez flagi priority. Dodaj priority do wszystkich obrazów above-the-fold — często poprawia to LCP o 0,5–1,5 sekundy.
Wybór właściwej strategii renderowania
Next.js oferuje kilka trybów renderowania — zły wybór kosztuje wydajność:
Static Generation (SSG): strony są renderowane w czasie build i serwowane jako statyczne pliki HTML. Najszybszy możliwy czas ładowania. Nadaje się do stron, które rzadko się zmieniają (landing page, wpisy blogowe).
Incremental Static Regeneration (ISR): statyczne strony są odświeżane w tle. Idealne dla stron, które zmieniają się okazjonalnie (strony produktów, newsy). Parametr `revalidate` steruje częstotliwością aktualizacji.
Server-Side Rendering (SSR): strony są renderowane przy każdym żądaniu. Niezbędne dla treści spersonalizowanych, ale wolniejsze. Uwaga: stosowanie SSR do wszystkiego to częsty błąd wydajnościowy.
React Server Components (RSC): w App Router komponenty mogą renderować się po stronie serwera — bez wysyłania JavaScriptu do klienta. Zmniejsza rozmiar bundla i poprawia INP.
Optymalizacja czcionek i zewnętrznych skryptów
next/font dla Google Fonts
Nigdy nie osadzaj Google Fonts bezpośrednio przez CDN. `next/font/google` ładuje czcionki lokalnie i eliminuje żądanie sieciowe do serwerów Google — oszczędza 200–500 ms i poprawia ochronę prywatności.
next/script dla zewnętrznych skryptów
Analityka, widgety czatu, narzędzia testów A/B — wszystkie osadzaj z `
