Mobile page speed: the version of your site that Google reads
Mobile is what Google reads. You need to pass on a phone, not a laptop. This guide shows how to read the mobile tests, fix the slow parts and verify on a real device.
By Théophile Louvart, founder of Porteur · Updated 14 September 2026 · Markdown
Why the mobile figures come first
Google uses mobile-first indexing. As of 2023 the smartphone crawler is the one that reads your pages. The mobile experience is the one that ranks.
Search Console and PageSpeed Insights show field data from real Chrome users. The mobile slice is the one that matters first for search. Desktop comes after.
Your laptop hides problems a mid-range phone shows. The CPU is slower. The network is spiky. Scripts take longer. Images made for desktop choke the radio.
Field data vs lab data: what your mobile test shows
PageSpeed Insights has two parts. The top is field data from the Chrome User Experience Report over 28 days. The bottom is a lab run from Lighthouse.
| Field data (CrUX) | Lab data (Lighthouse) | |
|---|---|---|
| Source | Real Chrome users on Android and desktop | One simulated run from a Google server |
| When | Last 28 days, 75th percentile | Right now |
| Device | Split by device class, mobile first | Simulated mid-range phone |
| Network | Whatever users had | Throttled 4G by default |
| Metrics | Core Web Vitals and more | Lighthouse audits and score 0 to 100 |
| Use it to | Judge search pass or fail | Debug and reproduce issues |
A small URL may show origin-level data or none. That is normal when traffic is low. Test a busier template too, like "/blog" or "/pricing".
How Lighthouse simulates mobile, and why scores jump
Lighthouse emulates a mid-range phone on throttled 4G. It limits CPU and network to expose mobile bottlenecks. One run is noisy, so expect variance.
Its performance score, version 10 and later, weighs Total Blocking Time 30 percent, LCP 25, CLS 25, First Contentful Paint 10 and Speed Index 10. Scores vary between runs and are not a ranking factor.
A page that feels instant on a laptop can fail on a phone. Reasons: heavy JavaScript, too many third parties, an oversized hero image, web fonts that block text, or server time on first byte. Fix those for mobile, the score follows.
Read your mobile Core Web Vitals
The three Core Web Vitals as of 2026 decide your pass or fail. Aim to meet them at the 75th percentile of field data on mobile.
- Largest Contentful Paint: good up to 2.5 s, poor above 4 s. Usually your hero image or a headline.
- Cumulative Layout Shift: good up to 0.1, poor above 0.25. Measures visible jumps.
- Interaction to Next Paint: good up to 200 ms, poor above 500 ms. Measures your slowest interaction in a visit.
In PageSpeed Insights, check the Mobile tab. The field section says Pass or Fail on the Core Web Vitals assessment. That line is what matters for search visibility, not the lab score below it.
Fix a slow LCP on mobile
Find the LCP element in Lighthouse. It names the node. On mobile it is often an oversized hero image discovered too late or lazy-loaded by mistake.
Remove lazy loading from the hero
Do not use loading=lazy on the LCP image. It delays first paint. Add fetchpriority=high on it so the browser starts the fetch early.
Preload CSS backgrounds used for the hero
If the hero is a CSS background, add a <link rel="preload" as="image"> for it. Keep the URL in the HTML so discovery is not delayed.
Make images responsive and small
Use srcset and sizes. Serve AVIF or WebP when supported. Crop desktop art for narrow viewports so phones do not fetch oversized files.
Cut TTFB
Cache or pre-render HTML. Serve from a CDN near users. Use HTTP/2 or HTTP/3 and keep-alive. Avoid redirect chains and add 103 Early Hints if you can.
Inline the critical CSS
Inline only what is needed for the first viewport. Load the rest with media=print and swap onload. Remove unused CSS so the byte cost is low.
A fixed page like "/" will paint the product screenshot within the good LCP range on a phone, with the request for the hero image in the first flight and no lazy flag on it.
Stop layout shift on phones
CLS stacks up in session windows. Elements that appear late or resize cause jumps. On small screens one bar can push everything down by a lot of pixels.
- Give width and height or aspect-ratio to every img, video, iframe and ad slot.
- Reserve space for dynamic slots with min-height, including announcement bars and consent banners.
- Use overlays for notices instead of injecting a banner above the content.
- Match font metrics on the fallback: size-adjust and ascent-override avoid jumps when the web font swaps.
- Animate with transform and opacity, not layout properties like height or top.
- Do not insert new content above the fold after load. Append below or in an overlay.
If "/pricing" shifts when the promo bar appears, measure its height and reserve it with CSS from the first paint. Your CLS will drop below 0.1 on mobile when the bar no longer moves content.
Make interactions fast on touch
INP replaced FID in March 2024. It measures the slowest tap, click or key press over the visit. Phones struggle when the main thread is busy or handlers are heavy.
- Break long tasks. Use scheduler.yield or setTimeout to yield back to the browser.
- Render the visual change first, then do the heavy work. Show the menu instantly, fetch after.
- Ship fewer and smaller scripts. Remove dead code. Load non-essentials after load.
- Move expensive work off the main thread with web workers.
- Reduce DOM size and avoid sync layout reads after writes.
- Tame hydration of large frameworks. Split routes, island-ise components or delay hydration until interaction.
- Keep third-party handlers light. Consent, chat and A/B tools can block taps if they run on every click.
On "/checkout", make the Pay button change state immediately on tap, then process. If the handoff is under 200 ms on a phone, you will pass INP comfortably even under load.
Cut render-blocking and third-party cost
Stylesheets block rendering. Synchronous scripts block parsing. Third-party code often blocks both. On mobile the cost is multiplied by CPU and radio limits.
- Inline critical CSS for the first viewport. Load the rest non-blocking with media=print and onload.
- Defer or async scripts. type=module defers by default. Remove @import and unused CSS.
- Fonts: set font-display swap or optional. Preload the one face used above the fold with rel=preload as=font and crossorigin. Self-host WOFF2. Subset with unicode-range. A variable font can replace several files. Or use a system stack to ship nothing.
- Keep the tag manager container small. Remove tags nobody uses. Load embeds on interaction with a facade. Defer analytics and chat until after load. Preconnect only to origins you truly need early.
A fixed "/guides/getting-started" will render above the fold CSS inline, load the docs bundle with defer, and replace the YouTube iframe with a click-to-load placeholder. The page will keep interactivity snappy on a phone data plan.
Check on a real phone, then keep score
Lab runs are a compass, not a verdict. Verify on a physical phone on a busy network. Your thumbs and eyes catch what a bot misses.
Run PageSpeed Insights for the URL
Open pagespeed.web.dev, paste the URL, pick Mobile. Read the field section. If the Core Web Vitals assessment fails, collect the metrics and start from the slowest.
Profile with Lighthouse
Scroll to Diagnose performance issues. Expand the audits. Note the LCP element, the render-blocking list, and third-party summary. Run it more than once to see variance.
Test on a phone you own
Use Chrome on Android or Safari on iOS. Toggle a slow connection via your network or a hotspot. Time first paint and first interaction by feel and a stopwatch.
Use Chrome DevTools for mobile-like runs
Open DevTools, set Network to Slow 4G and enable a CPU slowdown. Record a Performance trace. Look for long tasks, layout thrash and the LCP event.
Track field data in Search Console
Open the Core Web Vitals report. Focus on mobile groups. Fix templates that affect many URLs first. Re-test after deploy and watch the next 28 days settle.
Write down a target per template. For "/", LCP under 2.5 s, CLS under 0.1 and INP under 200 ms on mobile. Ship in small steps and recheck the field data after each release window.
Why a fast desktop page fails on a phone
Phones have weaker CPUs. JavaScript that feels quick on a laptop can take far longer on a mid-range device. That blocks taps and delays paint.
Networks are slower and spikier. A large hero image loads late on 4G. A web font from a third-party host waits on DNS and TLS before bytes arrive.
Layouts are tighter. A sticky header appearing late can shift the entire viewport. Desktop may hide the move. Mobile will show it clearly in CLS.
Questions
Use PageSpeed Insights, Mobile tab, for the URL. Read the field section for Core Web Vitals. Then use Lighthouse for diagnostics. Finally, test on a real phone on a slow connection to confirm the fixes feel fast.
Test one URL at a time in PageSpeed Insights. Compare the field data with the Lighthouse lab run. Repeat for key templates like "/", "/pricing" and "/blog". Use Chrome DevTools to emulate Slow 4G and a CPU slowdown for local debugging.
For SEO, use PageSpeed Insights. It shows the same field data Google reads and a Lighthouse run that simulates a mid-range phone. For hands-on checks, use Chrome on Android with DevTools remote debugging. Judge both data and feel.
There is no single score that ranks. The Core Web Vitals thresholds decide pass or fail in search. Aim for LCP under 2.5 s, CLS under 0.1 and INP under 200 ms on mobile field data. The Lighthouse score helps debug but is not a ranking factor.
Mobile uses a weaker CPU and often slower networks. Heavy scripts, large images and web fonts cost more on phones. PageSpeed Insights splits results by device. Fix what the Mobile tab shows first, because that is what Google uses to index and rank.
After every deploy that touches layout, scripts, images or fonts. Then weekly for key pages. Watch Search Console’s Core Web Vitals report, which updates over a 28 day window, to confirm the field data moves.
Sources
Check my site, free
Paste your homepage URL to get a free mobile speed read: Porteur checks your site and rivals in about thirty seconds and shows three findings you can ship next.
- Free check, no card
- Read-only, your own accounts
- Readable by your agent
Read next
- GuideCore Web Vitals for a product site: the three numbers
- GuideHow to read PageSpeed Insights: field data first, then the score
- GuideReading a Lighthouse score on a phone
- GuideImage optimisation for page speed: the hero image and everything below it
- GuideWeb fonts and page speed: load one face, and load it first
- GuideThird-party scripts: the page speed you gave away
- GlossaryMobile-first indexing
- Free toolCore Web Vitals checker