You run PageSpeed Insights, get a comfortable desktop score, and move on. A week later you check Search Console or pull up the same URL on your phone and the story is different: a duller-feeling scroll, a slower first paint, a "poor" rating where desktop showed "good". Nothing in your codebase changed between the two runs. What changed is the device and the network carrying the exact same page.

This is the most common performance surprise WordPress site owners run into, and it is not a bug or a fluke measurement. Desktop testing happens on strong hardware over a fast, low-latency connection. Mobile field data is collected from whatever phone your visitor actually owns, over whatever signal they actually have, which for most real visitors is a mid-tier Android device on cellular data, not a flagship phone on office wifi. The page is identical. The conditions carrying it are not.

This guide walks through why that gap exists, whether Google's scoring is actually stricter on mobile, and the specific WordPress fixes that close the difference, in the order they tend to matter.

Why does the same page feel slower on a phone than a laptop?

Three things change between a desktop test and a real mobile visit, and all three work against you at once.

  1. 1.The CPU is weaker. Lighthouse's mobile test profile applies CPU throttling, historically around a 4x slowdown, to approximate a mid-tier phone rather than the machine running the test. A real median Android device sold today is well behind a desktop or laptop CPU in single-thread performance, so anything that depends on JavaScript parsing, compiling, and execution (menus, sliders, tracking scripts, page builder runtime) takes proportionally longer before the page is actually interactive.
  2. 2.The network is slower and higher-latency. Broadband round-trip time is typically 20 to 40 milliseconds. A cellular connection is commonly 100 to 200 milliseconds or more, and that is before accounting for weaker signal areas or 3G fallback. Every render-blocking request pays that round trip. A page with six blocking requests loses roughly six round trips before it can paint, and on mobile each of those round trips costs several times more than it does on wifi.
  3. 3.The viewport is smaller, but the assets often are not. A phone screen needs a fraction of the pixels a desktop monitor does, but unless your theme or media library is actually serving a smaller image, the browser downloads and decodes the full desktop-sized file anyway, then scales it down with CSS. That is bandwidth and decode time spent on pixels nobody sees.

None of these are things your visitor chose. They are the default conditions of browsing on a phone, and a WordPress theme built and tested on a developer's laptop will not automatically account for them.

Does Google actually use a stricter bar for mobile?

Not in the way most people assume. The Core Web Vitals pass and fail numbers are identical on both device types: Largest Contentful Paint (LCP) needs to land at 2.5 seconds or under, Interaction to Next Paint (INP) at 200 milliseconds or under, and Cumulative Layout Shift (CLS) at 0.1 or under to be rated "good." Google does not move the goalposts for phones.

What Google does do is score mobile and desktop separately, using the Chrome UX Report (CrUX), which is built from real visits by real Chrome users rather than a lab simulation. Since mobile visits are measured under mobile conditions, the same numeric bar becomes harder to clear. A page that scores comfortably "good" on desktop field data can land in "needs improvement" on mobile field data with the exact same underlying page, because the visitors carrying the mobile data were on weaker devices and slower connections when Chrome recorded the timing.

This matters for search visibility because Google's page experience signals use mobile data as the default view in Search Console, and mobile traffic is the majority of visits for most WordPress sites. A mobile-only Core Web Vitals failure is not a measurement quirk you can dismiss; it is very likely what most of your actual visitors experience.

Metric

"Good" threshold

Same on mobile and desktop?

Largest Contentful Paint (LCP)

2.5s or under

Yes, bar is identical

Interaction to Next Paint (INP)

200ms or under

Yes, bar is identical

Cumulative Layout Shift (CLS)

0.1 or under

Yes, bar is identical

The bar does not change. The conditions your page is measured under do, and that is the entire gap.

Why render-blocking resources cost more on mobile

A render-blocking resource, typically CSS in the head or a synchronous script, forces the browser to fetch, and often parse, that file before it can paint anything. On a fast wired connection with low latency, one extra blocking request might cost 30 to 60 milliseconds. On a mobile connection with a 150 millisecond round trip, that same request costs several times more, and WordPress pages rarely have just one. A typical theme plus two or three plugins plus a page builder easily enqueues eight to fifteen CSS and JS files, some of them render-blocking by default.

The CPU throttling compounds this. Once the blocking files arrive, a weaker mobile CPU takes longer to parse and execute them, which pushes back both the first paint and the point where the page actually responds to a tap. This is the mechanism behind most mobile-only INP failures: it is rarely one enormous script, it is the accumulated parse and execution cost of everything running before or during first interaction, on a CPU with a fraction of the desktop test machine's throughput.

The fix is not "remove all JavaScript." It is separating what genuinely needs to run before first paint (critical CSS, essential layout scripts) from what can wait (chat widgets, sliders, most tracking and marketing pixels, below-the-fold interactivity) and deferring the second group so it loads after the page is already usable.

Image sizing: the easiest points you are giving away

WordPress has generated responsive image markup automatically since version 4.4, adding a srcset and sizes attribute to images inserted through the media library, so the browser can pick a smaller file for a smaller screen. In practice this breaks in three common ways on real sites.

Background images set through CSS get no srcset at all. Hero sections and page builder background images are frequently applied via background-image in CSS, which has no equivalent to responsive srcset. The same full-resolution file downloads on every device unless the theme specifically swaps it with a media query.

A wrong or missing sizes attribute defeats the point of srcset. If sizes tells the browser an image will render at 1200px wide when it actually renders at 400px on mobile, the browser downloads the larger file anyway to be safe. Page builders that inject custom markup around an image frequently drop or miscalculate this attribute.

Uploads are oversized to begin with. An image uploaded straight from a modern phone camera or stock photo library can be 3000px or wider and several megabytes, several times larger than any layout on the site will ever display, even accounting for retina screens. Every generated size in the srcset inherits that bloat.

You can check the actual served size against the display size in a couple of minutes: open the page on your phone (or Chrome DevTools' device toolbar), open the Network tab, and compare each image's downloaded file size and pixel dimensions to how large it actually appears on screen. Anything downloading at two or more times its display resolution is wasted bandwidth and wasted decode time on the weakest device viewing it.

WordPress-specific fixes that close the gap

In the order they typically pay off first.

1\. Conditional asset loading with wp\_is\_mobile()

WordPress ships a built-in wp_is_mobile() function you can use to dequeue scripts and styles that only matter on wider screens, such as a desktop-only hover megamenu, a hero video background, or a slider your CSS already hides below a breakpoint. If it is hidden by CSS, it is still downloaded and, if it is a script, still parsed and executed. Dequeuing it outright on mobile removes that cost entirely instead of just hiding the result.

add\_action( 'wp\_enqueue\_scripts', function() {
if ( wp\_is\_mobile() ) {
wp\_dequeue\_script( 'hero-carousel' );
wp\_dequeue\_style( 'hero-carousel-css' );
}
}, 20 );

Note that wp_is_mobile() checks the user agent, not the viewport, so it is a proxy for device type rather than screen width. Pair it with a page cache configuration that keeps a separate cached copy per device type (see below), so you are not caching one version and serving it to both.

2\. Fix responsive images properly, then compress and convert

Confirm your theme's sizes attribute is accurate for the layout, swap CSS background images for an <img> tag where practical so it can carry a srcset, and only then worry about format and compression. Re-encoding an oversized image to WebP still leaves you with an oversized WebP.

3\. Mobile-aware page caching

If you dequeue assets conditionally on mobile, your cache needs to know the difference. Most WordPress caching plugins support caching mobile and desktop as separate variants of the same URL; confirm that setting is on rather than assuming it. Without it, whichever device generates the cached copy first determines what every visitor gets until the cache expires, which can mean desktop visitors receiving a stripped-down mobile page, or mobile visitors receiving the full desktop weight.

4\. Defer non-critical scripts everywhere, not just on mobile

Deferring render-blocking scripts helps every visitor, but the effect is proportionally larger on a slow CPU and a high-latency connection, which is exactly the mobile case. Third-party scripts (analytics, chat widgets, ad tags) are the usual offenders and are rarely needed before first paint.

5\. Lazy-load what is genuinely below the fold

WordPress lazy-loads images by default, but a common mistake is leaving loading="lazy" on the LCP image itself, which delays the exact element Google is timing. Confirm your hero or featured image is set to load eagerly while everything genuinely below the fold lazy-loads.

How BoltAudit checks this for you

Comparing your site's real mobile weight against what actually renders on screen, across every page template, is tedious to do by hand.

[BoltAudit](/) runs a free, read-only Local Audit directly on your own server that checks image sizing against display dimensions, flags render-blocking scripts, and inspects your caching configuration, nothing leaves your site during that scan. If you want fixes ranked by how many visitors each one is estimated to recover, with confidence scores and the evidence behind them, the paid AI Deep Audit does that from Tools, then BoltAudit in your WordPress admin.

Check your own mobile gap

Pull up your homepage on PageSpeed Insights and compare the mobile and desktop tabs side by side. If the gap is wide, it is almost always image sizing and unnecessary scripts running before first paint, both of which are fixable without a redesign or a separate mobile build.

Key takeaways

  • Google's Core Web Vitals thresholds are identical on mobile and desktop; the field conditions they are measured under are not.
  • A weaker CPU and higher-latency network multiply the cost of every render-blocking request and every byte of JavaScript.
  • Conditional loading, correct responsive images, and mobile-aware caching close most of the gap without a separate mobile build.

Frequently asked

Does Google actually use a stricter Core Web Vitals bar for mobile?

No, the pass and fail numbers are identical: 2.5 seconds for LCP, 200 milliseconds for INP, and 0.1 for CLS on both device types. What differs is the field data. Google scores mobile and desktop separately using real visitor conditions, and mobile conditions are harsher, so a page can comfortably clear the bar on desktop and fail the same bar on mobile.

Will dequeuing scripts on mobile really move Core Web Vitals?

Usually yes, and it tends to help INP the most. Weak mobile CPUs spend proportionally more time parsing and executing JavaScript than a desktop CPU does, so removing a slider, a heavy comment widget, or an unused chat script from the mobile experience often produces a bigger relative improvement on mobile than the same removal does on desktop.

Do I need a separate mobile theme or an AMP version to fix this?

No. Almost every WordPress mobile performance gap is closed with correctly sized responsive images, conditional loading of non-essential assets, and page caching that serves the right variant per device. A full separate mobile build is rarely necessary and adds its own maintenance cost.

How do I check my real mobile performance instead of guessing?

PageSpeed Insights and the Chrome UX Report show field data split by device, which is the actual experience of your visitors rather than a lab simulation. A BoltAudit Local Audit checks your WordPress installation itself, read-only, and flags the specific plugins, images, and scripts adding weight to the mobile page.

Not sure how wide your own mobile gap is? [The free Local Audit](/features) checks image sizing and render-blocking scripts in about a minute.

Mobile Core Web Vitals Performance

BA

BoltAudit team

Builders and operators who name the exact bottleneck slowing a WordPress site and rank every fix by visitors recovered.

[Talk to us](/contact)

Run BoltAudit on your site

Free plugin · 1 site · 3 audits per month · no credit card.

See plans →