Skip to content

WordPress Failing Core Web Vitals Mobile: Causes and Fixes

WordPress failing core web vitals mobile usually comes down to three causes. Google Tag Manager loads scripts before the page paints, the hero image loads late or at the wrong size, and theme JavaScript runs before the first render. Phones on cellular networks expose all three, and a desktop test hides them.

What counts as passing Core Web Vitals on mobile

Google rates a page as good on a metric when the 75th percentile of real visits meets that threshold. Mobile and desktop are scored separately, so the same pages can pass on one and fail on the other. Check the mobile report on its own.

In the HTTP Archive's 2025 Web Almanac(opens in a new tab) (July 2025 data), 48 percent of origins had good Core Web Vitals on mobile against 56 percent on desktop.

LCP was the metric most often failed on mobile: 62 percent of origins had a good LCP, against 77 percent for INP and 81 percent for CLS.

  • Largest Contentful Paint (LCP): 2.5 seconds or less.
  • Interaction to Next Paint (INP): 200 milliseconds or less.
  • Cumulative Layout Shift (CLS): 0.1 or less.

Which cause affects which Core Web Vitals metric

The metric in your report points to the cause. Heavy or late images usually hurt Largest Contentful Paint (LCP). Plugin and page-builder JavaScript usually hurts Interaction to Next Paint (INP). Images, embeds, and web fonts without reserved space cause layout shift (CLS). Slow hosting raises the time to first byte, which delays every metric.

Plugins are the usual source of the extra JavaScript. Audit the installed list before you change theme code. A plugin you no longer use still loads its scripts until you remove it.

Close-up of a hand holding a smartphone with a loading screen on it
Which metric points to which cause
MetricUsually caused by
LCPLarge or late hero image, with no preload
INPPlugin and page-builder JavaScript on the main thread
CLSImages, embeds, and fonts without reserved space
TTFBSlow hosting, which delays every metric

GTM slowing down website loading, and what it does to LCP

Google Tag Manager slows the Largest Contentful Paint (LCP) when its tags run before the page paints. The container itself is small. The problem is what it launches: every tag fires from a trigger, and many inject synchronous scripts. On a mid-range phone, the main thread spends its first seconds running those scripts instead of painting your page.

The fix is re-sequencing, not removing the container. Paint the page first, load the container after, and let each tag fire on the event it needs. Your analytics still collects the data. It just stops blocking the first render. To find which tags to defer, use the third-party script audit.

WordPress LCP fix: the hero image

The hero image is usually the LCP element on a WordPress page. WordPress 6.3 and later(opens in a new tab) add high fetch priority to the image they judge most likely to be the LCP image, and never lazy-load that same image. Google's guidance on optimizing LCP(opens in a new tab) says never to lazy-load the LCP image.

So the failures now come from other places. Core keeps loading attributes a theme or page builder already set. It picks by a heuristic, the first large image in the page, so that image may not be your hero. An image under the size threshold, 50,000 pixels of width times height by default, is not eligible for high priority. Others serve the hero unsized, or send a desktop-size file to phones.

  • Find the LCP element in DevTools, then read its loading and fetchpriority attributes in the page source.
  • Remove any lazy-loading setting a theme or builder added to the hero.
  • Set responsive sizes that match the rendered width, so phones do not download the desktop file.
  • Give high fetch priority to one or two images at most, because setting it on more stops it helping.

Theme JavaScript and interaction delay

Interaction to Next Paint (INP)(opens in a new tab) replaced First Input Delay as a Core Web Vitals metric in March 2024. It measures how quickly the page responds to input across a visit, so heavy builder-generated markup and theme scripts show up there too.

Deferring scripts helps, but a theme that loads everything up front limits what deferral can recover. Measure the INP on the pages your visitors use before deciding whether the theme needs a rewrite. If you want that measured for you, the Core Web Vitals optimization service starts with a field-data diagnostic.

Google's guide to optimizing INP(opens in a new tab) starts from field data, then splits a slow interaction into input delay, processing time and presentation delay. Each part has a different fix.

  • Input delay: long tasks, often scripts still running from page load, hold the interaction back.
  • Processing time: the click handler does too much work before the browser can paint.
  • Presentation delay: a large DOM makes the next paint slow.

How to find which cause applies to your site

Start with the Core Web Vitals report in Search Console(opens in a new tab). It names the failing metric and the group of pages it affects. Then run the same pages through PageSpeed Insights(opens in a new tab) and read the field data section, which uses the same real-visitor data.

Test each template, not only the homepage. Search Console groups URLs with a similar experience, so a failing group usually points to one template, such as posts or product pages, even when the homepage passes.

For the cause, open Chrome DevTools, record a mobile page load in the Performance panel, and find the LCP marker. The element it points to is the one to fix. If that element is a script or a tag, the cause is the tag manager or the theme. If it is the hero image, the cause is image loading.

Fix one cause, then wait for the 28-day field window to fill before you judge the result. A lab score can improve on the same day that the field data stays red. For why the two numbers disagree, read PageSpeed score 90 but Search Console flags.

A person reviewing an analytics dashboard on a laptop
Diagnosis in five steps
  1. Find the failing metric in Search Console

  2. Confirm it with PageSpeed field data on the same pages

  3. Find the element behind it in the DevTools LCP marker

  4. Fix one cause and change nothing else

  5. Judge the result on the 28-day field data

Layout shift from fonts, embeds, and images

Layout shift happens when content moves after it first appears. The usual causes are images and embeds without width and height attributes, and web fonts that swap in and change the line lengths of text. Set explicit dimensions on images and embeds so the browser reserves their space before they load.

Font swapping is a smaller but common cause. Check whether the theme loads fonts from several places, and whether a late font change moves the page. Reserve the space first, then look at the fonts.

  • Set width and height on every image and embed.
  • Reserve space for embeds that load late.
  • Load each font once, from one source, and check how the swap moves the text.

Slow hosting is a separate problem

Time to First Byte (TTFB) measures how long the server takes to start responding. Google's guidance on TTFB(opens in a new tab) calls 0.8 seconds or less a rough target at the 75th percentile, and more than 1.8 seconds poor. It is not a Core Web Vital, but it comes before every loading metric.

If the response is slow, image and script fixes can only recover so much, because the page cannot start until the server answers. A cached page can hide the problem: the homepage may come from cache while a post or product page waits on the database.

  • Measure TTFB on a page that is not cached.
  • Compare it across templates, not only the homepage.
  • Fix a slow response before you tune images and scripts.

Caching plugins do not fix this

A caching plugin speeds up the server response. These problems happen in the browser after that response arrives, so a plugin on its own rarely fixes them. Each extra speed plugin can also add scripts of its own. Test the page with the plugin switched off before you credit it with a fix.

Questions site owners ask about WordPress Core Web Vitals

What is a good Core Web Vitals score on mobile?

A page is good when LCP is 2.5 seconds or less, INP is 200 milliseconds or less, and CLS is 0.1 or less, measured at the 75th percentile of mobile visits.

Which Core Web Vital is hardest to pass on mobile?

Largest Contentful Paint. In the 2025 Web Almanac, 62 percent of origins had a good mobile LCP, against 77 percent for INP and 81 percent for CLS, so the hero image and the server response are the first things to check.

Does WordPress lazy-load my hero image?

WordPress 6.3 and later add high fetch priority to the image they judge most likely to be the LCP image and do not lazy-load it. A theme or page builder that sets its own loading attributes can still override that, so check the attributes on your LCP element.

Why does my homepage pass but other pages fail?

Core Web Vitals are reported by group of similar pages. A homepage and a post template load different content, scripts and images, so one can pass while the other fails. Test the template of each failing group.

Why does my site pass on desktop and fail on mobile?

Mobile devices are slower, and mobile networks add delay. The same scripts that a desktop absorbs cost a phone far more time, so a desktop test hides the problem.

Do I need to remove Google Tag Manager to fix this?

Usually not. Re-sequence the container so the page paints first, then audit what the container loads. Most of the cost sits in the tags, not the container.

Does a caching plugin fix Core Web Vitals?

Rarely on its own. Caching speeds up the server response. The slow work happens in the browser after that response arrives.

How long until Search Console shows my fix?

About a month. The report covers the last 28 days of field data, so a fix reaches it gradually as new visits replace old ones.

WordPress failing core web vitals mobile: find out why your site fails.

A senior engineer reviews your live site and returns a written, prioritized fix list, so you know which changes to make first and why.