Largest Contentful Paint (LCP) problemen identificeren en oplossen
Leer hoe je alle Largest Contentful Paint gerelateerde problemen op je pagina kunt debuggen en oplossen
Deze gids is onderdeel van de [url=\/core-web-vitals\/largest-contentful-paint]Largest Contentful Paint (LCP)[\/url] hub. LCP meet hoe snel het grootste zichtbare element wordt gerenderd. Google wil dit onder de 2,5 seconden houden. Wat volgt is het exacte diagnostische proces dat ik gebruik bij mijn consultancy voor pagina-snelheid.<\/p>
Een gids voor consultants voor het diagnosticeren en oplossen van LCP<\/h2>
Mijn naam is Arjen Karel, en ik ben een pagina-snelheidsconsultant. In de loop der jaren heb ik honderden websites geaudit, en een van de meest hardnekkige uitdagingen is de Largest Contentful Paint (LCP). In deze gids deel ik de exacte methodologie die ik gebruik om LCP-problemen te diagnosticeren en op te lossen. Je zult CoreDash voorbij zien komen, een RUM-tool die ik heb gemaakt om de precieze gegevens te krijgen die nodig zijn voor dit proces. De principes hier zijn universeel, maar ik geloof in het tonen van echte voorbeelden uit de tools die ik dagelijks bouw en gebruik.<\/p>
Het verbeteren van LCP is een proces van eliminatie. Volgens de [url=https:\/\/almanac.httparchive.org\/en\/2025\/performance]2025 Web Almanac[\/url] slaagt slechts 66% van de mobiele origins voor de LCP. Dat betekent dat een derde van het web een laadprobleem heeft. Zoek de langzaamste fase, los deze op, en meet opnieuw.<\/p>
De diagnostische methodologie: eerst field data, dan lab data<\/h3>
Om effectief te optimaliseren, moet je een diagnostische workflow van twee stappen hanteren. Dit zorgt ervoor dat je problemen oplost waar je gebruikers daadwerkelijk mee te maken hebben, en niet alleen scores najaagt in een labomgeving.<\/p>
- Field data (RUM & CrUX) laat je zien WAT er gebeurt.<\/strong> Field data wordt verzameld van [url=https:\/\/web.dev\/articles\/lab-and-field-data]echte gebruikers die je site bezoeken[\/url]. Het vertelt je of<\/em> je een LCP-probleem hebt, welke pagina's<\/em> zijn getroffen en welke gebruikers<\/em> (mobiel of desktop) dit ervaren. Je moet hier altijd beginnen om te bevestigen dat er een echt probleem bestaat.<\/li>
- Lab data (Lighthouse, DevTools) helpt je diagnosticeren WAAROM het gebeurt.<\/strong> Lab data wordt verzameld in een [url=https:\/\/developer.chrome.com\/docs\/devtools\/performance\/debug-web-vitals]gecontroleerde, gesimuleerde omgeving[\/url]. Zodra je field data een probleem op een specifieke pagina heeft bevestigd, kun je lab tools gebruiken om het probleem consistent te reproduceren en het laadproces te ontleden om de grondoorzaak te vinden.<\/li> <\/ol>
Begin met field data, zodat je optimalisatie-inspanningen gericht zijn op wijzigingen die daadwerkelijk impact hebben op echte gebruikers.<\/p>
[include]toc.html[\/include]
<\/div>Belangrijke terminologie<\/h4>
- Field Data:<\/strong> Ook bekend als Real User Monitoring (RUM), dit zijn prestatiegegevens verzameld van werkelijke gebruikers in uiteenlopende, praktijkomstandigheden (verschillende apparaten, netwerksnelheden en locaties).<\/li>
- Lab Data:<\/strong> Prestatiegegevens verzameld binnen een gecontroleerde, consistente omgeving met behulp van tools zoals Lighthouse. Het is ideaal voor het debuggen en testen van wijzigingen, maar weerspiegelt niet altijd de ervaring van echte gebruikers.<\/li>
- CrUX:<\/strong> Het Chrome User Experience Report. Een openbare dataset van Google die field data bevat van miljoenen Chrome-gebruikers. Het voedt het Core Web Vitals-rapport in Google Search Console.<\/li>
- TTFB (Time to First Byte):<\/strong> De tijd tussen het moment dat de browser een pagina opvraagt en het moment dat deze de allereerste byte van de HTML-respons ontvangt. Het is een maatstaf voor de reactiesnelheid van de server.<\/li> <\/ul> <\/div>
Stap 1: LCP-problemen identificeren met field data<\/h2>
Je eerste taak is om gegevens van echte gebruikers te gebruiken om te bevestigen welke pagina's, indien van toepassing, een slechte LCP hebben.<\/p>
Een toegankelijk startpunt: Google Search Console<\/h4>
Een goed startpunt is het Core Web Vitals<\/strong>-rapport in Google Search Console. Log in, ga naar het rapport en bekijk de mobiele en desktop-grafieken. Als Google URL's markeert met "LCP-probleem: langer dan 2,5 s," heb je bevestiging uit het Chrome User Experience (CrUX) Report dat een percentage van je gebruikers een slechte ervaring heeft.<\/p>
Search Console bevestigt het probleem, maar het wordt langzaam bijgewerkt en groepeert URL's. Voor details op paginaniveau in real-time heb je een RUM-tool nodig.<\/p>
<\/two-stage-img>
Real User Monitoring (RUM): details op paginaniveau<\/h4>
Je kunt je eigen RUM-opstelling bouwen met de [url=https:\/\/github.com\/GoogleChrome\/web-vitals]web-vitals library[\/url] om gegevens naar je analytics-backend te sturen, maar dat is een aanzienlijke technische inspanning.<\/p>
Ik heb [url=https:\/\/coredash.app]CoreDash[\/url] specifiek hiervoor gebouwd. Je voegt één script-tag toe en het begint LCP-gegevens te verzamelen van elke echte bezoeker, uitgesplitst naar pagina, apparaat en element.<\/p>
Een goede RUM-tool laat je het volgende zien:<\/p>
- Je exacte LCP-score voor elke specifieke URL.<\/li>
- Een uitsplitsing van elk LCP-element (bijv. een afbeelding, een kop) en welke het vaakst geassocieerd worden met een trage LCP.<\/li>
- De exacte timing voor elk van de vier LCP-fasen voor elke paginaweergave, waarbij de bottleneck wordt aangewezen.<\/li>
<\/ul>
Verder kijken dan het LCP-element zelf is belangrijk. In een [url=https:\/\/web.dev\/case-studies\/vodafone]goed gedocumenteerde casestudy[\/url] verbeterde Vodafone hun LCP met 31%, wat direct bijdroeg aan een stijging van de verkoop met 8%. Hun optimalisatie was gericht op het identificeren en oplossen van de specifieke LCP-bottleneck op belangrijke landingspagina's met behulp van een combinatie van field data-analyse en gerichte oplossingen. LCP-optimalisatie gaat niet alleen over de afbeelding. Je moet de volledige laad-pipeline begrijpen: serverrespons, resource discovery, download en paint.<\/p>
In CoreDash kun je bijvoorbeeld naar de LCP-pagina gaan en een gegevenstabel bekijken die je langzaamste LCP-elementen toont. Door op een specifiek element te klikken (zoals een specifieke CSS-klasse voor een hero-afbeelding), kun je alle statistieken filteren om de prestatiegegevens te zien voor alleen de pagina's waar dat element de LCP was.<\/p>
<\/two-stage-img>
Het doel: field data gebruiken om je langzaamste pagina en het meest voorkomende LCP-element te vinden. Dat is je doelwit.<\/p>
LCP meten met de Performance Observer API<\/h4>
De Performance Observer API geeft je directe toegang tot LCP-vermeldingen in JavaScript. Dit is dezelfde API die RUM-tools onder de motorkap gebruiken om field data te verzamelen. Het volgende fragment logt elke LCP-kandidaat die de browser identificeert, inclusief het element, de grootte en de rendertijd.<\/p>
const observer = new PerformanceObserver((list) => { const entries = list.getEntries(); const lastEntry = entries[entries.length - 1]; console.log('LCP element:', lastEntry.element); console.log('LCP time:', lastEntry.renderTime || lastEntry.loadTime); console.log('LCP size:', lastEntry.size); }); observer.observe({ type: 'largest-contentful-paint', buffered: true });<\/pre>Dit is handig voor snelle validatie tijdens de ontwikkeling, maar voor productiemetingen moet je de [url=https:\/\/github.com\/GoogleChrome\/web-vitals]web-vitals library[\/url] gebruiken, die rekening houdt met uitzonderingen zoals wijzigingen in de zichtbaarheid van tabbladen en herstel uit de back\/forward-cache.<\/p>
Stap 2: De bottleneck diagnosticeren met lab tools<\/h2>
Je weet welke<\/em> pagina je moet aanpakken. Zoek nu uit waarom<\/em> deze traag is. Voer een test uit met [url=https:\/\/web.dev\/articles\/optimize-lcp]PageSpeed Insights[\/url] of het Lighthouse-paneel in Chrome DevTools.<\/p>
Scrol in het rapport naar de sectie "Diagnostics" en zoek de audit "Largest Contentful Paint element". Dit watervaldiagram splitst je LCP-tijd op in de vier subonderdelen. Je RUM-tool zou een vergelijkbare uitsplitsing moeten laten zien op basis van je field data.<\/p>
<\/two-stage-img>
Je doel is om de langste fase in deze uitsplitsing te vinden. Dat is je primaire bottleneck, en dat is waar je je optimalisatie-inspanningen eerst op moet richten.<\/p>
Stap 3: De vier LCP-fasen begrijpen<\/h2>
Elke LCP-score is de som van vier opeenvolgende fasen. Elke fase heeft een speciale gids op deze site met specifieke optimalisatietechnieken.<\/p>
- Time to First Byte (TTFB):<\/strong> Dit is het onvermijdelijke fundament. Een trage serverrespons is een directe toevoeging, milliseconde voor milliseconde, aan je LCP. Voordat je ook maar één afbeelding optimaliseert, moet je ervoor zorgen dat je server snel reageert. Leer meer over het [url=\/core-web-vitals\/time-to-first-byte]optimaliseren van TTFB[\/url].<\/li>
- Resource Load Delay:<\/strong> Dit is het "ontdekkingsprobleem" en een van de meest voorkomende problemen. De browser kan een resource niet downloaden als hij er niet van weet. Als je LCP-afbeelding verborgen is in een CSS- of JavaScript-bestand, of zelfs als deze in de HTML staat maar andere resources eerst worden opgevraagd, vindt de browser deze te laat, wat kostbare tijd verspilt. Lees de volledige gids over [url=\/core-web-vitals\/largest-contentful-paint\/resource-load-delay]Resource Load Delay[\/url].<\/li>
- Resource Load Duration:<\/strong> Dit is de downloadtijd voor de LCP-resource zelf. Grote, niet-gecomprimeerde afbeeldingen of trage netwerkomstandigheden kunnen deze fase tot een bottleneck maken. Lees de volledige gids over [url=\/core-web-vitals\/largest-contentful-paint\/resource-load-duration]Resource Load Duration[\/url].<\/li>
- Element Render Delay:<\/strong> Dit is het "te druk om te painten" probleem. Het LCP-afbeeldingsbestand is mogelijk volledig gedownload, maar als de hoofdtrååd van de browser wordt geblokkeerd door zware JavaScript-exekutie, kan hij simpelweg niet toekomen aan het painten van de afbeelding op het scherm. Lees de volledige gids over [url=\/core-web-vitals\/largest-contentful-paint\/element-render-delay]Element Render Delay[\/url].<\/li> <\/ul>
Begin altijd met ervoor te zorgen dat je TTFB snel is en je LCP-resource vindbaar is, voordat je overgaat op bestandsgrootte en render-optimalisaties.<\/p>
Stap 4: De oplossing uitvoeren<\/h2>
Nu de bottleneck is geïdentificeerd, pas je de oplossing toe. De implementatie hangt af van je stack. Elke fase hieronder behandelt eerst universele principes, en daarna WordPress- en JS-framework-specifieke zaken.<\/p>
1. Time to First Byte (TTFB) optimaliseren<\/h3>
Als je TTFB traag is (een goed doel is [url=https:\/\/web.dev\/articles\/optimize-ttfb]onder de 800 ms[\/url]), legt dit een hoge basis voor je LCP. Het verbeteren van TTFB zal elke andere laadstatistiek verbeteren.<\/p>
<\/two-stage-img>
Universele TTFB-oplossingen<\/h4>
- Caching inschakelen:<\/strong> Dit is een van de meest effectieve manieren om TTFB te verbeteren. Caching genereert en bewaart een kopie van de pagina, zodat deze direct kan worden geserveerd zonder dat de server deze bij elk bezoek opnieuw hoeft op te bouwen.<\/li>
- Gebruik een CDN:<\/strong> Een Content Delivery Network serveert je inhoud vanaf een server die fysiek dicht bij je gebruiker staat, wat de [url=https:\/\/www.cloudflare.com\/learning\/cdn\/what-is-a-cdn\/]netwerklatentie vermindert[\/url]. Het cachen van je volledige HTML-pagina's aan de edge van het CDN is een krachtige strategie voor een snelle, wereldwijde TTFB. Voor gedetailleerde tips voor CDN-configuratie, zie onze gids over [url=\/pagespeed\/configure-cloudflare-for-passing-the-core-web-vitals]hoe je Cloudflare configureert voor optimale prestaties[\/url].<\/li>
- Gebruik Brotli of Gzip-compressie:<\/strong> Zorg ervoor dat je server tekstgebaseerde assets zoals HTML, CSS en JavaScript comprimeert. Brotli biedt betere compressie dan Gzip en verdient de voorkeur.<\/li>
- Gebruik HTTP\/3 met 0-RTT:<\/strong> Zorg ervoor dat je server is geconfigureerd om HTTP\/3 te gebruiken. Het biedt aanzienlijke prestatievoordelen, waaronder betere multiplexing. Het ondersteunt 0-RTT (Zero Round Trip Time Resumption), wat de verbindingstijd voor terugkerende bezoekers elimineert en zorgt voor een directe [url=https:\/\/web.dev\/articles\/http3]TTFB-boost[\/url].<\/li>
- Gebruik 103 Early Hints:<\/strong> Gebruik voor een geavanceerde boost de statuscode 103 Early Hints. Hiermee kan je server of CDN hints over kritieke CSS- en JS-bestanden naar de browser sturen terwijl deze nog bezig is met het voorbereiden van het volledige HTML-document, waardoor downloads [url=https:\/\/web.dev\/articles\/103-early-hints]nog eerder kunnen beginnen[\/url]. Zie voor een volledige implementatiegids ons artikel over [url=\/pagespeed\/103-early-hints]103 Early Hints[\/url].<\/li> <\/ul>
Platformspecifieke TTFB-oplossingen<\/h4>
Op WordPress:<\/h5>
- Investeer in kwaliteitshosting:<\/strong> Op WordPress is een trage TTFB vaak gerelateerd aan de hostingomgeving. Goedkope, gedeelde hosting kan een bottleneck zijn. Overweeg een managed WordPress-host die is geoptimaliseerd voor prestaties.<\/li>
- Gebruik een caching-plugin:<\/strong> Een hoogwaardige caching-plugin (bijv. WP Rocket, W3 Total Cache) is onmisbaar. Het regelt het genereren van statische HTML-bestanden voor je, wat de kern is van effectieve caching op dit platform.<\/li> <\/ul>
Op een JS-framework:<\/h5>
- Kies het juiste hostingplatform:<\/strong> Voor Node.js-applicaties zijn platforms zoals Vercel of Netlify sterk geoptimaliseerd voor SSR\/SSG-frameworks en bieden ze out-of-the-box intelligente caching en serverless functie-exekutie.<\/li>
- Implementeer SSR-caching:<\/strong> Als je Server-Side Rendering gebruikt, cache dan de gerenderde pagina's op de server (bijv. met Redis of een in-memory cache) om herrenderen bij elk verzoek te voorkomen.<\/li>
- Pas op voor serverless cold starts:<\/strong> Als je serverless functies gebruikt voor rendering, houd er dan rekening mee dat een "cold start" (het eerste verzoek na een periode van inactiviteit) een hoge TTFB kan hebben. Gebruik provisioned concurrency of keep-alive-strategieën om dit te beperken.<\/li> <\/ul>
2. Resource Load Delay verminderen<\/h3>
Dit is vaak de grootste bottleneck. Het betekent dat de browser klaar was om te werken, maar je hoofdafbeelding of lettertypebestand niet meteen kon vinden. Deze vertraging wordt meestal veroorzaakt door een van de volgende twee problemen: de resource wordt laat ontdekt, of krijgt een lage downloadprioriteit. Lees voor de volledige gids over dit onderwerp onze speciale gids over [url=\/core-web-vitals\/largest-contentful-paint\/resource-load-delay]Resource Load Delay[\/url].<\/p>
<\/two-stage-img>
Universele oplossingen voor Load Delay<\/h4>
De universele oplossing voor Resource Load Delay is ervoor te zorgen dat je LCP-resource zowel vindbaar is in de initiële HTML-markup als een hoge prioriteit krijgt van de browser. Hier lees je hoe je dat bereikt:<\/p>
- Maak de LCP-resource vindbaar:<\/strong> De belangrijkste stap is ervoor zorgen dat je LCP-element aanwezig is in de HTML die de server stuurt. Browsers gebruiken een snelle "preload scanner" om vooruit te kijken in de ruwe HTML naar te downloaden resources zoals afbeeldingen en skripts. Als je LCP-afbeelding wordt geladen via een CSS
background-image<\/code> of wordt geïnjecteerd met JavaScript, is deze onzichtbaar voor deze scanner, wat een grote vertraging veroorzaakt. De meest robuuste oplossing is altijd om een standaard<img><\/code>-tag te gebruiken met eensrc<\/code>-attribuut in je door de server gerenderde HTML.<\/li>- Beheers de laadvolgorde met
preload<\/code>:<\/strong> Als je de LCP-resource niet direct vindbaar kunt maken (een veelvoorkomend probleem met lettertypen of CSS-achtergrondafbeeldingen), is de op één na beste oplossing het gebruik van<link rel="preload"><\/code>. Deze tag fungeert als een expliciete instructie in je HTML<head><\/code>, die de browser vertelt om een kritieke resource veel eerder te gaan downloaden dan hij deze natuurlijk zou hebben gevonden. Zie voor implementatiedetails en voorbeelden onze gids over [url=\/pagespeed\/preload-largest-contentful-paint-image]hoe je de LCP-afbeelding preloadt[\/url].<\/li>- Zorg voor een hoge prioriteit met
fetchpriority<\/code>:<\/strong> Zelfs als een resource vindbaar is, geeft de browser deze mogelijk niet de hoogste downloadprioriteit. Het toevoegen vanfetchpriority="high"<\/code> aan je<img><\/code>-tag of je<link rel="preload"><\/code>-tag is een krachtige hint aan de browser dat deze specifieke resource het belangrijkst is voor de gebruikerservaring, wat helpt om de [url=https:\/\/web.dev\/articles\/lcp-fetchpriority]strijd om bandbreedte te winnen[\/url] van andere resources.<\/li> <\/ul>Platformspecifieke oplossingen voor Load Delay<\/h4>
Op WordPress:<\/h5>
- Vermijd achtergrondafbeeldingen van page builders:<\/strong> Veel page builders maken het eenvoudig om een hero-afbeelding in te stellen als een CSS
background-image<\/code> op eendiv<\/code>. Hierdoor is deze onzichtbaar voor de preload scanner van de browser. Gebruik indien mogelijk een standaard<img><\/code>-blok. Als dat niet kan, heb je mogelijk een plugin of aangepaste code nodig om die specifieke afbeelding te preloaden.<\/li>- Schakel lazy-loading uit voor de LCP-afbeelding:<\/strong> Veel optimalisatie-plugins zullen automatisch alle afbeeldingen lazy-loaden. Je moet de instelling in je plugin vinden om de LCP-afbeelding (en vaak de eerste paar afbeeldingen op de pagina) uit te sluiten van lazy-loading. Dit is zo'n veelvoorkomende fout dat we een speciaal artikel hebben over het [url=\/pagespeed\/fix-largest-contentful-paint-image-was-lazily-loaded-lighthouse]oplossen van lazy-loaded LCP-afbeeldingen[\/url].<\/li> <\/ul>
Op een JS-framework:<\/h5>
- Gebruik Server-Side Rendering (SSR):<\/strong> Dit is vaak de meest impactvolle oplossing. Een standaard Client-Side Rendered (CSR) React-app stuurt minimale HTML, en het LCP-element bestaat pas nadat een grote JS-bundel is gedownload en uitgevoerd. SSR-frameworks zoals Next.js of Remix leveren de volledige HTML, inclusief de
<img><\/code>-tag, zodat de browser deze onmiddellijk kan ontdekken.<\/li>- Gebruik framework-specifieke image components:<\/strong> Frameworks zoals Next.js bieden een afbeeldingscomponent met een
priority<\/code>-prop. Het gebruik van de priority-prop past automatischfetchpriority="high"<\/code> en andere optimalisaties toe op je LCP-afbeelding.<\/li> <\/ul>3. Resource Load Duration verkorten<\/h3>
Ervoor zorgen dat je LCP-resource zo klein mogelijk is, blijft een essentieel onderdeel van het proces. Deze fase gaat over hoe lang het duurt om het LCP-resourcebestand via het netwerk te downloaden. Zie voor een volledige gids over technieken voor beeldoptimalisatie ons artikel over het [url=\/core-web-vitals\/largest-contentful-paint\/optimize-lcp-image]optimaliseren van de LCP-afbeelding[\/url], en voor meer over [url=\/core-web-vitals\/largest-contentful-paint\/resource-load-duration]Resource Load Duration[\/url] specifiek.<\/p>
<\/two-stage-img>
Universele oplossingen voor laadtijd<\/h4>
- Verminder bestandsgrootte met moderne formaten en responsieve afbeeldingen:<\/strong> De meest directe manier om de downloadtijd te verkorten, is door het bestand kleiner te maken. Voor afbeeldingen betekent dit het gebruik van moderne, zeer efficiënte formaten zoals [url=https:\/\/web.dev\/articles\/serve-images-in-modern-formats]AVIF of WebP[\/url]. Je moet ook responsieve afbeeldingen serveren met het
<picture><\/code>-element of de attributensrcset<\/code> ensizes<\/code>. Dit zorgt ervoor dat een gebruiker op een mobiel apparaat een afbeelding ontvangt die de juiste grootte heeft voor hun kleinere scherm, in plaats van gedwongen te worden om een enorme afbeelding van desktopformaat te downloaden. Een 400 pixels breed mobiel scherm heeft simpelweg geen afbeeldingsbestand van 2000 pixels breed nodig. Voor op tekst gebaseerde LCP's moet je ervoor zorgen dat je lettertypen in het efficiënte WOFF2-formaat zijn en dat er subsets zijn gemaakt om ongebruikte tekens te verwijderen.<\/li>- Verminder netwerkconcurrectie:<\/strong> De LCP-resource moet concurreren om de beperkte netwerkbandbreedte van de gebruiker. Door niet-kritieke bronnen, zoals analytics-scripts of CSS voor inhoud onder de vouw, uit te stellen, komt er bandbreedte vrij zodat de browser zich kan concentreren op het sneller downloaden van de LCP-resource.<\/li>
- Host kritieke bronnen op je hoofddomein:<\/strong> Vermijd indien mogelijk het laden van je LCP-resource van een ander domein. Het opzetten van een nieuwe verbinding met een andere server voegt tijdrovende DNS-lookups en handshakes toe.<\/li> <\/ul>
Platformspecifieke oplossingen voor laadtijd<\/h4>
Op WordPress:<\/h5>
- Gebruik een plugin voor beeldoptimalisatie:<\/strong> Tools zoals ShortPixel of Smush kunnen afbeeldingen automatisch comprimeren bij het uploaden, ze converteren naar moderne formaten zoals WebP\/AVIF en responsieve
srcset<\/code>-groottes genereren.<\/li>- Wijzig de grootte van afbeeldingen handmatig:<\/strong> Wijzig de grootte van je afbeeldingen voordat je ze uploadt, zodat ze niet groter zijn dan nodig. Upload geen afbeelding van 4000px breed voor een ruimte die op de grootste schermen slechts 1200px breed is.<\/li> <\/ul>
Op een JS-framework:<\/h5>
- Gebruik een image CDN:<\/strong> Dit is een krachtige oplossing. Diensten zoals Cloudinary, Imgix of Akamai's Image & Video Manager kunnen het volledige optimalisatieproces automatiseren. Je uploadt één afbeelding van hoge kwaliteit en zij leveren een perfect gedimensioneerde, gecomprimeerde en geformatteerde versie aan elke gebruiker via een snel CDN.<\/li>
- Benut build tools:<\/strong> Wanneer je een afbeelding in een component importeert in een modern framework, kan de build tool (zoals Webpack of Vite) het bestand automatisch hashen en optimaliseren als onderdeel van het build-proces.<\/li> <\/ul>
4. Element Render Delay verkorten<\/h3>
De resource is klaar met downloaden, maar staat nog niet op het scherm. Dit betekent dat de hoofdtrååd van de browser bezig is met andere taken en het element niet kan painten. Dit is een andere veelvoorkomende en aanzienlijke bottleneck. Lees de volledige gids over [url=\/core-web-vitals\/largest-contentful-paint\/element-render-delay]Element Render Delay[\/url].<\/p>
<\/two-stage-img>
Universele oplossingen voor rendervertraging<\/h4>
- Stel ongebruikte JavaScript uit of verwijder deze:<\/strong> Alle JS die niet essentieel is voor het renderen van het initiële, zichtbare deel van de pagina moet worden uitgesteld met de attributen
defer<\/code> ofasync<\/code>.<\/li>- Gebruik Critical CSS:<\/strong> Een groot, render-blocking stylesheet kan het renderen vertragen. De critical CSS-techniek houdt in dat de minimale CSS die nodig is om de inhoud boven de vouw te stylen wordt geëxtraheerd, deze in de
<head><\/code> wordt geplaatst en de rest van de stijlen [url=https:\/\/web.dev\/articles\/extract-critical-css]asynchroon[\/url] wordt geladen.<\/li>- Breek lange taken op:<\/strong> Een langlopend script kan de hoofdtrååd voor een langere periode blokkeren, waardoor renderen wordt verhinderd. Dit is ook een primaire oorzaak van een slechte Interaction to Next Paint (INP). Breek je code op in kleinere, asynchrone brokken die de controle teruggeven aan de hoofdtrååd.<\/li> <\/ul>
Platformspecifieke oplossingen voor rendervertraging<\/h4>
Op WordPress:<\/h5>
- Audit je plugins:<\/strong> Te veel plugins, vooral zware zoals sliders of complexe page builders, kunnen aanzienlijke CSS en JS toevoegen die de hoofdtrååd blokkeren. Deactiveer plugins één voor één om prestatievreters te identificeren.<\/li>
- Gebruik een lichtgewicht thema:<\/strong> Een opgeblazen thema met tientallen functies die je niet gebruikt, kan een belangrijke bron van render-blocking code zijn. Kies een thema dat gericht is op prestaties.<\/li>
- Gebruik asset managers voor plugins:<\/strong> Met tools zoals Asset CleanUp of Perfmatters kun je CSS en JS van specifieke plugins conditioneel uitschakelen op pagina's waar ze niet nodig zijn.<\/li> <\/ul>
Op een JS-framework:<\/h5>
- Code splitting is essentieel:<\/strong> Stuur niet alle JavaScript van je app in één gigantische bundel. Splits je code per route (zodat gebruikers alleen de code downloaden voor de pagina die ze bezoeken) en per component.<\/li>
- Lazy load components:<\/strong> Gebruik
React.lazy<\/code> enSuspense<\/code> om componenten die niet onmiddellijk zichtbaar zijn (bijv. componenten onder de vouw of in modals) te lazy-loaden. Dit houdt ze uit de initiële bundel.<\/li> <\/ul>Geavanceerd: LCP optimaliseren voor volgende navigaties<\/h2>
Het fixen van de initiële LCP is belangrijk, maar je kunt het browsen op je site direct laten voelen door te optimaliseren voor volgende pagina-loads.<\/p>
Zorg dat pagina's in aanmerking komen voor de Back\/Forward Cache (bfcache)<\/h4>
De bfcache is een browseroptimalisatie die een volledige momentopname van een pagina in het geheugen opslaat wanneer een gebruiker wegnavigeert. Als ze op de terug-knop klikken, kan de pagina onmiddellijk worden hersteld, wat resulteert in een LCP van bijna nul. Veel pagina's komen niet in aanmerking voor deze cache door zaken als
unload<\/code> event listeners. Gebruik de Lighthouse "bfcache"-audit om je pagina's te testen en eventuele [url=https:\/\/web.dev\/articles\/bfcache]blokkerende functies[\/url] te verwijderen.<\/li>Gebruik de Speculation Rules API voor prerendering<\/h4>
Met de Speculation Rules API kun je de browser declaratief vertellen naar welke pagina's een gebruiker waarschijnlijk als volgende zal navigeren. De browser kan deze pagina's vervolgens op de achtergrond ophalen en prerenderen. Wanneer de gebruiker op een link naar een geprerenderde pagina klikt, is de navigatie onmiddellijk, wat leidt tot een [url=https:\/\/web.dev\/articles\/speculation-rules]LCP van bijna nul[\/url]. Je kunt deze regels definiëren in een
<script type="speculationrules"><\/code>-tag in je HTML.<\/p><script type="speculationrules"> { "prerender": [{ "source": "document", "where": { "href_matches": "\/products\/*" }, "eagerness": "moderate" }] } <\/script> <\/pre>Dit voorbeeld vertelt de browser om te zoeken naar links op de huidige pagina die naar productpagina's gaan en te beginnen met prerenderen wanneer een gebruiker over de link hovert.<\/p>
Werk de vier fasen op volgorde af. Los eerst de grootste bottleneck op, meet opnieuw, en herhaal.<\/p>
Volgende stappen: elke LCP-fase in detail<\/h2>
Elke LCP-fase heeft zijn eigen gids:<\/p>
- [url=\/core-web-vitals\/largest-contentful-paint\/optimize-lcp-image]De LCP-afbeelding optimaliseren[\/url]<\/strong>: Een volledige gids voor de selectie van het afbeeldingsformaat, responsieve afbeeldingen, preloading en veelvoorkomende fouten bij beeldoptimalisatie.<\/li>
- [url=\/core-web-vitals\/largest-contentful-paint\/resource-load-delay]Resource Load Delay[\/url]<\/strong>: Hoe je ervoor zorgt dat de browser je LCP-resource zo vroeg mogelijk ontdekt met behulp van preload, fetchpriority en een juiste HTML-structuur.<\/li>
- [url=\/core-web-vitals\/largest-contentful-paint\/resource-load-duration]Resource Load Duration[\/url]<\/strong>: Hoe je de downloadtijd voor je LCP-resource kunt verkorten door bestandscompressie, moderne formaten, CDN-configuratie en netwerkoptimalisatie.<\/li>
- [url=\/core-web-vitals\/largest-contentful-paint\/element-render-delay]Element Render Delay[\/url]<\/strong>: Hoe je de hoofdtrååd van de browser vrijmaakt, zodat deze het LCP-element onmiddellijk na het downloaden kan painten, inclusief critical CSS, JavaScript-uitstel en content-visibility.<\/li> <\/ul> <\/div>
[include]sidebarcwv.html[\/include] <\/div> <\/div> <\/div> <\/section> [include]blogfooter.html[\/include]
- [url=\/core-web-vitals\/largest-contentful-paint\/resource-load-delay]Resource Load Delay[\/url]<\/strong>: Hoe je ervoor zorgt dat de browser je LCP-resource zo vroeg mogelijk ontdekt met behulp van preload, fetchpriority en een juiste HTML-structuur.<\/li>
- Lazy load components:<\/strong> Gebruik
- Gebruik een lichtgewicht thema:<\/strong> Een opgeblazen thema met tientallen functies die je niet gebruikt, kan een belangrijke bron van render-blocking code zijn. Kies een thema dat gericht is op prestaties.<\/li>
- Gebruik Critical CSS:<\/strong> Een groot, render-blocking stylesheet kan het renderen vertragen. De critical CSS-techniek houdt in dat de minimale CSS die nodig is om de inhoud boven de vouw te stylen wordt geëxtraheerd, deze in de
- Benut build tools:<\/strong> Wanneer je een afbeelding in een component importeert in een modern framework, kan de build tool (zoals Webpack of Vite) het bestand automatisch hashen en optimaliseren als onderdeel van het build-proces.<\/li> <\/ul>
- Wijzig de grootte van afbeeldingen handmatig:<\/strong> Wijzig de grootte van je afbeeldingen voordat je ze uploadt, zodat ze niet groter zijn dan nodig. Upload geen afbeelding van 4000px breed voor een ruimte die op de grootste schermen slechts 1200px breed is.<\/li> <\/ul>
- Verminder netwerkconcurrectie:<\/strong> De LCP-resource moet concurreren om de beperkte netwerkbandbreedte van de gebruiker. Door niet-kritieke bronnen, zoals analytics-scripts of CSS voor inhoud onder de vouw, uit te stellen, komt er bandbreedte vrij zodat de browser zich kan concentreren op het sneller downloaden van de LCP-resource.<\/li>
- Gebruik framework-specifieke image components:<\/strong> Frameworks zoals Next.js bieden een afbeeldingscomponent met een
- Schakel lazy-loading uit voor de LCP-afbeelding:<\/strong> Veel optimalisatie-plugins zullen automatisch alle afbeeldingen lazy-loaden. Je moet de instelling in je plugin vinden om de LCP-afbeelding (en vaak de eerste paar afbeeldingen op de pagina) uit te sluiten van lazy-loading. Dit is zo'n veelvoorkomende fout dat we een speciaal artikel hebben over het [url=\/pagespeed\/fix-largest-contentful-paint-image-was-lazily-loaded-lighthouse]oplossen van lazy-loaded LCP-afbeeldingen[\/url].<\/li> <\/ul>
- Beheers de laadvolgorde met
- Implementeer SSR-caching:<\/strong> Als je Server-Side Rendering gebruikt, cache dan de gerenderde pagina's op de server (bijv. met Redis of een in-memory cache) om herrenderen bij elk verzoek te voorkomen.<\/li>
- Gebruik een caching-plugin:<\/strong> Een hoogwaardige caching-plugin (bijv. WP Rocket, W3 Total Cache) is onmisbaar. Het regelt het genereren van statische HTML-bestanden voor je, wat de kern is van effectieve caching op dit platform.<\/li> <\/ul>
- Gebruik een CDN:<\/strong> Een Content Delivery Network serveert je inhoud vanaf een server die fysiek dicht bij je gebruiker staat, wat de [url=https:\/\/www.cloudflare.com\/learning\/cdn\/what-is-a-cdn\/]netwerklatentie vermindert[\/url]. Het cachen van je volledige HTML-pagina's aan de edge van het CDN is een krachtige strategie voor een snelle, wereldwijde TTFB. Voor gedetailleerde tips voor CDN-configuratie, zie onze gids over [url=\/pagespeed\/configure-cloudflare-for-passing-the-core-web-vitals]hoe je Cloudflare configureert voor optimale prestaties[\/url].<\/li>
- Resource Load Delay:<\/strong> Dit is het "ontdekkingsprobleem" en een van de meest voorkomende problemen. De browser kan een resource niet downloaden als hij er niet van weet. Als je LCP-afbeelding verborgen is in een CSS- of JavaScript-bestand, of zelfs als deze in de HTML staat maar andere resources eerst worden opgevraagd, vindt de browser deze te laat, wat kostbare tijd verspilt. Lees de volledige gids over [url=\/core-web-vitals\/largest-contentful-paint\/resource-load-delay]Resource Load Delay[\/url].<\/li>
- Time to First Byte (TTFB):<\/strong> Dit is het onvermijdelijke fundament. Een trage serverrespons is een directe toevoeging, milliseconde voor milliseconde, aan je LCP. Voordat je ook maar één afbeelding optimaliseert, moet je ervoor zorgen dat je server snel reageert. Leer meer over het [url=\/core-web-vitals\/time-to-first-byte]optimaliseren van TTFB[\/url].<\/li>
- Lab Data:<\/strong> Prestatiegegevens verzameld binnen een gecontroleerde, consistente omgeving met behulp van tools zoals Lighthouse. Het is ideaal voor het debuggen en testen van wijzigingen, maar weerspiegelt niet altijd de ervaring van echte gebruikers.<\/li>
- Lab data (Lighthouse, DevTools) helpt je diagnosticeren WAAROM het gebeurt.<\/strong> Lab data wordt verzameld in een [url=https:\/\/developer.chrome.com\/docs\/devtools\/performance\/debug-web-vitals]gecontroleerde, gesimuleerde omgeving[\/url]. Zodra je field data een probleem op een specifieke pagina heeft bevestigd, kun je lab tools gebruiken om het probleem consistent te reproduceren en het laadproces te ontleden om de grondoorzaak te vinden.<\/li> <\/ol>