# Što ovaj checklist pokriva (i zašto je važan)#
Optimizacija performansi web stranice izravno utječe na konverzije, SEO i zadržavanje korisnika. Brojna industrijska istraživanja dosljedno pokazuju da i mala ubrzanja mijenjaju poslovne metrike; primjerice, Deloitte je izvijestio da smanjenje vremena učitavanja za 0.1s može povećati stopu konverzije na retail stranicama (učinak varira ovisno o industriji i miksu uređaja).
Ovaj vodič je fokusiran na Next.js i predstavlja production checklist koji pokriva Core Web Vitals, slike, lazy loading, CDN i caching—uz konkretne prije/poslije metrike koje možete koristiti kao benchmark. Ako ste na početku s Next.js-om, krenite s Uvod u Next.js i vratite se ovdje kada aplikacija bude deployana.
# Najprije baseline: mjerite prije nego optimizirate#
Bez baselinea “optimizacija” se često pretvori u pogađanje. Trebaju vam field data (stvarni korisnici) za istinu i lab data (Lighthouse) za debugiranje.
Metrike koje stvarno znače (Core Web Vitals)#
Core Web Vitals se evaluiraju na 75. percentilu učitavanja stranice, a ne na prosjeku. To je važno jer outlieri (spori uređaji, loše mreže) utječu na korisničko iskustvo i Googleovu procjenu.
| Metri ka | Što predstavlja | Dobar cilj | Česti uzroci u Next.js-u |
|---|---|---|---|
| LCP (Largest Contentful Paint) | Vrijeme do renderiranja glavnog sadržaja | ≤ 2.5s | Neoptimizirana hero slika, spor TTFB, blokirajući CSS/JS |
| INP (Interaction to Next Paint) | Odaziv na korisnički input | ≤ 200ms | Težak JS, long taskovi, third-party skripte, previše client komponenti |
| CLS (Cumulative Layout Shift) | Vizualna stabilnost | ≤ 0.1 | Slike bez dimenzija, fontovi koji se učitavaju kasno, umetnuti UI banneri |
Alati: što koristiti i kada#
| Cilj | Alat | Zašto je koristan |
|---|---|---|
| Field (real-user) CWV | CrUX / PageSpeed Insights | Prikazuje CWV na p75; ono što Google koristi |
| Lab debugging | Lighthouse (Chrome DevTools) | Identificira render-blocking, LCP element, long taskove |
| Next.js-specifični profiling | Next.js build output + bundle analyzer | Pronalazi velike client bundleove i teške dependencyje |
| Backend latencija | APM (Datadog/New Relic) ili server logovi | TTFB je često skriveno usko grlo |
ℹ️ Napomena: Česta zamka je “ganjanje Lighthousea”. Možete dobiti score 100, a i dalje padati CWV u fieldu ako su vam stvarni korisnici na sporijim telefonima i mrežama. Uvijek validirajte poboljšanja s field data.
Primjer prije/poslije (realističan Next.js e-commerce PDP)#
Ovo je tipičan obrazac poboljšanja koji viđamo na product detail stranicama nakon sređivanja slika, caching-a i third-party skripti.
| Metri ka (p75) | Prije | Poslije | Što se promijenilo |
|---|---|---|---|
| LCP | 4.1s | 2.2s | Optimizirana hero slika, preloading, CDN caching |
| INP | 320ms | 170ms | Smanjen client JS, odgođene non-critical skripte |
| CLS | 0.21 | 0.05 | Ispravljene veličine slika, stabilizirano učitavanje fontova |
| TTFB | 900ms | 180ms | ISR + CDN cache headeri, manje server posla |
Koristite ovo kao sanity check: ako vam je LCP visok, a TTFB nizak, obično je problem front-end payload i slike. Ako je TTFB visok, prvo gledajte strategiju renderiranja i caching.
# Next.js strategija renderiranja: odaberite brzi put#
Next.js nudi više načina renderiranja stranica. Vaš performance profil uvelike ovisi o ovom izboru.
Brza matrica odluke (SSR vs SSG vs ISR)#
| Tip stranice | Preporuka | Zašto | Tipična cache strategija |
|---|---|---|---|
| Marketing stranice | SSG | Najbrže, statični HTML | CDN cache “immutable” |
| Blog/sadržaj | ISR | Svježina + brzina | CDN cache s revalidate |
| Authenticated dashboardi | SSR ili client fetch | Podaci po korisniku | Private/no-store gdje treba |
| Product/category stranice | ISR (često) | Velika SEO površina, trebaju update | Revalidate po vremenu ili tagovima |
Izbjegnite nepotrebne client komponente#
U Next.js App Routeru server komponente su vaša default prednost. Svaka client komponenta povećava količinu JS-a koju šaljete u browser, što često pogoršava INP.
Checklist:
- Zadržite layout, navigaciju i renderiranje sadržaja kao server komponente.
- Client komponente koristite samo za interaktivne dijelove (filteri, košarica, kompleksne forme).
- Zamijenite “global client wrapper” pattern s granularnim client “islands”.
Ako gradite visokoperformantnu marketing stranicu ili storefront, ovo često znači više nego mikro-optimiziranje JavaScripta.
# Core Web Vitals checklist (Next.js implementacija)#
1) Poboljšajte LCP: Optimizirajte LCP element (najčešće hero sliku)#
Na mnogim Next.js stranicama LCP element je velika slika iznad pregiba. Tretirajte je kao kritični sadržaj.
Checklist:
- Koristite
next/imageza responsive dimenzioniranje i moderne formate. prioritypostavite samo za stvarne above-the-fold slike.- Dodajte
sizeskako bi browser preuzeo odgovarajuću varijantu. - Provjerite da hero slika nije slučajno lazy-loadana.
// app/(marketing)/page.tsx
import Image from "next/image";
export default function Hero() {
return (
<Image
src="/images/hero.jpg"
alt="Product hero"
width={1600}
height={900}
priority
sizes="(max-width: 768px) 100vw, 1200px"
style={{ width: "100%", height: "auto" }}
/>
);
}Zašto je ovo važno: bez ispravnog sizes, mobilni korisnici mogu preuzimati slike desktop veličine, što povećava LCP na stvarnim uređajima.
2) Poboljšajte INP: Smanjite main-thread posao i client JS#
INP se tipično pogoršava jer je browser zauzet izvršavanjem JavaScripta kada korisnik pokuša interaktirati.
Checklist:
- Izbacite teške biblioteke iz client bundlea (date libs, charting, WYSIWYG editori).
- Razdvojite interaktivne widgete i učitavajte ih samo na stranicama gdje su potrebni.
- Zamijenite skupi client-side state tamo gdje server renderiranje radi posao.
Za pronalazak velikih client bundleova koristite analyzer.
npm i -D @next/bundle-analyzer// next.config.js
const withBundleAnalyzer = require("@next/bundle-analyzer")({
enabled: process.env.ANALYZE === "true",
});
module.exports = withBundleAnalyzer({
reactStrictMode: true,
});ANALYZE=true npm run buildPrimjenjivo pravilo: ako se dependency koristi na 10% stranica, nemojte ga slati 100% korisnika.
3) Poboljšajte CLS: Rezervirajte prostor za sve što se učitava kasno#
CLS problemi često dolaze od slika, fontova i umetnutog UI-a (cookie banneri, chat widgeti).
Checklist:
- Uvijek specificirajte
widthiheight(ili aspect ratio) za slike. - Izbjegnite umetanje bannera iznad sadržaja bez rezerviranog prostora.
- Koristite
font-display: swapi konzistentne fallback fontove kako biste smanjili layout skokove.
⚠️ Upozorenje: Čest CLS “ubojica” je cookie consent traka koja se pojavi na vrhu i gurne cijelu stranicu prema dolje. Rezervirajte prostor od početka ili je renderirajte na način koji ne mijenja layout (npr. overlay).
# Optimizacija slika (najveća poluga za LCP na većini stranica)#
Slike su često većina prenesenih byteova na stranicama bogatim sadržajem. Moderni formati i ispravno dimenzioniranje smanjuju bandwidth, decode vrijeme i LCP.
Praktični checklist za slike u Next.js-u#
| Stavka | Cilj | Kako u Next.js-u |
|---|---|---|
| Moderni formati | AVIF/WebP | next/image automatski optimizira; osigurajte kvalitetan izvor |
| Ispravno responsive dimenzioniranje | Bez oversized preuzimanja | sizes + ispravan layout |
| Izbjegnite layout shift | Rezervirajte prostor | width/height ili stabilan container |
| Odgovarajuća kompresija | Balansirana kvaliteta | Pre-komprimirajte originale; izbjegavajte golema JPEG-ove |
| Optimizirajte thumbnailove | Mali i brzi | Koristite odvojene manje assete ili se oslonite na resize |
Remote slike: sigurno konfigurirajte domene#
Ako učitavate slike iz CMS-a ili CDN-a, whitelistajte domene.
// next.config.js
module.exports = {
images: {
remotePatterns: [
{ protocol: "https", hostname: "images.example-cms.com" },
{ protocol: "https", hostname: "cdn.example.com" },
],
},
};Primjer: prije/poslije na blog listingu#
| Stavka | Prije | Poslije |
|---|---|---|
| Veličina thumbnaila poslužena mobitelu | 1200px širine | 400–600px širine (responsive) |
| Format | JPEG | WebP/AVIF |
| Ukupni image transfer na listingu | 3.8MB | 1.2MB |
| LCP (lab) | 3.2s | 2.0s |
Ovo poboljšanje je česta pojava kada listing stranica renderira 10–20 thumbnailova bez sizes i bez ispravnog resizanja.
# Lazy loading (ispravno, ne svuda)#
Lazy loading štedi bandwidth i smanjuje početni posao, ali zloupotreba može pogoršati LCP i uzrokovati jank.
Što lazy loadati#
| Element | Lazy load? | Zašto |
|---|---|---|
| Below-the-fold slike | Da | Oslobađa bandwidth za LCP |
| Below-the-fold sekcije | Često | Smanjuje inicijalni JS/HTML posao |
| Above-the-fold hero slika | Ne | Obično je LCP element |
| Primarna navigacija | Ne | Potrebna za brzu interakciju |
| Third-party widgeti (chat, ads) | Da (defer) | Često teški i nekritični |
Dynamic import za teške client widgete#
Držite teške komponente izvan inicijalnog bundlea.
// app/product/[slug]/page.tsx
import dynamic from "next/dynamic";
const Reviews = dynamic(() => import("./Reviews"), {
ssr: false,
loading: () => null,
});
export default function ProductPage() {
return (
<>
{/* main content */}
<Reviews />
</>
);
}Koristite ovo za widgete koji nisu potrebni za first render (recenzije, preporuke, napredni filteri).
💡 Savjet: Ako odgađate widget koji utječe na layout, rezervirajte prostor s fiksnom visinom skeletona kako biste spriječili CLS.
# CDN: Smanjite latenciju i stabilizirajte performanse globalno#
CDN poboljšava performanse tako što cachea sadržaj bliže korisnicima i izravnava traffic spikeove. Za globalnu publiku to je jedno od poboljšanja s najvećim ROI-jem.
Što poslužiti preko CDN-a#
| Tip asseta | Prikladnost za CDN | Napomene |
|---|---|---|
Statični asseti (/_next/static/*) | Izvrsno | Tipično immutable i cacheable |
| Slike | Izvrsno | Koristite image CDN ili Next image optimization |
| HTML (SSG/ISR) | Dobro | Cache + revalidate; izbjegavajte caching personaliziranih stranica |
| API odgovori | Ovisi | Cacheajte javne podatke; privatne ostavite bez cachea |
Ako je aplikacija na Vercelu, već imate koristi od edge cachinga za mnoge assete. Preostali posao je ispravni cache headeri i odabir ISR/SSG gdje je moguće.
CDN konfiguracijski checklist#
- Cacheajte immutable assete dugo (
max-age=31536000, immutable). - Cacheajte HTML za static i ISR stranice prema potrebama svježine.
- Zaobiđite cache za personalizirani sadržaj (cookies, auth headeri).
- Uključite Brotli kompresiju ako platforma podržava (većina podržava).
# Strategije keširanja (Next.js + HTTP): dio koji donosi novac#
Keširanje je mjesto gdje performanse postaju predvidljive. Cilj je smanjiti:
- Server compute po requestu (TTFB)
- Ponavljane DB pozive
- Varijancu tijekom traffic spikeova
Slojevi keširanja koje trebate razmotriti#
| Sloj | Primjeri | Što poboljšava |
|---|---|---|
| Browser cache | Cache-Control | Ponovni posjeti, back/forward navigacija |
| CDN/edge cache | Vercel edge, Cloudflare | TTFB globalno, izravnavanje prometa |
| Server data cache | Next.js data cache, fetch caching | SSR performanse, DB load |
| App cache | Redis | Skupi izračuni, shared state |
HTTP Cache-Control: preporučeni defaulti#
| Tip sadržaja | Predloženi header | Kada koristiti |
|---|---|---|
| Fingerprinted asseti | public, max-age=31536000, immutable | /_next/static/* |
| Javni API (brzo se mijenja) | public, s-maxage=60, stale-while-revalidate=300 | Liste, search sugestije |
| ISR HTML | Platform-controlled + revalidate | Content stranice |
| Personalizirani HTML | private, no-store | Account stranice |
Ako imate API route koji vraća javni sadržaj, caching možete dodati ovako:
// app/api/products/route.ts
export async function GET() {
const body = JSON.stringify({ items: [] });
return new Response(body, {
headers: {
"Content-Type": "application/json",
"Cache-Control": "public, s-maxage=60, stale-while-revalidate=300",
},
});
}Ovo smanjuje ponavljane origin hitove uz prihvatljivu svježinu podataka.
ISR u praksi: visoke performanse bez straha od zastarjelog sadržaja#
Incremental Static Regeneration često je najbolji default za SEO stranice koje se povremeno mijenjaju.
Checklist:
- Koristite ISR za product, category i content stranice.
- Revalidate po vremenu radi jednostavnosti ili po tagovima kada imate CMS.
- Potvrdite da vaš CDN poštuje ISR ponašanje (Vercel poštuje; druge postavke mogu trebati tuning).
Čak i umjeren pomak sa SSR-a na ISR može spustiti TTFB s 800–1200ms na 100–250ms za globalne korisnike, posebno pod opterećenjem.
# Third-party skripte: tihi ubojica INP-a#
Analytics, A/B testing, chat widgeti i tag manageri često pogoršavaju INP zbog long taskova. Ne morate ih ukloniti—trebate kontrolirati kada se izvršavaju.
Checklist:
- Auditirajte third-party skripte i uklonite neiskorištene tagove.
- Učitavajte non-critical skripte nakon interakcije ili kada je stranica stabilna.
- Preferirajte server-side tracking gdje je izvedivo.
Praktičan pristup:
- Zadržite samo jedan analytics alat.
- Deferajte chat widget dok korisnik ne scrolla ili ne provede 10–15 sekundi na stranici.
- Izbjegnite “all pages” injekciju za skripte koje trebaju samo na checkoutu ili pricingu.
# Mreža i payload: neka prvi load bude mali#
Čak i uz savršeno keširanje, veliki JS i CSS payload šteti. Cilj nije “malo radi malog”, nego fast-to-interactive.
Checklist za payload#
| Stavka | Cilj | Kako to postići |
|---|---|---|
| JS po ruti | Što niže moguće | Server komponente, code splitting, uklanjanje teških depova |
| CSS blocking | Minimalan | Izbjegnite golemi globalni CSS, razdvojite po rutama gdje je moguće |
| Fontovi | 1–2 obitelji | Subset fontova, preloadajte samo što treba |
| JSON podaci | Ne overfetchati | Tražite samo potrebna polja, paginirajte |
# Operativni checklist: spriječite regresije performansi#
Poboljšanja performansi često nestanu nakon par sprintova. Postavite guardrailove.
Dodajte performance budžete#
Checklist:
- Postavite maksimum JS veličine po ruti (npr. 170–250KB gzipped kao početna točka).
- Pratite CWV kroz vrijeme (tjedno) i alertajte na regresije.
- Uvrstite performanse u Definition of Done za nove stranice.
Koristite synthetic monitoring za kritične putanje#
Za tokove visoke vrijednosti (homepage → PDP → checkout), synthetic provjere hvataju CDN i backend probleme prije nego što ih korisnici osjete.
Pratite:
- TTFB
- LCP
- INP proxy metrike (total blocking time u labu)
- Stope grešaka
# Potpuni checklist za optimizaciju performansi web stranice (Copy/Paste)#
Koristite ovu listu za potpuni audit.
Core Web Vitals (CWV)#
- 1Identificirajte LCP element po templateu (home, listing, detail).
- 2Popravite LCP s optimizacijom slika, preloadingom i smanjenim TTFB-om.
- 3Smanjite INP rezanjem client JS-a, deferanjem third-party skripti i izbjegavanjem velikih client wrappera.
- 4Smanjite CLS rezerviranjem prostora za slike, fontove i umetnuti UI.
Slike#
- 1Koristite
next/imageza sve content slike. - 2Dodajte
sizesza responsive ponašanje. - 3Koristite
prioritysamo za stvarne above-the-fold slike. - 4Provedite kompresiju i razumne izvorne dimenzije.
Lazy loading#
- 1Lazy loadajte below-the-fold slike i sekcije.
- 2Dynamic importajte teške client widgete.
- 3Rezervirajte prostor za lazy-loadani UI kako biste izbjegli CLS.
CDN#
- 1Osigurajte immutable caching za fingerprinted assete.
- 2Cacheajte javni HTML/API gdje je sigurno.
- 3Provjerite kompresiju (Brotli) i podršku za HTTP/2/3.
Keširanje#
- 1Preferirajte SSG/ISR za SEO stranice.
- 2Dodajte
Cache-Controlheadere za javne API odgovore. - 3Izbjegavajte caching personaliziranih odgovora.
- 4Validirajte cache hit ratio na CDN-u i originu.
Next.js-specifično#
- 1Minimizirajte client komponente; koristite server komponente po defaultu.
- 2Analizirajte bundleove i uklonite teške dependencyje.
- 3Držite JS po ruti malim uz code splitting.
Dokaz (metrike)#
- 1Zabilježite baseline (p75 CWV + Lighthouse + bundle sizes).
- 2Ponovno testirajte nakon svake promjene.
- 3Rolloutajte postupno kada promjene utječu na caching ili strategiju renderiranja.
# Ključni zaključci#
- Optimizirajte ono što pokreće Core Web Vitals: LCP (hero/sadržaj), INP (JS + third parties), CLS (rezerviran prostor), koristeći field data na 75. percentilu.
- U Next.js-u se performanse često najbrže poboljšaju tako da smanjite broj client komponenti i šaljete manje JavaScripta u browser.
- Rad na slikama je obično najveća pobjeda: koristite
next/image, ispravnesizes, moderne formate i izbjegavajte lazy-loading LCP slike. - Keširanje tretirajte kao sustav: SSG/ISR + ispravan Cache-Control + CDN mogu spustiti TTFB s ~1s na ~200ms u stvarnim deployevima.
- Lazy loading koristite selektivno: deferajte sadržaj ispod pregiba i teške widgete, ali kritične above-the-fold elemente držite eager i stabilnima.
- Spriječite regresije budžetima, bundle analizom i redovitim CWV provjerama—performanse su product feature, ne jednokratni zadatak.
# Zaključak#
Optimizacija performansi web stranice najlakša je kada je tretirate kao checklist: izmjerite CWV, popravite LCP element (najčešće slike), smanjite client-side JavaScript da poboljšate INP, stabilizirajte layout za CLS te učinite caching/CDN ponašanje eksplicitnim.
Ako želite praktičan audit i prioritetni plan optimizacije za svoju Next.js aplikaciju—uz mjerljive prije/poslije KPI-jeve—Samioda može pomoći: Mobilni i web razvoj. Za timove koji tek počinju ili migriraju, krenite s Uvod u Next.js i zatim primijenite ovaj checklist na ključne templatee.
FAQ
Više iz kategorije Web razvoj
Sve →Vodič za API integracije: najbolje prakse za 2026.
Praktičan vodič za API integracije za 2026.: REST vs GraphQL, autentikacija, obrada grešaka, ponovni pokušaji, rate limiting i primjeri Next.js API ruta spremni za produkciju.
Najbolji headless CMS u 2026: Sanity vs Strapi vs Contentful (i još 2)
Praktična usporedba u 2026. top 5 headless CMS opcija—Sanity, Strapi, Contentful, Directus i Storyblok—s fokusom na developer experience, Next.js integraciju, značajke i cijene.
Progresivne web aplikacije (PWA): Potpuni vodič za 2026.
Praktičan vodič za progressive web app (PWA) u 2026.: koncepti, poslovne prednosti u odnosu na nativne aplikacije i implementacija korak‑po‑korak u Next.js-u s manifestom i primjerima koda za service worker.
Trebate pomoć s projektom?
Gradimo prilagođena rješenja koristeći tehnologije iz ovog članka. Senior tim, fiksne cijene.
Povezani članci
Zašto Je Next.js Najbolji Framework za SEO u 2026
Saznajte zašto Next.js dominira SEO performansama u 2026. Server-side rendering, Core Web Vitals, strukturirani podaci i stvarne usporedbe performansi.
Progresivne web aplikacije (PWA): Potpuni vodič za 2026.
Praktičan vodič za progressive web app (PWA) u 2026.: koncepti, poslovne prednosti u odnosu na nativne aplikacije i implementacija korak‑po‑korak u Next.js-u s manifestom i primjerima koda za service worker.
Vodič za API integracije: najbolje prakse za 2026.
Praktičan vodič za API integracije za 2026.: REST vs GraphQL, autentikacija, obrada grešaka, ponovni pokušaji, rate limiting i primjeri Next.js API ruta spremni za produkciju.