
WordPress Caching Layers: Page, Object, Opcode and CDN
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.
Writing
81 write-ups from production, newest first. Each one is a problem hit on a real project and how it was diagnosed and fixed.

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.

Emergency dental searches happen on phones, on poor signal, at bad hours. What actually makes the page slow, and the fixes in the order that pay.

Where to put Dentally's online booking on a hygiene clinic website, how to link to it per appointment type, what to configure first, and how to keep pages fast.

How to put TutorBird booking and registration on a children's tutoring website without third-party scripts loading everywhere and wrecking Core Web Vitals.

Where to put Acuity Scheduling on a babysitting website, how to deep-link it per sitter, what to configure first, and how to keep the pages fast.

How to put MoeGo online booking on a mobile grooming website without wrecking the load time: one booking page, deep links, nothing loading until Book is tapped.

How to put Acuity trial booking on a tutoring, music or language school website so parents book in one tap and the pages people read stay fast.

Where to put the OpenTable widget, how to deep-link it, and how to keep a restaurant website fast while reservations still complete in a few taps.

Why a photographer, videographer or florist website is slow, what a couple on a phone actually sees, and how a portfolio of any size loads in under two seconds.

A direct answer for photographers, videographers and florists: automatic compression and sizing, lazy loading, fewer galleries, and video that never autoplays.

Salon websites are galleries, and galleries are why they fail Google's speed thresholds. How to build one that shows two hundred pieces of work and still.

Across twenty Core Web Vitals engagements, ten fixes accounted for most of the improvement. What they were, how often each applied, and the order to try them.

Running the React Compiler on real Next.js sites: what it memoises, the measured effect, the patterns it refused to compile, the one bug it exposed.

What Rocket Loader, Polish, Mirage, Auto Minify and Early Hints each do, when they help a legacy site, and when they break or slow a modern one.

A performance budget turns 'keep it fast' into numbers a team can hold to: what to budget, sensible limits, how to measure on every change.

Why attribute and price filters crawl on stores with thousands of products: the queries behind them, the lookup tables that help.

Why page-builder sites get slow, how to tell if the builder is the cause on yours, the settings that claw back speed, and when to leave the builder behind.

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.

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.

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.

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.

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.

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.

Most performance audits are a Lighthouse export with commentary. The format we use instead: field data first, per-metric attribution, prioritised fixes, checks.

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.

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.

How WordPress generates, serves and lazy-loads images, where the defaults hurt Core Web Vitals, and the configuration that gets the hero loading fast.

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.

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.

How Cache Components change caching for a marketing site: what use cache does, how cacheLife maps to page types, dynamic edges and prerender mistakes.

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.

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.

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.

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.

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.

How to compress every image on an existing website: finding the heavy ones, choosing formats and sizes, batch tools, and keeping new uploads small.

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.

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.

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.

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.js cacheComponents can break Mapbox, video players, and other imperative widgets on back navigation. Here is the fix path I trust in production today.

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.

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.

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.

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.

WooCommerce product filters slow on 5,000+ products? How to speed up layered navigation, attribute queries, counts and archive pages without guesswork.

A practical technical SEO audit checklist for 2026 covering crawlability, indexation, rendering, internal links, structured data, and Core Web Vitals.

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