Power hour · gmbapi

LCP van 5 naar 1,9 seconden, gefixt in één call

Een lokaal SEO-bedrijf met een gloednieuwe Next.js-site, snel op desktop en traag op mobiel.

1,9sLCP in CrUX, was 5s
150msINP op mobiel, was 220ms
700msserver response, was 3s
0,00CLS in CrUX, was 0,08
Klantgmbapi, lokale SEO-software
PlatformReact, Next.js, headless CMS
DienstPower hour, augustus 2026
De klant

Een nieuwe site die slaagde op desktop en zakte op mobiel

gmbapi maakt software voor lokale SEO, en een goeie ook. In juli 2026 stapten ze over van WordPress naar een nieuwe site in React en Next.js op een headless CMS. Desktop voldeed aan de Core Web Vitals. Op mobiel voldeden LCP, FCP en INP niet.

Ik ken Michel van Luijtelaar, die het runt, al sinds 2021. Hij vroeg me in 2023 naar zijn WordPress-site te kijken en in 2025 opnieuw, en in juli 2026 kwam hij met de nieuwe.

gmbapi.com homepage
Wat we vonden, wat we deden

Dood door duizend speldenprikken

Er was niet één groot probleem, en dat is er bijna nooit. We namen een mobiele page load op in DevTools, liepen de trace door van de eerste byte tot de LCP, en fixten dingen terwijl we praatten.

Wat er mis was
Wat we deden
TTFB
De server deed er 3 seconden over tot de eerste byte. Elke pagina werd per request gerenderd en haalde de content live op uit het headless CMS, en de cache headers stonden op no-store, waardoor het CDN de HTML nooit bewaarde.
De pagina's gingen over naar static rendering met ISR, de CMS-fetches werden gecached en dankzij de headers kon het CDN de HTML bewaren. De server response ging naar 700 ms, en dat gaat van de FCP en LCP af nog voor je iets anders aanraakt.
LCPINP
Tags en analytics in de head, third-party widgets bovenaan de pagina, en componenten gerenderd in de browser die de server net zo goed kon renderen. Al dat JavaScript werd gebruikt; het draaide alleen te vroeg.
De tags en widgets wachten tot de pagina er is, en die componenten komen van de server.
LCP
De hero werd lazy loaded. Hij liep via next/image zonder priority, het CMS-blok zette loading="lazy" op elke afbeelding, en waar de hero een CSS-achtergrond was, vond de browser hem pas laat.
De hero kreeg priority en fetchpriority="high", het CMS-blok kreeg een uitzondering voor de eerste afbeelding, en de CSS-achtergrond werd een echte img met een preload. Samen scheelde dat 120 ms op de LCP.
LCP
Twee stylesheets, van 30 kB en 0,5 kB, waar het eerste scherm op wachtte.
Allebei herschreven naar 15 kB, wat nog eens 100 ms scheelde.
LCP
Een heleboel kleinere dingen, op zichzelf niet groot.
We liepen verder door de trace en fixten ze één voor één terwijl we praatten.
In CrUX

Dit is de grafiek waar je op hoopt. De LCP voor hun mobiele bezoekers ging van op z'n slechtst 5,6 seconden naar 2,0, en de server response van 4,2 naar 0,8 seconden. Beide lijnen doen er weken over om te zakken, omdat elk punt de trage dagen nog meetelt in het venster van 28 dagen. Sinds augustus blijft de LCP tussen de 1,9 en 2,2 seconden.

2,5 s4,0 sFebMrtAprMeiJunJulAugSepOkt3,8 s2,0 s5,6 sLCP op mobiel, p75
0,8 s1,8 sFebMrtAprMeiJunJulAugSepOkt2,0 s0,76 s4,2 sTTFB op mobiel, p75
gmbapi.com in CrUX, januari tot oktober 2026. Elk punt toont de 28 dagen tot die datum. Groen is goed, oranje heeft verbetering nodig, rood is slecht.
Follow-up

Na de call gaf ik ze toegang tot CoreDash, zodat ze hun mobiele bezoekers per pagina en per release zien, en liep ik hun takenlijst na. De cijfers bovenaan komen uit CrUX, Googles eigen field data.

Zitten de developers in de call en zijn de fixes klein, dan is een uur genoeg. Grotere dingen gaan in de notities, de belangrijkste eerst.

Wat we leerden

Hun gok was ongebruikte JavaScript

Een logische gok bij een nieuwe React-site. De trace zette de server response en een lazy loaded hero bovenaan.

Een nieuw framework maakt je niet vanzelf snel

Ze waren net overgestapt naar Next.js, en de defaults kwamen mee: next/image laadt elke afbeelding lazy tenzij je priority meegeeft, en hun hero was één van die afbeeldingen.

Arjen Karel

Een uur met je developers in de call: €350

Neem je developer en je traagste pagina mee. We kijken er samen naar en fixen wat we kunnen terwijl we praten.

gmbapi: LCP van 5 naar 1,9 seconden, gefixt in één call Core Web Vitals gmbapi: LCP van 5 naar 1,9 seconden, gefixt in één call