Why your WordPress site is slow on mobile, and why another caching plugin won’t help

The desktop score is green, the phone still shows a blank screen for four seconds. Here is where the time actually goes on a slow WordPress site, in the order I fix it.

  • 12 May 2026
  • 6 min read
A laptop and a smartphone side by side on a white desk

Short version: your WordPress site is slow on phones because the phone is asked to download and run far more than it needs before it can show the first screen. A laptop hides that. A mid-range Android on a 4G connection does not. The usual suspects, in the order they cost time, are one oversized hero image, the theme or builder’s CSS, scripts that load in the head, third-party tags, and only then the server. Caching touches the last one. That is why the caching plugin you installed last month changed the desktop score and nothing else.

Key takeaways
  • Measure on a phone, with field data. A desktop Lighthouse score is a different test on a different device.
  • The server is usually the smallest slice. On most sites I audit it is under 15% of the wait.
  • Fix in the order the browser waits: the LCP image, then CSS, then scripts, then tags, then the server.
  • Judge the result on 28 days of real visitors in Search Console, not on one lab run.

First, measure where Google measures

PageSpeed Insights shows two sets of numbers and people usually read the wrong one. The lab score at the bottom is one simulated load. The field data at the top comes from real Chrome users over the last 28 days, split by phone and desktop. That is the number Google ranks on, and it is the number your visitors feel. If the field data says LCP 4.1 s on mobile, the site is slow on mobile, whatever the lab score says.

DefinitionCore Web VitalsLCP Largest Contentful Paint

The time until the largest image or text block in the first screen has rendered. Google calls under 2.5 s good and over 4 s poor, measured at the 75th percentile of real visits. On a marketing site the LCP element is almost always the hero image or the headline.

Open the Core Web Vitals report in Search Console too. It groups URLs, so you see whether the problem is the homepage, every blog post, or every page that uses one template. That tells you where to look before you open a single file.

Where the seconds go

Here is a breakdown from a builder site I audited this year, measured on the homepage on a mid-range Android over 4G. Mobile LCP was 4.1 seconds. Your numbers will differ, the shape rarely does.

  • Hero image 1.4 s
  • Theme and builder CSS 0.9 s
  • JavaScript 0.7 s
  • Third-party tags 0.6 s
  • Server and caching 0.5 s

Lab test, mid-range Android, 4G. Site under NDA.

The server and its cache were the smallest slice, and they were the only slice a caching plugin can touch. The biggest was one image: 1.9 MB, uploaded straight from the designer’s export, shown at 390 pixels wide, and lazy-loaded, which told the browser to fetch it last. Three settings on one file were worth more than every plugin on the site.

1.9 MBThe hero image, the single biggest file on the page

0.5 sAll a page cache could ever save on this site

4.1 sMobile LCP before the fix

Why the caching plugin didn’t help

A page cache saves a ready-made copy of each page so the server doesn’t rebuild it from PHP and the database on every visit. That shortens the time to the first byte of HTML. Useful, but on most sites it was never the bottleneck. If the first byte arrives in 0.5 seconds and the page then needs four more seconds to show the hero, a perfect cache removes part of that half second and leaves the four alone.

A cache makes the server fast. It doesn’t make the page light.
Where caching does matter

Uncached pages: carts, search results, logged-in views, and any site whose TTFB is over 1.5 seconds. There the server is the problem and a page cache or a better host is the first fix, not the last.

Optimisation plugins that combine, minify and defer files are a different story. They help a little and break things often, because they can’t know which script the slider needs and which one nothing needs. The gains come from removing work, not from reshuffling it.

Watch out

Two caching plugins on one site is not twice as fast. It is stale pages after edits, broken logged-in features and a support ticket. Keep one, configured for your host.

The fix order that works

I fix in the order the browser waits, biggest slice first, because each step changes what the next one is worth. Doing scripts before the image is a day of work that moves the number by a tenth of a second.

  1. The LCP imageRight size for the screen, AVIF or WebP, preloaded, and never lazy-loaded above the fold. This alone took the site above from 4.1 to 2.6 seconds.
  2. CSSUnused theme and builder CSS removed per template. The part needed for the first screen inlined, the rest loaded after.
  3. ScriptsDeferred, or removed when a widget isn’t worth its weight. A slider library for a hero that has one slide is a common one.
  4. Third-party tagsChat, heatmaps and ad pixels delayed until the first interaction, or loaded only after consent, which they should be anyway.
  5. Server and cacheOne page cache configured properly, a CDN in front of static files, and a host that answers in under 0.8 s. Last, because by now it is the biggest slice left.
<!-- Preload the LCP image. Never lazy-load it. -->
<link rel="preload" as="image"
      href="/hero-1200.avif"
      imagesrcset="/hero-800.avif 800w, /hero-1200.avif 1200w"
      fetchpriority="high">

On that site, the order took mobile LCP from 4.1 to 1.9 seconds without changing a pixel of the design. The caching plugin stayed. Two of the three others were removed.

Case · Robotics startup · under NDAThe same order on a site full of 3D renders and videoRenders, videos and scroll animations kept. Mobile LCP from 22 seconds to 3.3 by fixing how the page loads, not how it looks.22 s → 3.3 sUntil main content shows, mobile

Before you install anything else

Run through this list. On most sites I see, two or three of these fail, and they explain the score better than anything a plugin page promises.

Quick check before you add a plugin
  • The hero image is under 200 KB and is not lazy-loaded
  • Only one caching plugin is active
  • No script loads in the head without defer or async
  • Chat and heatmap tags wait for the first interaction
  • Search Console shows LCP for mobile, not only desktop
  • The server answers in under 0.8 s on a cached page

How to know it worked

PageSpeed Insights runs one lab test from one location. Fine for debugging, not for judging. I measure twice: a lab test on handover day to confirm the fix landed, and the field data four weeks later, because that is how long Google needs to collect a new 28-day window. If the Search Console report moves from “poor” to “good” for the mobile group, the work is done. If it doesn’t, something else is loading that the lab didn’t see, usually a tag someone added in the meantime.

Related serviceSeeing a four-second LCP on your own site?WordPress speed optimisation at a fixed price from $490, with a mobile LCP target agreed before the work starts and checked in field data after.See the service

If you want the numbers for your own site before deciding anything, the free scan on the home page measures them on a real phone profile in a few minutes.

Slow on phonesMain content on screen in under 2.5 seconds, measured on a real phoneWordPress speedRun the free scan
Share@
Common questions

Questions from this article.

Something else?Write a line about your site. You’ll get a reply from me within one business day.

Sometimes, and it is easy to check. Look at the server response time (TTFB) in PageSpeed Insights. Under 0.8 s with a page cache in front: the host is fine and the time is in the page itself. Over 1.5 s on every page: fix caching or hosting first, because nothing else will show until the HTML arrives.

A little, directly. Core Web Vitals are a ranking signal, but a weak one. The bigger effect is on people: on the sites I measure, fewer visitors leave before the page appears, and that shows up in leads before it shows up in rankings.

One. Which one depends on the host: Kinsta, WP Engine and SiteGround already cache pages at the edge, and a second cache on top mostly gets in the way. On ordinary shared hosting, a page cache plus a CDN is the floor.

Yes, and most of the slow sites I see run on a builder. The same fix order applies, but the ceiling is lower: builder CSS and scripts are loaded on every page whether the page uses them or not. When the builder is the ceiling, I say so and quote a migration instead.