Need help: How to pass Core Web Vitals & get 90+ mobile score on Shopify?

Hello Shopify Community,

I am running my Shopify store and currently struggling with Core Web Vitals and PageSpeed Insights scores.

  • On desktop, performance is decent, but mobile score is below 90.

  • Some metrics like LCP, CLS, and FID are failing.

I want to ask the community:

  • What are the practical steps for optimizing Core Web Vitals on a Shopify store?

  • Any recommendations for improving mobile performance specifically?

  • Are there apps, coding tweaks, or theme adjustments that you have found effective?

  • Has anyone here successfully achieved 90+ score on mobile? If yes, what worked for you?

I would really appreciate any guidance, examples, or resources that could help me improve performance.

Thanks in advance!

@AnilTanwar Hi there :waving_hand:, great question Core Web Vitals can definitely be tricky on Shopify, especially when it comes to mobile performance.

A few practical steps that can help:

  1. Optimize images

    • Make sure all images are served in modern formats (like WebP) and compressed.

    • Use Shopify’s built-in responsive image handling (srcset) so the browser loads the right size depending on the device.

  2. Lazy-load non-critical media

    • Shopify themes often support lazy-loading for images and iframes make sure this is enabled so media below the fold doesn’t delay LCP.
  3. Minimize unused apps and scripts

    • Extra apps often add external JavaScript, which slows down FID and LCP. Try to audit which apps/scripts are essential and remove or replace the ones that aren’t.
  4. Theme adjustments

    • Check for large hero banners or sliders at the top of your pages simplifying or reducing these can help LCP significantly.

    • Use system or lightweight fonts when possible to avoid layout shifts (CLS).

  5. Critical CSS & defer non-essential JS

    • Some themes and developers inline above-the-fold CSS and defer scripts. Even small changes here can give a big boost to mobile scores.
  6. CDN & caching

    • Shopify already uses a fast CDN, but make sure you’re leveraging browser caching correctly for any custom scripts or assets.

As for your last question yes, it is possible to achieve 90+ on mobile, but it usually takes a combination of trimming heavy sections (apps, videos, sliders) and carefully tweaking the theme code. Many stores see their biggest gains by reducing render-blocking scripts and optimizing the LCP element (often the main banner or first product image).

If you haven’t already, I’d also suggest running your site through web.dev/measure it gives tailored recommendations beyond PageSpeed Insights and can highlight what’s hurting your mobile performance most.

Hope that gives you a solid starting point.

I can give you one reminder about the way how to check these metrics in PageSpeed Insights.

You can click an icon called Expand view on the right upper corner of Metrics and there you can see more details with blue font icons to know what they are and how to handle them properly, as the solution exists in the docs attached if you click them to further check.

Hii @AnilTanwar , I recommend that you provide us with the URL of the store so that I can test and analyze the real issues and solutions in deep. For fixing LCP and CLS, below are the steps you should follow to fix-

  • Optimize Images- Try to optimize your image by using next-generation image formats like WebP or AVIF. If you are already using it, then compress the image further so that it is optimized even more.

  • Lazy Loading and Preloading - Apply the lazy loading to the non-essential resources so that the resources that are not required early can be used optimely. Apply the preloading to the essential ones, and remember to keep the balance between these two attributes.

  • Defer or Async Non-Critical JS- Add defer or async to app scripts and third-party tracking pixels. This will enhance the performance of your store and fix the FID issues. Further, try to minify the JS by using any tool.

  • Test and monitor - Test your store regularly and monitor the performance and your changes. See, the fix depends upon your site testing, as different solutions are there for different issues.

Alternatively, if you are looking for the best and automatic way of increasing the page speed, I recommend trying Website Speedy- an optimization app for automatically fixing the performance issues of the store. It comes with a 14-day free trial.

(Disclaimer: We are the developers of this app and ready to serve you in every problem you may face.)

Hi @AnilTanwar

Totally understand your concern. Core Web Vitals do matter, but you don’t need to obsess over hitting 90+ on mobile. Many successful Shopify stores perform just fine in the 60–80 range and still rank and convert strongly. What really matters is how smooth and responsive your store feels on a real phone.

Here are a few things we’ve seen make the biggest difference:

  • Theme cleanup: Most themes ship with extra code or sections you’ll never use. Removing that helps a lot. Even Shopify’s free themes (like Dawn) can perform better once you strip out unused scripts.
  • Apps: Every app adds weight. Try disabling them one by one to see their impact. Sometimes replacing 2–3 apps with a single multipurpose one can speed things up dramatically.
  • Images & media: Optimize your main banner/hero image since that’s usually the LCP culprit. Use lazy loading for content below the fold so mobile users don’t wait for everything at once.
  • CLS fixes: Always set width/height for images and embeds to prevent layout shifts. This is a quick win.

And some quick general advice:

  • Focus on real user experience rather than chasing a perfect score.
  • Trimming unused apps and scripts is often the single biggest win.
  • Don’t overcomplicate things, sometimes pushing for perfect scores can hurt design or cost more than it’s worth.

If your store loads fast for customers, stays above 70–80, and bounce rate is healthy, you’re already in a good spot. Aim for balance between speed, design, and functionality instead of stressing over 90+.

Hope this helps take some pressure off. You’re definitely on the right track :+1:

I’ve been working on improving Core Web Vitals and PageSpeed Insights scores for Shopify stores too, so here are some practical things that have helped me (and others) get closer to that 90+ on mobile:

  1. Optimize Largest Contentful Paint (LCP)

Compress and serve images in next-gen formats (WebP/AVIF). Shopify now supports these natively in many themes.

Use responsive image sizes (srcset) so mobile doesn’t download oversized desktop images.

Lazy-load below-the-fold images and videos.

Check your hero section—if it has a large banner or slider, consider simplifying or reducing the initial image size.

  1. Improve First Input Delay (FID) / Interaction to Next Paint (INP)

Minimize third-party apps/scripts. Each app adds JS, so audit what you really need.

Defer or async non-critical scripts.

If you’re using tracking or chat widgets, load them after user interaction instead of at page load.

  1. Fix Cumulative Layout Shift (CLS)

Always set width/height (or aspect ratio) for images, logos, and embeds so space is reserved.

Preload fonts and use font-display: swap.

Avoid dynamic elements pushing content down (like late-loading announcement bars or pop-ups).

  1. Mobile-specific tips

Use a lightweight theme (e.g., Dawn or a custom-optimized one). Heavy premium themes often drag mobile scores down.

Cut down on sliders, carousels, and background videos—these are major mobile killers.

Enable critical CSS so above-the-fold content loads fast.

Minify and combine CSS/JS where possible.

  1. Tools & Apps

TinyIMG or Crush.pics → image optimization.

Hyperspeed → script management, lazy-loading, and caching tweaks.

Speed Boostr (service) → audits Shopify themes for bloated code.

  1. What worked for me personally
    On a store I managed, switching to Dawn, stripping unnecessary apps, and re-optimizing images brought mobile from ~65 to 92. The biggest jump came from lazy-loading images and deferring non-essential JS.