De Ultieme Core Web Vitals Checklist (2026)
Elke optimalisatie die je moet controleren bij het verbeteren van LCP-, INP- en CLS-prestaties

De Ultieme Core Web Vitals Checklist
Deze core web vitals checklist behandelt elke optimalisatie die je moet controleren voordat je een nieuwe site publiceert, wanneer je Largest Contentful Paint (LCP), Interaction to Next Paint (INP) of Cumulative Layout Shift (CLS) verbetert, of wanneer je grote wijzigingen aan je site aanbrengt. Gebruik het als een praktische referentie om ervoor te zorgen dat je website een snelle, soepele ervaring biedt die slaagt voor de Core Web Vitals-beoordeling van Google.
Deze checklist wordt voortdurend bijgewerkt met de nieuwste inzichten. Als je wilt bijdragen, neem dan gerust contact op.

Core Web Vitals Optimalisatie Checklist
Dit is een complete Core Web Vitals checklist. Gebruik deze om prestatieproblemen te identificeren en ervoor te zorgen dat je website snel en soepel is voor elke bezoeker. Elke checklistsectie linkt naar de relevante uitgebreide handleidingen, zodat je het "waarom" achter elke aanbeveling kunt leren.
Table of Contents!
- De Ultieme Core Web Vitals Checklist
-
Core Web Vitals Optimalisatie Checklist
- Afbeeldingen optimaliseren
- Weblettertypen optimaliseren
- Scripts optimaliseren
- Stijlen optimaliseren
- Resource Hints optimaliseren
- Iconen optimaliseren
- Serverresponstijden optimaliseren
- Interactiviteit optimaliseren
- Core Web Vitals Monitoring
- Critical Rendering Path optimaliseren
- Cookie Consent optimaliseren
- Single Page Applications optimaliseren
- Vermijd een te grote DOM
- API-verzoeken optimaliseren
- Chatwidgets optimaliseren
- Service Worker-prestaties optimaliseren
- Videocontent optimaliseren
Afbeeldingen optimaliseren
Grote afbeeldingen in de zichtbare viewport worden in de meeste gevallen het Largest Contentful Paint-element. Het optimaliseren van afbeeldingen is een van de meest impactvolle acties die je kunt ondernemen voor LCP. Gebruik deze core web vitals checklist-items om de snelheid van afbeeldingen te verbeteren. Lees voor de volledige strategie onze handleiding over het optimaliseren van de LCP-afbeelding.
- Schaal afbeeldingen naar de grootste weergaveafmetingen op het scherm: Dit zorgt ervoor dat er nooit bytes worden verspild aan het downloaden van afbeeldingen die groter zijn dan hun maximale weergavegrootte op het scherm. Combineer deze aanpak met responsive afbeeldingen voor kleinere schermformaten. Het serveren van correct geschaalde afbeeldingen kan de bestandsgrootte met 50% of meer verminderen zonder zichtbaar kwaliteitsverlies.
- Gebruik lazy loading voor afbeeldingen onder de vouw: Lazy loading vertraagt het laden van afbeeldingen buiten de viewport totdat ze in beeld worden gescrold, wat First Contentful Paint (FCP) en de algehele laadsnelheid verbetert. Gebruik nooit lazy loading voor de LCP-afbeelding, want dit vertraagt deze aanzienlijk.
- Preload visueel belangrijke afbeeldingen zoals het LCP-element: Preloading instrueert de browser om kritieke afbeeldingen op te halen voordat de rest van de content wordt geladen, waardoor LCP wordt geprioriteerd. Gebruik
<link rel="preload" as="image">in combinatie metfetchpriority="high"voor het beste resultaat. Dit is vooral belangrijk wanneer de LCP-afbeelding wordt gerefereerd vanuit CSS of geladen via JavaScript. - Stel breedte en hoogte in: Het vooraf definiëren van afbeeldingsafmetingen voorkomt layoutverschuivingen doordat de browser niet hoeft te wachten tot afbeeldingen geladen zijn. Dit verbetert CLS. Moderne browsers gebruiken de width- en height-attributen om de beeldverhouding te berekenen voordat de afbeelding is geladen, waardoor de juiste hoeveelheid ruimte wordt gereserveerd.
- Gebruik moderne afbeeldingsformaten zoals WebP of AVIF: Deze formaten bieden kleinere bestandsgroottes vergeleken met JPEG of PNG met behoud van vergelijkbare kwaliteit, wat leidt tot snellere laadtijden. WebP bereikt doorgaans 25-34% kleinere bestanden dan JPEG, terwijl AVIF de bestandsgrootte tot 50% kan verminderen. Gebruik het
<picture>-element met format-fallbacks voor maximale browsercompatibiliteit. - Gebruik native lazy loading en schakel JavaScript-gebaseerde lazy loading uit: Lazy loading vertraagt het laden van afbeeldingen buiten de viewport totdat ze in beeld worden gescrold. Native lazy loading aangeboden door browsers via het
loading="lazy"-attribuut is over het algemeen efficiënter dan het gebruik van JavaScript voor deze taak, omdat er geen extra scriptparsing of -uitvoering nodig is. - Gebruik responsive afbeeldingen met srcset: Dit attribuut specificeert verschillende afbeeldingsversies voor verschillende schermformaten, waardoor de browser de optimale afbeelding levert voor het apparaat van de gebruiker en onnodige grote downloads worden verminderd. Combineer
srcsetmet hetsizes-attribuut voor nauwkeurige controle. - Voeg decoding="async" toe: Het
decoding="async"-attribuut voorkomt dat de browser andere content blokkeert tijdens het decoderen van een afbeelding. Hierdoor kan de rendering engine andere elementen blijven schilderen terwijl het decoderen van de afbeelding parallel plaatsvindt. - Verwijder afbeeldingsmetadata: Metadata zoals EXIF-gegevens ingebed in afbeeldingen kunnen onnodige bytes toevoegen. Het verwijderen van deze informatie kan de bestandsgrootte verkleinen zonder de beeldkwaliteit aan te tasten. Tools zoals ImageOptim, Squoosh of Sharp kunnen het verwijderen van metadata automatiseren als onderdeel van je buildproces.
- Vermijd CSS-achtergrondafbeeldingen voor LCP-elementen: Achtergrondafbeeldingen die in CSS worden gerefereerd, worden later door de browser ontdekt dan
<img>-elementen in HTML. Als je een achtergrondafbeelding moet gebruiken als LCP-element, preload deze met een<link rel="preload">-tag om vroege ontdekking te garanderen. Lees meer over LCP resource load delay.
Weblettertypen optimaliseren
Weblettertypen kunnen de First Contentful Paint vertragen, layoutverschuivingen veroorzaken en concurreren om vroege bandbreedte. Gebruik deze checklist om een soepele weblettertype-ervaring te garanderen. Lees voor best practices over het hosten van lettertypen onze handleiding over het zelf hosten van Google Fonts.
- Gebruik font-display: swap voor snellere eerste paint: Stel de
font-display-eigenschap in opswapin je@font-face-declaraties. Dit zorgt ervoor dat de browser direct een fallback-lettertype toont terwijl het weblettertype op de achtergrond wordt geladen. Zodra het lettertype klaar is, wordt het naadloos verwisseld. Lees meer over het zichtbaar houden van tekst tijdens het laden van weblettertypen. - Gebruik font-display: optional gecombineerd met preloading om layoutverschuivingen door lettertypen te elimineren: Het combineren van
font-display: optionalmet preloading biedt een balans tussen snelheid en mogelijke layoutverschuivingen. De waardeoptionalverbergt tekst kort (ongeveer 100ms) voordat een fallback-lettertype wordt gebruikt. Preloading instrueert de browser om het weblettertype vroeg op te halen, waardoor de tijd op fallback-lettertypen wordt geminimaliseerd en layoutverschuivingen worden verminderd. - Gebruik font-face descriptors om het fallback-lettertype overeen te laten komen met de afmetingen van het weblettertype: Dit zorgt voor minimale CLS wanneer het weblettertype wordt ingewisseld. Door vergelijkbare metrieken op te geven met
size-adjust,ascent-override,descent-overrideenline-gap-overridevoor het fallback-lettertype, kun je voorkomen dat content verspringt wanneer het lettertype wordt geladen. - Subset lettertypen om alleen noodzakelijke tekens op te nemen: Verklein de bestandsgrootte van lettertypen door ze te subsetten zodat ze alleen de tekens bevatten die nodig zijn voor je content. Tools zoals Font Squirrel,
pyftsubsetofglyphhangerkunnen helpen bij het genereren van subsets. Een volledig Latijns tekenset-lettertype kan vaak worden teruggebracht van 100KB+ naar minder dan 20KB met goed subsetten. - Beperk het aantal lettertypegewichten en -stijlen: Vermijd het laden van te veel lettertypevariaties. Beperk je tot maximaal 2 kritieke lettertypen (meestal gepreload) en 2 laat ladende lettertypen (geladen na de initiële rendering). Elk extra lettertypegewicht voegt 15 tot 50KB downloadgrootte toe.
Scripts optimaliseren
Scripts kunnen Interaction to Next Paint-problemen veroorzaken, Cumulative Layout Shifts triggeren of de Largest Contentful Paint vertragen. Zelfs geoptimaliseerde en relatief onschadelijke vroege scripts kunnen concurreren om resources en paint-metrieken (LCP en FCP) vertragen. Lees voor een volledige handleiding 14 methoden om JavaScript uit te stellen.
- Verwijder onnodige JavaScript: Identificeer en elimineer ongebruikte JavaScript-code om de hoeveelheid code die gedownload en uitgevoerd moet worden te minimaliseren. Gebruik het Coverage-tabblad in Chrome DevTools om ongebruikte code te vinden. Het verwijderen van dode code vermindert zowel de downloadtijd als de verwerking op de main thread.
- Prioriteer scripts op basis van hun functie en belang: Scripts die grote wijzigingen aanbrengen in de zichtbare viewport moeten render-blokkerend zijn. Belangrijke scripts moeten uitgesteld of async geladen worden. Nice-to-have scripts moeten laden wanneer de browser idle is. Bekijk onze handleiding voor resource-prioritering voor een gedetailleerde strategie.
- Code splitting en lazy loading: Splits grote JavaScript-bundels op in kleinere delen en laad ze alleen wanneer nodig. Dit vermindert de initiële laadtijd. Moderne bundlers zoals webpack, Rollup en esbuild ondersteunen automatische code splitting op basis van dynamische imports.
- Minificeer en hercompileer JavaScript-bestanden: Minificeer en hercompileer je JavaScript-bestanden altijd met een minificatietool zoals SWC, Terser of esbuild. Minificatie vermindert de bestandsgrootte van JavaScript doorgaans met 30 tot 50%.
- Beperk scripts van derden: Scripts van derden kunnen aanzienlijke prestatie-overhead introduceren. Evalueer hun noodzaak en verken alternatieven indien mogelijk. Elk script van derden voegt DNS-lookups, verbindingsoverhead en verwerkingstijd op de main thread toe. Controleer scripts van derden regelmatig met het Netwerkpaneel van Chrome DevTools.
- Laad scripts van derden asynchroon: Vanwege de onvoorspelbare aard van scripts van derden mag rendering nooit geblokkeerd worden door een derde partij. Gebruik het
async- ofdefer-attribuut op alle scripttags van derden. - Monitor de prestaties van scripts van derden: Gebruik de Long Animation Frames (LoAF) API of CoreDash om de impact van scripts van derden op INP en LCP in de echte wereld te volgen. Stel prestatiebudgetten in voor JavaScript van derden en evalueer deze regelmatig.
Stijlen optimaliseren
Stijlen zijn standaard render-blokkerend. Het optimaliseren van stijlen resulteert in geoptimaliseerde paint-metrieken. Volg de checklist om de stijlprestaties van je webpagina te verbeteren. Render-blokkerende CSS heeft direct invloed op zowel First Contentful Paint als LCP element render delay. Lees voor tips over het opschonen van ongebruikte stijlen hoe je ongebruikte CSS verwijdert.
- Minificeer CSS-bestanden: Verwijder onnodige tekens zoals witruimte, opmerkingen en opmaak uit CSS-bestanden. Geminificeerde bestanden zijn kleiner, wat leidt tot snellere laadtijden. Tools zoals cssnano, PostCSS of de ingebouwde compressie van je CSS-preprocessor kunnen dit automatiseren.
- Verwijder ongebruikte CSS: Identificeer en elimineer CSS-code die niet wordt gebruikt op je webpagina's. Dit vermindert de hoeveelheid gegevens die de browser moet downloaden en verwerken, wat de prestaties verbetert. Tools zoals PurgeCSS of het Coverage-tabblad in Chrome DevTools helpen bij het identificeren van ongebruikte CSS.
- Inline kritieke CSS: Serveer stijlen die essentieel zijn voor het renderen van de initiële pagina-content direct in de HTML om de paint-metrieken te verbeteren. Overweeg om kritieke CSS alleen te serveren aan nieuwe bezoekers en gecachte externe stylesheets te gebruiken voor terugkerende bezoekers. Deze techniek kan de FCP verminderen door de round trip die nodig is om een extern stylesheet op te halen te elimineren.
- Verdeel CSS-bestandsgroottes gelijkmatig: Hoewel het efficiënt lijkt om alle CSS in één bestand te combineren, kunnen extreem grote bestanden de downloadtijden vertragen. Overweeg om CSS op te splitsen in kleinere bestanden met een meer gelijkmatige grootteverdeling (10 tot 15KB elk) om het laden te optimaliseren en de browser in staat te stellen stijlen incrementeel te verwerken.
- Laad offscreen-stijlen asynchroon: Voor stijlen die van toepassing zijn op elementen buiten de initiële viewport, overweeg asynchroon laden via het
media="print" onload="this.media='all'"-patroon. Hierdoor kan de browser deze stijlen parallel ophalen met andere resources zonder de initiële rendering van de pagina te blokkeren.
Resource Hints optimaliseren
Resource hints helpen bij het prioriteren van downloads voor kritieke resources. Gepreloade resources worden meestal eerder in de wachtrij geplaatst voor download en zijn veel eerder beschikbaar voor de browser dan zonder preloading. Effectief gebruik van resource hints kan de LCP resource load delay aanzienlijk verminderen. Lees voor geavanceerde implementatie over 103 Early Hints.
- Verwijder niet-kritieke resource hints: Verwijder preload-hints voor resources die niet essentieel zijn voor de initiële paginalading. Dit voorkomt onnodige downloads of netwerkverbindingen die concurreren om die vroege, bandbreedte-beperkte resources. Elke onnodige preload verbruikt bandbreedte die voor kritieke resources gebruikt zou kunnen worden.
- Preconnect naar kritieke domeinen: Stel vroegtijdig verbindingen in met belangrijke domeinen (zoals content delivery networks of lettertypeproviders). Dit versnelt het downloaden van kritieke resources van die domeinen door DNS-, TCP- en TLS-handshakes vooraf te voltooien. Gebruik
<link rel="preconnect" href="https://example.com">voor kritieke origins van derden. - Overweeg DNS prefetch als alternatief voor preconnect: Vergelijkbaar met preconnect geeft DNS prefetch de browser een hint over mogelijke verbindingen. Preconnect geeft echter prioriteit aan het opzetten van de volledige verbinding, terwijl DNS prefetch alleen de browser vertelt om de domeinnaam vooraf op te lossen. Gebruik
<link rel="dns-prefetch">wanneer de volledige verbindingsoverhead van preconnect niet gerechtvaardigd is. - Preload het LCP-element: LCP meet hoe lang het duurt voordat de hoofdcontent is geladen. Het preloaden van het LCP-element instrueert de browser om het downloaden van deze kritieke resource te prioriteren, waardoor de tijd die het kost voor gebruikers om de hoofdcontent te zien wordt versneld. Dit is vooral belangrijk voor afbeeldingen die gerefereerd worden in CSS of geladen via JavaScript.
- Preload kritieke lettertypen: Het preloaden van kritieke lettertypen zorgt ervoor dat de browser ze vroeg ophaalt, waardoor vertragingen bij het weergeven van tekst worden voorkomen en cumulatieve layoutverschuivingen door lettertypewisseling worden verbeterd. Gebruik
<link rel="preload" as="font" type="font/woff2" crossorigin>voor je belangrijkste lettertypen. - Geef de voorkeur aan 103 Early Hints voor resource hints: De 103 Early Hints HTTP-statuscode stelt de server in staat om resource hints te versturen voordat het volledige antwoord klaar is. Als je server 103 niet ondersteunt, gebruik dan
Link-response headers. Als headers niet beschikbaar zijn, voeg dan<link>-elementen toe aan de<head>van de pagina als fallback. Eerdere levering van hints betekent snellere resource-ontdekking. - Preload lettertypen voordat CSS-bestanden ze ontdekken: Lettertypen die in CSS worden gerefereerd, worden pas ontdekt nadat het CSS-bestand is gedownload en geparsed. Door lettertypen direct in de HTML
<head>te preloaden, elimineer je de afhankelijkheid van CSS-parsing en laat je lettertypen parallel laden, waardoor zowel FCP als het risico op layoutverschuivingen wordt verminderd.
Iconen optimaliseren
Iconen kunnen aanzienlijk gewicht toevoegen aan je pagina als ze niet geoptimaliseerd zijn. Grote inline SVG-iconen blazen je HTML op, terwijl icon fonts vaak duizenden ongebruikte glyphs bevatten. Het optimaliseren van iconen heeft invloed op zowel LCP (verminderd HTML/CSS-gewicht) als CLS (correcte reservering van afmetingen).
- Vermijd inline SVG-iconen in HTML: Het inlinen van grote SVG-iconen kan de grootte van je HTML-code vergroten en de paginalading vertragen. Overweeg alternatieve methoden zoals het serveren als aparte bestanden of het gebruik van icon fonts (met voorzichtigheid) om de HTML-grootte te minimaliseren en browsercaching van de iconen mogelijk te maken. Een extern SVG-spritesheet is vaak de beste balans tussen prestaties en flexibiliteit.
- Vermijd grote icon fonts: Gebruik nooit grote iconsets zoals Font Awesome in hun geheel. Gebruik subsetting om geoptimaliseerde icon fonts of individuele SVG's te creëren om de totale grootte van de webpagina te verminderen en de laadsnelheid te verbeteren. Een volledige Font Awesome-set kan meer dan 100KB bedragen, terwijl een subset met 20 iconen minder dan 5KB kan zijn.
- Reserveer breedte en hoogte voor iconen: Net als bij afbeeldingen helpt het specificeren van breedte en hoogte voor iconen de browser om ruimte te reserveren en voorkomt het layoutverschuivingen tijdens het laden. Gebruik de
width- enheight-attributen op SVG-elementen of stel expliciete afmetingen in via CSS. - Verlaag de prioriteit van niet-kritieke iconsets: Als iconen niet cruciaal zijn voor de initiële rendering van je pagina, overweeg dan om ze met lagere prioriteit te laden. Dit zorgt ervoor dat essentiële content eerst wordt geladen en minimaliseert de impact op Core Web Vitals-metrieken. Gebruik lazy loading of laad icon-stylesheets asynchroon na de initiële paint.
Serverresponstijden optimaliseren
Serverresponstijden, gemeten door Time to First Byte (TTFB), hebben een directe relatie met alle paint-metrieken. Een trage serverrespons vertraagt alles wat daarna komt. Verken voor gedetailleerde optimalisatiestrategieën onze handleidingen over het diagnosticeren van TTFB-problemen en het configureren van Cloudflare voor prestaties.
- Gebruik een snelle en betrouwbare hostingprovider: Een snelle hostingprovider met een sterke infrastructuur kan de serverresponstijden en de algehele websiteprestaties aanzienlijk verbeteren. Benchmark hostingproviders met echte TTFB-metingen, niet met synthetische marketingclaims.
- Optimaliseer server-side code en databasequery's: Log regelmatig de code-uitvoering en databasequerytijd om knelpunten te vinden en de algehele snelheid te verbeteren. Gebruik queryprofilering en application performance monitoring (APM)-tools om trage endpoints te identificeren.
- Implementeer cachingstrategieën: Maak gebruik van browsercaching en server-side caching om veelgebruikte gegevens op te slaan, waardoor herhaalde gegevensopvraging wordt verminderd en laadtijden worden verbeterd. Full-page caching kan TTFB terugbrengen van seconden naar minder dan 100ms. Lees meer over cacheduur-optimalisatie.
- Client-side of edge rendering voor personalisatie: Overweeg client-side of edge rendering van kleine personalisaties zoals winkelwagentellingen, inlogstatus of kleine menuwijzigingen om de full page cache-functionaliteit te behouden. Dit voorkomt het cache-busten van de gehele pagina voor kleine dynamische elementen.
- Optimaliseer serverconfiguraties: Controleer en stem je webserverinstellingen af voor prestaties. Dit omvat connection keep-alive-instellingen, aantallen worker-processen, geheugentoewijzing en timeout-waarden. Verkeerd geconfigureerde servers kunnen resources verspillen en responstijden verhogen.
- Gebruik een Content Delivery Network (CDN): Een CDN distribueert de statische content van je website over meerdere edge nodes (servers). Dit verkleint de fysieke afstand die gebruikers moeten overbruggen om je content te bereiken, wat leidt tot snellere laadtijden voor een wereldwijd publiek. Bovendien zijn CDN's meestal beter geconfigureerd dan je eigen server. Bekijk onze handleiding over het configureren van Cloudflare voor een praktisch installatieoverzicht.
- Verminder server-side verwerking: Minimaliseer de hoeveelheid werk die je server per verzoek doet. Bereken dure operaties vooraf, gebruik efficiënte algoritmen en verplaats niet-essentiële verwerking naar achtergrondtaken. Analyseer de request lifecycle van je applicatie om onnodige verwerkingsstappen te vinden en te elimineren.
- Gebruik HTTP/3: HTTP/3 is de nieuwste versie van het Hypertext Transfer Protocol. HTTP/3 is sneller en efficiënter dan HTTP/2 en aanzienlijk sneller dan HTTP/1.1. Upgraden naar HTTP/3 kan de algehele laadtijden van pagina's verbeteren en mogelijk alle drie de Core Web Vitals-metrieken (LCP, INP, CLS). Lees meer over optimalisatie van verbindingsduur.
- Stel Server-Timing headers in: Deze headers bieden gedetailleerde informatie over hoe lang verschillende delen van je pagina duren om te verwerken op de server. Met deze gegevens kun je knelpunten en verbeterpunten aanwijzen, specifiek gericht op het verbeteren van Largest Contentful Paint (LCP). Server-Timing headers zijn zichtbaar in het Netwerkpaneel van Chrome DevTools en kunnen worden vastgelegd door RUM-tools zoals CoreDash.
- Log trage databasequery's en optimaliseer ze regelmatig: Schakel slow query logging in je database (MySQL, PostgreSQL, MongoDB) in en bekijk de logs wekelijks. Indexoptimalisatie, herstructurering van query's en het toevoegen van cachinglagen voor veelvoorkomende query's kunnen TTFB drastisch verminderen.
- Gebruik GZIP- of Brotli-compressie: GZIP, of het nieuwere Brotli, biedt directe compressie van tekstgebaseerde resources (HTML, CSS, JavaScript) vóór verzending, wat resulteert in ongeveer 70% kleinere bestandsgroottes. Brotli bereikt doorgaans 15 tot 20% betere compressie dan GZIP. Kleinere bestandsgroottes vertalen zich in snellere laadtijden.
Interactiviteit optimaliseren
Interaction to Next Paint (INP) meet hoe snel je site reageert op gebruikersinteracties. Slechte interactiviteit wordt vaak veroorzaakt door langlopende JavaScript-taken die de main thread blokkeren. Lees voor een volledige uitsplitsing van de drie INP-fasen onze handleidingen over input delay, processing time en presentation delay.
- Implementeer een idle-until-urgent patroon voor zware scripts: Deze aanpak houdt in dat kritieke taken worden geprioriteerd en niet-essentiële JavaScript-uitvoering wordt uitgesteld totdat de main thread van de browser idle is. Dit zorgt ervoor dat kritieke taken zoals rendering en gebruikersinteracties niet worden geblokkeerd door langlopende scripts. Gebruik
requestIdleCallbackom niet-urgente taken in te plannen. Lees meer over het optimaliseren van processing time. - Splits lange taken op door te yielden aan de main thread: Complexe JavaScript-taken kunnen de main thread blokkeren, waardoor de responsiviteit vertraagt. Door deze taken op te splitsen in kleinere stukken en de controle terug te geven aan de main thread tussen de stukken, kan de browser gebruikersinteracties afhandelen en een soepele gebruikerservaring behouden. Gebruik
scheduler.yield()(waar ondersteund) ofsetTimeout(0)om lange taken op te splitsen. Bekijk onze handleiding over het verbeteren van INP door JavaScript-scrolling te vermijden. - Geef directe feedback na invoer: Gebruikers verwachten directe responsiviteit na interactie met je website. Geef visuele aanwijzingen of bevestig gebruikersinvoer onmiddellijk, zelfs terwijl langlopende taken op de achtergrond worden verwerkt. Gebruik CSS-transities en de
:activepseudo-class voor directe visuele feedback. Dit helpt een gevoel van interactiviteit te behouden en voorkomt dat gebruikers het gevoel hebben dat de website is vastgelopen. - Gebruik passive event listeners voor scroll en touch: Voeg
{ passive: true }toe aan scroll- en touch-event listeners. Passive listeners vertellen de browser dat de handler nooitpreventDefault()zal aanroepen, waardoor de browser direct kan beginnen met scrollen zonder te wachten op JavaScript. Dit heeft vooral impact op mobiele apparaten en verbetert direct INP voor scroll-gerelateerde interacties.
Core Web Vitals Monitoring
Het continu monitoren van je Core Web Vitals is essentieel om regressies vroegtijdig op te vangen en te valideren dat optimalisaties het verwachte effect hebben. Gebruik een combinatie van lab-tools, veldgegevens en real user monitoring voor een compleet beeld.
- Controleer Lighthouse regelmatig: Lighthouse is een gratis, open-source audittool van Google die je helpt prestatieproblemen op je webpagina's te identificeren. Hoewel Lighthouse de Core Web Vitals niet direct meet in een echte gebruikerscontext, is het een uitstekende tool om periodiek je website te testen en te vergelijken onder gereguleerde en gestandaardiseerde omstandigheden. Voer Lighthouse uit in CI/CD-pipelines om regressies op te vangen vóór deployment.
- Controleer de historische CrUX-gegevens regelmatig: CrUX (Chrome User Experience Report) is een openbare dataset van Google die real-world prestatiegegevens biedt. CrUX is de gegevensbron die Google gebruikt om te bepalen of je wel of niet slaagt voor de Core Web Vitals. Gebruik de historische gegevens om snel regressies te herkennen. Je kunt CrUX-gegevens raadplegen via PageSpeed Insights, het CrUX Dashboard of de CrUX API.
- Stel RUM-tracking in: RUM (Real User Monitoring) houdt in dat je de echte gebruikerservaringen op je website bijhoudt. RUM-tools verzamelen gegevens over hoe lang het werkelijk duurt voordat pagina's laden voor je bezoekers op verschillende locaties en apparaten. Dit biedt waardevolle inzichten in real-world prestaties, als aanvulling op de gesimuleerde gegevens van Lighthouse en CrUX. We raden CoreDash aan als je RUM-trackingtool voor gedetailleerde Core Web Vitals-attributiegegevens.
- Stel prestatiebudgetten in: Prestatiebudgetten stellen specifieke prestatiedoelen (bijvoorbeeld LCP onder 2,5 seconden, INP onder 200ms, CLS onder 0,1) voor verschillende metrieken. Deze dienen als benchmarks om je optimalisatie-inspanningen te sturen. Het regelmatig controleren van je prestaties ten opzichte van deze budgetten helpt je gebieden te identificeren die onmiddellijke aandacht nodig hebben en optimalisaties te prioriteren.
- Gebruik segmentatie: Gebruik segmentatie om je meest waardevolle bezoekerstypen en verschillende paginatypen te volgen. Grotere hoeveelheden verkeer kunnen anders prestatieproblemen maskeren die specifiek deze vitale groepen treffen. Segmenteer op apparaattype, verbindingssnelheid, geografie en paginasjabloon om verborgen problemen te ontdekken.
Critical Rendering Path optimaliseren
Het critical rendering path is de reeks stappen die de browser neemt om HTML, CSS en JavaScript om te zetten in zichtbare pixels. Het optimaliseren van dit pad verbetert direct First Contentful Paint en LCP element render delay. Zie ook hoe je een te grote DOM-grootte vermijdt.
- Minimaliseer het aantal kritieke resources: Elke render-blokkerende resource (CSS en synchrone JavaScript) moet worden gedownload en verwerkt voordat de browser kan schilderen. Verminder het aantal kritieke resources door niet-essentiële scripts uit te stellen en niet-kritieke stylesheets asynchroon te laden.
- Optimaliseer de volgorde van het laden van resources: Zorg ervoor dat kritieke CSS en lettertypen als eerste worden geladen, gevolgd door above-the-fold afbeeldingen en daarna uitgestelde scripts. Gebruik het
fetchpriority-attribuut en resource-prioriteringshints om het belang aan de browser te communiceren. - Verminder de diepte van de DOM-boom: Diep geneste DOM-bomen verhogen de stijlberekeningtijd en het layoutwerk. Streef naar een maximale diepte van 32 niveaus en minder dan 1.500 totale DOM-elementen waar mogelijk. Een plattere DOM-structuur verbetert zowel de paintprestaties als INP presentation delay.
- Geef de voorkeur aan classes en ID's boven elementtags en attributen: Gebruik in plaats van
p.importantgewoon.important. Dit vermindert de noodzaak voor de browser om alle elementen van dat type te doorzoeken voor stijlmatching, wat resulteert in snellere stijlherberekening. - Vermijd het diep nesten van selectors: Hoe dieper je CSS-selectors nest, hoe meer berekeningen de browser moet uitvoeren. Probeer je HTML te herstructureren om nesting te verminderen of gebruik meer specifieke classes dichter bij het element. Beperk de selectordiepte tot maximaal 3 niveaus.
- Minimaliseer descendant selectors: Selectors zoals
.container > .contentdwingen de browser om elk element binnen de container te controleren. Gebruik indien mogelijk een directere class op het content-element voor snellere selectormaching. - Consolideer selectors met dezelfde stijlen: Als meerdere elementen dezelfde stijlen delen, groepeer ze dan in een enkele class of gebruik een BEM (Block Element Modifier)-naamgevingsconventie voor betere onderhoudbaarheid en kleinere CSS-output.
Cookie Consent optimaliseren
Cookie consent-banners zijn vereist door de AVG en vergelijkbare regelgeving, maar ze kunnen Core Web Vitals aanzienlijk beïnvloeden als ze niet zorgvuldig worden geïmplementeerd. Een slecht geladen toestemmingsbanner kan LCP vertragen, CLS veroorzaken en INP verhogen. Lees voor meer details over het optimaliseren van widgets van derden voor Core Web Vitals.
- Overweeg server-side cookie consent voor dynamische pagina's: Voor dynamisch server-side gerenderde pagina's is het implementeren van een server-side oplossing die de toestemmingsbanner in de initiële HTML-respons rendert vaak sneller dan het laden van een aparte op JavaScript gebaseerde oplossing. Dit elimineert het extra netwerkverzoek en de overhead van scriptevaluatie.
- Laad cookie consent-scripts asynchroon op gecachte pagina's: Voor gecachte pagina's laad je je cookie consent-script asynchroon en overweeg
fetchpriority="high"toe te voegen aan het script om ervoor te zorgen dat het vroeg genoeg laadt om weer te geven vóór gebruikersinteractie. - Houd toestemmingsteksten kort om LCP-interferentie te voorkomen: Lange cookiemeldingteksten kunnen het LCP-element overnemen omdat de browser het grootste zichtbare tekstblok beschouwt als een potentieel LCP-kandidaat. Overweeg kortere teksten te schrijven of teksten op te splitsen in meerdere alinea's met een kleiner zichtbaar oppervlak.
- Host cookie-meldingsscripts zelf: Cache en host cookie-meldingsscripts en stylesheets zelf wanneer mogelijk. Dit elimineert DNS-lookups en verbindingsoverhead naar consent management platforms van derden en geeft je volledige controle over het laadgedrag.
Single Page Applications optimaliseren
Single Page Applications (SPA's) gebouwd met React, Vue, Angular of vergelijkbare frameworks staan voor unieke Core Web Vitals-uitdagingen. Client-side rendering kan zowel FCP als LCP vertragen, terwijl hydration INP kan blokkeren.
- Gebruik altijd server-side rendering of prerendering: SPA's die uitsluitend afhankelijk zijn van client-side rendering dwingen de browser om JavaScript te downloaden, te parsen en uit te voeren voordat er content zichtbaar is. Gebruik SSR (Next.js, Nuxt, SvelteKit) of statische prerendering om initiële HTML te serveren die de browser direct kan schilderen.
- Geef de voorkeur aan statische prerenders boven dynamische generatie: Statische prerenders (gegenereerd tijdens het bouwen) zijn veel sneller dan dynamisch gegenereerde prerenders omdat ze direct vanaf een CDN kunnen worden geserveerd zonder server-side verwerking. Gebruik statische generatie voor pagina's die geen per-verzoek gegevens nodig hebben.
- Laad scripts van derden na hydration: Tijdens hydration verbruikt het framework al aanzienlijke main thread-tijd om de pagina interactief te maken. Het gelijktijdig laden van scripts van derden verergert het probleem en verslechtert input delay. Stel alle niet-essentiële scripts uit tot na het hydration-proces.
Vermijd een te grote DOM
Een grote DOM (meer dan 1.500 elementen of een diepte van meer dan 32 niveaus) verhoogt het geheugengebruik, vertraagt stijlberekeningen en veroorzaakt kostbare layout-reflows. Dit heeft direct invloed op zowel INP presentation delay als paint-metrieken. Zie hoe je een te grote DOM-grootte oplost.
- Verminder onnodige DOM-elementen: Controleer je HTML op wrapper-elementen die geen styling of structureel doel dienen. Vervang diep geneste
<div>-structuren door semantische HTML-elementen. Overweeg het virtualiseren van lange lijsten met bibliotheken zoals react-window of virtual-scroller om de actieve DOM klein te houden. - Gebruik efficiënte JavaScript- en CSS-selectors: Complexe CSS-selectors en JavaScript DOM-query's (zoals
querySelectorAllmet brede patronen) worden exponentieel trager naarmate de DOM groeit. Gebruik specifieke class-selectors en beperk het bereik van DOM-query's tot deelbomen wanneer mogelijk. - Gebruik content-visibility: auto voor offscreen-content: De CSS-eigenschap
content-visibility: autovertelt de browser om het renderen van offscreen-elementen over te slaan totdat ze in beeld worden gescrold. Dit kan het initiële renderwerk drastisch verminderen voor pagina's met lange contentsecties.
API-verzoeken optimaliseren
API-verzoeken die rendering blokkeren of content vertragen kunnen een negatief effect hebben op LCP en TTFB. Client-side data fetching is een veelvoorkomende oorzaak van trage LCP in single page applications.
- Minimaliseer het aantal API-verzoeken: Elk API-verzoek draagt bij aan de totale laadtijd van de pagina. Evalueer de functionaliteit van je website en identificeer mogelijkheden om het aantal API-verzoeken dat nodig is voor het renderen van de initiële content te verminderen. Technieken zoals data batching (het combineren van meerdere verzoeken in één) en GraphQL kunnen het aantal round trips verminderen.
- Gebruik efficiënte en geoptimaliseerde API's: Het ontwerp en de implementatie van de API's zelf kunnen de prestaties beïnvloeden. Zorg ervoor dat je goed ontworpen API's gebruikt die geoptimaliseerd zijn voor snelheid en efficiëntie. Implementeer cachingmechanismen aan de API-kant om responstijden voor veelgevraagde gegevens te verminderen.
- Preload kritieke API-verzoeken: Net als het preloaden van kritieke resources zoals afbeeldingen kan het preloaden van essentiële API-verzoeken de waargenomen prestaties aanzienlijk verbeteren. Gebruik
<link rel="preload" as="fetch">om de browser te instrueren kritieke API's vroeg op te halen, waardoor vertragingen worden geminimaliseerd wanneer ze nodig zijn voor het renderen van de initiële content. Bekijk onze handleiding voor resource-prioritering voor meer technieken.
Chatwidgets optimaliseren
Chatwidgets zijn een veelvoorkomende oorzaak van layoutverschuivingen en kunnen zelfs problemen veroorzaken met de LCP als ze vroeg worden geladen. Lees voor een stapsgewijze aanpak hoe je een chatwidget implementeert met perfecte Core Web Vitals.
- Laad chatwidgets nadat de hoofdcontent is geladen: Niemand in de geschiedenis van het internet heeft ooit moeten chatten voordat de hoofdcontent van de pagina was geladen. Stel de initialisatie van chatwidgets uit totdat de pagina zijn initiële render heeft voltooid, met behulp van
requestIdleCallbackof een scroll-gebaseerde trigger. - Voorkom layoutverschuivingen door chatwidgets: Als chatwidgets een layoutverschuiving veroorzaken, is het meestal een goed idee om ze te verbergen met
opacity: 0totdat ze volledig zijn gerenderd op de pagina. Hierdoor kan de widget op de achtergrond worden opgemaakt zonder dat zichtbare content verspringt. Gebruik een CSS-transitie om de widget soepel in te faden. - Kies lichtgewicht chatwidget-providers: Shop around. Sommige chatwidgets zijn veel lichter en veroorzaken minder Core Web Vitals-problemen dan andere. Vergelijk de JavaScript-bundelgrootte, het aantal netwerkverzoeken en de INP-impact van verschillende providers voordat je een keuze maakt.
Service Worker-prestaties optimaliseren
Service workers kunnen de prestaties bij herhaalde bezoeken aanzienlijk verbeteren door assets en zelfs volledige pagina-antwoorden te cachen, waardoor TTFB voor terugkerende bezoekers wordt verminderd. Een slecht geïmplementeerde service worker kan de navigatie echter juist vertragen. Lees meer over cacheduur-optimalisatie.
- Cache kritieke assets in de service worker: Gebruik een cache-first strategie voor statische assets zoals CSS, JavaScript, lettertypen en afbeeldingen. Hierdoor kunnen terugkerende bezoekers je site bijna direct laden vanuit de lokale cache. Precache de belangrijkste resources tijdens het install-event van de service worker.
- Optimaliseer service worker-code: Houd je service worker slank en efficiënt. Vermijd complexe routinglogica, overmatig gebruik van
event.waitUntil()en grote precache-manifesten die de installatie vertragen. Gebruik het stale-while-revalidate patroon voor resources die regelmatig veranderen maar geen onmiddellijke versheid vereisen.
Videocontent optimaliseren
Video-elementen kunnen het LCP-element worden als ze de grootste zichtbare content in de viewport zijn. Grote, niet-geoptimaliseerde video's concurreren ook om bandbreedte met andere kritieke resources.
- Comprimeer en optimaliseer video's: Gebruik moderne codecs zoals H.264, VP9 of AV1 met passende kwaliteitsinstellingen. Verlaag de videoresolutie zodat deze overeenkomt met de maximale weergavegrootte. Een video die op 400px breed wordt weergegeven, hoeft niet gecodeerd te zijn op 1920px. Gebruik two-pass encoding voor de beste kwaliteit-bestandsgrootteverhouding.
- Gebruik lazy loading voor video's: Voor video's onder de vouw, gebruik het
loading="lazy"-attribuut op<iframe>-elementen of stel het laden van video's uit met de Intersection Observer API. Vervang automatisch afspelende achtergrondvideo's door posterafbeeldingen en laad de video pas wanneer de gebruiker er naartoe scrolt. - Host video's op een snel CDN: Videobestanden zijn groot en profiteren enorm van CDN-distributie. Gebruik een dedicated video-CDN of hostingservice (zoals Cloudflare Stream, Mux of Bunny.net) die adaptive bitrate streaming, geografische distributie en geoptimaliseerde levering biedt.
- Gebruik posterafbeeldingen voor video-elementen: Stel altijd een
poster-attribuut in op<video>-elementen. De posterafbeelding geeft de browser iets om direct te schilderen terwijl de video laadt, wat kan dienen als het LCP-element. Optimaliseer de posterafbeelding net als elke andere LCP-afbeelding.
The RUM tool I built for my own clients.
CoreDash is what I use to audit enterprise platforms. Under 1KB tracking script, EU hosted, no consent banner. AI with MCP support built in. The same tool, available to everyone.
Create Free Account
