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.
Writing
65 write-ups from production, newest first. Each one is a problem hit on a real project and how it was diagnosed and fixed.
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.
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.
Most performance audits are a Lighthouse export with commentary. The format we use instead: field data first, per-metric attribution, prioritised fixes, checks.
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.
Prerendering hundreds of pages without a twenty-minute build or an out-of-memory failure: fetch once, tune workers, leave the long tail dynamic, measure it.
Why some hero images start loading a second late: CSS backgrounds, JavaScript-inserted images, lazy loading on the wrong element. See the delay and fix it.
Getting next/image right for LCP: the sizes attribute most sites get wrong, when to use priority, quality and format trade-offs, and the check that proves it.
A page with two hundred links prefetches two hundred routes. How next/link prefetching works, when it becomes a cost, and how to tune lists and mega-menus.
Time to first byte sets the floor for every metric. Its components from DNS to origin, how to measure each, and what managed hosts and edge platforms get wrong.
The front end is fast, the admin takes eight seconds a page. Where admin time goes: autoloaded options, transients, cron on page load, dashboard widgets, fixes.
How WordPress generates, serves and lazy-loads images, where the defaults hurt Core Web Vitals, and the configuration that gets the hero loading fast.
A site that was fast at launch is slow a year later and nobody changed the design. The five ways performance drifts and what continuous monitoring looks like.
The plain-words case for website speed: what two seconds means, what visitors do at three and four, how Google uses it, and how to check your site in a minute.
A method for tracking down layout shift: reproducing it, reading DevTools shift records, the usual suspects from fonts to widgets, and the fix for each.
Why a page stays blank while stylesheets and scripts load, what the render-blocking audit means, and the fixes in order of return, from fewer files to inlining.
Your laptop is lying about page speed. Why field data is dominated by mid-range phones, how to test on one or emulate it honestly, and what changes.
How Cache Components change caching for a marketing site: what use cache does, how cacheLife maps to page types, dynamic edges and prerender mistakes.
A repeatable ninety-minute audit for a WordPress theme someone else built: what to read first, what to grep for, and how to write up fix or replace.
The checkout is the page a cache cannot help. Where WooCommerce checkout time goes, the scripts and cart fragments that slow it, and the fixes that work.
How to compress every image on an existing website: finding the heavy ones, choosing formats and sizes, batch tools, and keeping new uploads small.
The four caching layers a WordPress site can have, what each speeds up, which you need for a brochure site versus a store, and the setups that make it slower.
Why PageSpeed says your site is fast while Search Console fails it on Core Web Vitals, which data Google uses, and how to audit against the numbers that count.
First Contentful Paint regressed after turning on reactCompiler in Next.js 16? Here is why the runtime cache pushes paint and the boundary fix that recovers it.
INP score tanked on mobile after adding the Cloudflare Turnstile widget? Here is why the embed script blocks interaction and the lazy-load fix that works.
Next.js 16 Link prefetch flooding your RSC endpoint on hover? Here is why the new heuristic fires too eagerly and the prefetch={false} fix that holds.
Open Graph image showing the old version after deploy on Vercel? Here is why Facebook, Slack, and LinkedIn keep the stale image and the cache-bust that works.
Intercom widget tanking INP on mobile after the May launcher update? Here is why the script blocks the main thread and the lazy-mount fix that holds up.
Vercel Image Optimization returning 402 quota exceeded in production? Here is what triggers the cap and the config fix that stops the bill from rising.
Next.js 16 Link prefetch is blowing through your Vercel Edge request budget? Here is why hover-prefetch fires twice and the config that brings it back to sane.
LCP doubled after enabling Cloudflare Polish on a Next.js site? Here is why double-encoding hurts and the bypass rule that brings LCP back under 2 seconds.
INP regression after enabling React Compiler on Next.js 16? Here is which memoised event callbacks blow the interaction budget and how to roll back safely.
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.
Trustpilot widget pushing CLS over 0.1 on product pages? Here is the reserved-space pattern and lazy load fix that stops the layout shift on mobile devices.
Migrated to CSS container queries and watched LCP jump 800ms in field data. Here is why the hero image stops being a priority paint and how to fix it.
INP field data spiking after wrapping filter handlers in useTransition? Here is why React 19.2 transitions can make INP worse and the pattern that fixes it.
Next.js 16 PPR shell flashing skeleton before dynamic content paints? Here is why the prerender slot leaks and the Suspense boundary fix that stops it.
GA4 page views jumped 20-40% after enabling Speculation Rules prerendering? Why prerendered pages double-count, and the prerenderingchange fix.
Your hero background image is the LCP but the browser only finds it after CSSOM parsing? Why fetchpriority does not help, and the preload that does.
Cloudflare Rocket Loader tanking INP on a Next.js site? Here is why it delays React hydration on mobile and the page rule that restores interactivity.
Next.js 16 throwing an unconfigured qualities error or blurry images after upgrade? Here is why images.qualities now defaults to 75 and the config fix.
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.
Next.js cacheComponents can break Mapbox, video players, and other imperative widgets on back navigation. Here is the fix path I trust in production today.
Vercel middleware doing geo redirects spiking TTFB to 800ms? Here is the runtime, header, and edge config fix that cuts it back under 100ms.
Sentry Session Replay 9 tanking INP on mobile after the upgrade? See what changed in the rrweb sampler and the config fix that pulls INP back under 200ms.
Next.js page failing back/forward cache and re-rendering on browser back? Most causes are unload listeners, open WebSockets, or Cache-Control no-store.
Debugging INP regressions in 2026? Wire the Long Animation Frames API to capture the exact slow handler in real users with a working PerformanceObserver.
Lighthouse INP score is green but CrUX field data is failing pages in Search Console? Close the lab-vs-real-user INP gap with focused attribution fixes.
Cumulative Layout Shift spiking from Suspense skeleton loaders in Next.js 16? Match the skeleton dimensions to real content with a working CSS pattern.
Next.js 16.2.4 ISR memory leak symptoms usually show up as rising external and arrayBuffers usage. Here is the diagnosis path I trust on self-hosted apps.
PageSpeed Insights LCP score different from CrUX field data? Fix the lab vs real-user gap with throttling, viewport, and resource priority hints.
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.
Vercel Speed Insights showing no data after Next.js 16 upgrade? Fix the missing beacon, CSP block, and the SpeedInsights component placement with code.
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.
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.
INP score worse on mobile than desktop after a React deploy? Hydration is blocking the main thread. Fix it with code splitting and Suspense streaming.
LCP regressed because the browser preloads the wrong image with next/image priority? Fix fetchpriority, srcset, and preload candidate selection with code.
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.
A practical technical SEO audit checklist for 2026 covering crawlability, indexation, rendering, internal links, structured data, and Core Web Vitals.
WooCommerce product filters slow on 5,000+ products? How to speed up layered navigation, attribute queries, counts and archive pages without guesswork.
WordPress admin taking 3 to 10 seconds per page load? Oversized autoloaded options are the most common cause. Here is how to find and fix them safely.
Next.js App Router render-blocking CSS can crush LCP when globals and library styles leak into initial chunks. Here is the fix I use on production builds.
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.
CLS regression spiking from next/font fallback after upgrading to Next.js 16? Here is the root cause and adjustFontFallback fix with working code.
A step-by-step guide to optimizing WordPress performance. Caching, image optimization, CDN setup, and database cleanup that delivered 60% faster load times.
Everything developers need to know about Core Web Vitals in 2026. LCP, INP, CLS explained with real-world fixes and measurement strategies.
Fixed price for a defined scope, on live sites, with a rollback path. Agencies and in-house teams welcome.
Hire me for Performance