Writing

Core Web Vitals: what we have had to fix

52 write-ups from production, newest first. Each one is a problem hit on a real project and how it was diagnosed and fixed.

52 articles
Session Replay and Analytics SDKs: The INP Tax
6 min read

Session Replay and Analytics SDKs: The INP Tax

Sentry Replay, Hotjar, FullStory and heavy analytics SDKs record every interaction, which costs every interaction. How to measure their share and defer them.

Core Web VitalsThird Parties
Real-User Monitoring That Survives Ad Blockers
5 min read

Real-User Monitoring That Survives Ad Blockers

Field Core Web Vitals data you own: the web-vitals library, a first-party endpoint blockers do not block, what to store, and p75 by page group.

Core Web VitalsMonitoring
Core Web Vitals: WordPress vs Next.js, What Differs
6 min read

Core Web Vitals: WordPress vs Next.js, What Differs

Same metrics, different failure modes. Where WordPress and Next.js sites typically fail LCP, INP and CLS, why, and what the platform does and does not decide.

Core Web VitalsWordPress
INP: Finding the Slow Interaction in Field Data
5 min read

INP: Finding the Slow Interaction in Field Data

INP fails in Search Console and the lab shows nothing. How to instrument real users to find which element, event and script is slow, and report it usefully.

Core Web VitalsINP
Cookie Consent Banners Without CLS or INP Cost
6 min read

Cookie Consent Banners Without CLS or INP Cost

The consent banner is often the worst thing on a page for Core Web Vitals: it shifts layout, blocks the thread and fires every tag on Accept. Making one fast.

Core Web VitalsPrivacy
Bfcache: The Free Speed You Lose With One Header
5 min read

Bfcache: The Free Speed You Lose With One Header

The back/forward cache makes back navigation instant and lifts field metrics for free, unless something blocks it. Blockers from no-store to unload handlers.

Core Web VitalsCaching
React Compiler INP Regression in Production: Fix
5 min read

React Compiler INP Regression in Production: Fix

React Compiler enabled on Next.js 16 and field INP regressed past 200ms? Here is why auto-memoisation pushes work post-commit and the scoped fix that lands.

PerformanceCore Web Vitals
next/script afterInteractive Blocking INP on Mobile
6 min read

next/script afterInteractive Blocking INP on Mobile

next/script strategy='afterInteractive' still pushing INP past 500ms on mobile? Here is the lazyOnload, worker, and onLoad fix that drops it back under 200ms.

PerformanceCore Web Vitals
CLS From Skeleton Loaders in Suspense Fallback Fix
5 min read

CLS From Skeleton Loaders in Suspense Fallback Fix

Cumulative Layout Shift spiking from Suspense skeleton loaders in Next.js 16? Match the skeleton dimensions to real content with a working CSS pattern.

PerformanceCore Web Vitals
PageSpeed LCP Different From Field Data Fix Guide
5 min read

PageSpeed LCP Different From Field Data Fix Guide

PageSpeed Insights LCP score different from CrUX field data? Fix the lab vs real-user gap with throttling, viewport, and resource priority hints.

Core Web VitalsPerformance
next/image priority Not Preloading Hero: LCP Fix
5 min read

next/image priority Not Preloading Hero: LCP Fix

next/image with priority not generating a preload link and tanking your hero LCP score? Fix the missing preload hint and PPR boundary issue with code.

PerformanceCore Web Vitals
Vercel Speed Insights No Data After Next.js 16: Fix
5 min read

Vercel Speed Insights No Data After Next.js 16: Fix

Vercel Speed Insights showing no data after Next.js 16 upgrade? Fix the missing beacon, CSP block, and the SpeedInsights component placement with code.

PerformanceCore Web Vitals
Cookie Consent Banner CLS Fix: Stop the Layout Shift
6 min read

Cookie Consent Banner CLS Fix: Stop the Layout Shift

Cookie consent banner tanking your CLS score and Core Web Vitals on first paint? Fix the late-injected banner, reserved space, and animation timing in code.

PerformanceCore Web Vitals
Next.js 16 Image priority Deprecated: Real LCP Fix
6 min read

Next.js 16 Image priority Deprecated: Real LCP Fix

Next.js 16 deprecated the priority prop on next/image. Migrate to preload, fix the LCP regression, and stop accidentally preloading every product hero image.

PerformanceCore Web Vitals
LCP Preload Hint Picking the Wrong Image: Real Fix
5 min read

LCP Preload Hint Picking the Wrong Image: Real Fix

LCP regressed because the browser preloads the wrong image with next/image priority? Fix fetchpriority, srcset, and preload candidate selection with code.

PerformanceCore Web Vitals
next/font CLS Layout Shift in Next.js 16: Real Fix
5 min read

next/font CLS Layout Shift in Next.js 16: Real Fix

next/font causing CLS layout shift in Next.js 16 after the upgrade? Fix font fallback metrics, size-adjust, and display swap settings with working code.

PerformanceCore Web Vitals
INP Regression from GTM Third-Party Tags in 2026
6 min read

INP Regression from GTM Third-Party Tags in 2026

INP score regressing above 200ms after adding Google Tag Manager tags? Here is how to diagnose the blocking tag and fix it with working code.

PerformanceCore Web Vitals
WordPress Performance: How I Cut Load Times by 60%
3 min read

WordPress Performance: How I Cut Load Times by 60%

A step-by-step guide to optimizing WordPress performance. Caching, image optimization, CDN setup, and database cleanup that delivered 60% faster load times.

WordPressPerformance
Need this done, not read about?

We take Core Web Vitals work on subcontract and direct.

Fixed price for a defined scope, on live sites, with a rollback path. Agencies and in-house teams welcome.

Hire me for Core Web Vitals