ISR (Incremental Static Regeneration) to flagowa funkcja Next.js, która łączy to, co najlepsze w SSG (statyczne strony serwowane z CDN, maksymalna wydajność) i SSR (aktualna treść). Konkretnie: pierwsze żądanie serwuje stronę pre-wygenerowaną w trakcie buildu, a po skonfigurowanym czasie (np. `revalidate: 3600`) następne żądanie wywołuje regenerację w tle. Kolejni użytkownicy otrzymują nową wersję. Pełny rebuild strony nie jest potrzebny.
Typowy przypadek użycia: strona e-commerce z 5000 kart produktów, których ceny zmieniają się kilka razy dziennie. W czystym SSG trzeba by przeładowywać 5000 stron przy każdej aktualizacji — niemożliwe. W czystym SSR każdy odwiedzający płaci za to czasem CPU, a LCP cierpi. W ISR serwujesz ultraszybkie statyczne treści z akceptowalną świeżością (1 godz., 10 min, cokolwiek wybierzesz). Podobnie dla bloga newsowego, marketplace'u, mediów z programatycznym SEO. To właśnie pozwala stronom takim jak TikTok, Hulu czy Notion działać na Next.js w dużej skali.
Next.js App Router (od v13) zgeneralizował koncepcję dzięki `revalidate` i `revalidateTag` — można teraz inwalidować konkretną stronę, gdy headless CMS ją modyfikuje, za pomocą webhooka. To kombinacja, którą wdrażamy w większości naszych stron na zamówienie z Sanity lub Strapi: edytor publikuje → webhook Vercel → strona zregenerowana w 2–3 s, na całym świecie. Wydajność strony statycznej, świeżość strony dynamicznej.
ISR w praktyce: przypadki, w których zmienia wszystko
- E-commerce: katalogi 1000 do 100 000 SKU z cenami zmieniającymi się codziennie.
- Media / blog: aktualność opublikowana przez zespół contentu, online w 30 s bez czekania na build.
- Programatyczne SEO: 50 000 stron długiego ogona aktualizowanych partiami przez webhook headless CMS.
- Strony wielojęzyczne: selektywna regeneracja tłumaczeń na bieżąco, bez globalnego rebuildu.
