Skip to main content

April 18, 2026 by Alex Massaad · 6 min read

Why Your Shopify Store Is Slow (And How to Fix It)

Why Your Shopify Store Is Slow (And How to Fix It)

Most Shopify stores get slow the same way, and the diagnosis order matters. When we open a slow store, we don’t start with “minify your CSS.” We start by asking what’s loading on first paint, what’s blocking it, and which third-party scripts are hiding in the theme that the merchant has never heard of.

This post is the actual order we run when we get a “the site feels slow, can you help” message. If you’ve had a developer hand you a 40-item Lighthouse list and you don’t know where to start, this is where to start.

What “slow” actually means in 2026

Google ranks pages partly on Core Web Vitals. The one that matters most for ecommerce is Largest Contentful Paint (LCP): how long it takes the biggest element above the fold to render. Under 2.5 seconds is “Good”; over 4 seconds is “Poor” and you’re paying a ranking penalty.

The business case is real and not theoretical. Per web.dev’s Core Web Vitals case studies, Vodafone saw an 8% sales increase from a 31% LCP improvement; Rakuten 24 reported +53% revenue per visitor and +33% conversion rate after investing in CWV. Both of those use proper measured data, not blog-recycled stats.

Encouragingly, HTTP Archive’s 2024 Web Almanac found 75% of Shopify sites pass Core Web Vitals (vs 43% on WordPress). The platform isn’t the problem. What’s installed on top of it usually is.

A real engagement, step by step

We took on a mid-size DTC brand last quarter. Anonymized but everything else is accurate. Around $1.5M annual revenue, on a premium paid theme that a prior agency had modified heavily. Mobile PSI score on the homepage: 28. LCP: 8.2 seconds. Bounce rate had been climbing for two quarters and the merchant suspected speed but couldn’t isolate the cause.

Here’s the order we ran the diagnosis. Same order works for almost every slow Shopify store.

1. List every third-party script loading on the homepage

Open the storefront, DevTools, Network tab, filter by JS, group by domain. We counted 14 apps loading scripts on every page. Reviews app, two upsell apps, three different popup tools (one was a free trial from 18 months ago that nobody had uninstalled), Klaviyo, Recharge, a cookie consent banner, a “social proof” notification app, a back-in-stock app, and a currency converter.

Of those 14, the merchant could name a function for four. The rest were either A) installed by a previous freelancer for a campaign that ended, B) added during a “we should try this” call and never reviewed, or C) shipped by the theme’s developer as “recommended apps” and silently loaded.

Per HTTP Archive 2024, 92% of pages load third-party resources and the median third-party JS request count keeps creeping up. This is the #1 source of mobile slowness on Shopify in 2026 and almost nobody audits it.

2. Audit the hero

The homepage had a 12 MB unoptimized MP4 hero video on autoplay. Mobile browsers were downloading the entire file before showing anything. The merchant had been told by their previous agency that “video converts better than photos.” It does, except when it’s 12 MB.

We swapped to a poster image (WebP, 80 KB at 1024px wide) with the video loaded only on user interaction.

3. Fonts

Seven font weights loading from Google Fonts. The design actually used two. Each weight is a separate file download blocking the first render.

Trimmed to two weights. Switched to font-display: swap so the browser paints in a system fallback first and swaps the web font in when ready (with the small tradeoff of a brief font-flash, which is usually less bad than a 700ms blank screen).

4. Lazy-load what isn’t above the fold

The reviews widget, the “Instagram feed” embed, the related products carousel, the trust-badges row: none of these need to load on first paint. Adding loading="lazy" on offscreen images and deferring those apps’ scripts until after the load event removed about 1.2 seconds of script-execution from the critical path.

5. Cut the apps you don’t need

Of the 14 apps loading scripts, we removed 7 (uninstalled), set 3 to load only on the pages where they’re actually used (Recharge only on PDPs/cart, Klaviyo deferred), and kept 4 loading globally because they earn their cost.

Results

After the work, on the same homepage:

  • Mobile PSI score: 84 (was 28)
  • LCP: 1.9 seconds (was 8.2)
  • GA4 engagement time per session over the following six weeks: up ~22%

The merchant didn’t change theme, didn’t switch to headless, and didn’t rebuild anything. We just turned off what was breaking the page.

What you can fix yourself

If you don’t have a developer and want to see what’s possible before hiring anyone:

1. Audit your apps. In the Shopify admin under Apps, go through every installed app. For each one, ask: “What does this do, and do we use it?” Anything you can’t answer in one sentence, uninstall. Apps that “might come in handy later” are loading scripts on every page right now.

2. Compress your hero image (or kill the hero video). If your homepage has a video, replace it with a high-quality static image until you’ve talked to a developer about how to deliver video without tanking your speed score. If it’s an image, run it through Squoosh and serve WebP. A properly compressed 1600px hero image should be under 200 KB.

3. Run a Lighthouse test and read the “Reduce unused JavaScript” section. It will name the scripts. Some you’ll recognize (chat widgets, popups). Those are your candidates for removal or page-scoped loading.

4. Check Google PageSpeed Insights (mobile, not desktop, because mobile is what Google uses for ranking). pagespeed.web.dev gives you both lab data and real-user CrUX field data. The CrUX number is what Google actually sees.

What requires a developer

Theme code review. Most slowness lives in the theme’s theme.liquid file or the section snippets injected by apps over time. This needs someone who knows Liquid and Shopify’s render lifecycle.

Render-blocking CSS / JS. Critical CSS inlining, async loading patterns, font preloading, image preloading. Each of these is a 5 to 30 minute change for someone who knows what they’re doing and a several-hour rabbit hole otherwise.

App scoping. Telling an app to load only on the page where it’s used (e.g., Recharge only on subscription PDPs) usually requires editing the theme. Some apps make this easy, some don’t.

Shopify Functions / custom apps. If a slow third-party app is doing something you genuinely need, the right answer is sometimes to replace it with a custom Shopify Function or a small private app. We do this often. Faster, no monthly fee, and no third-party script.

Built for Shopify gives you a baseline

When evaluating new apps, look for the “Built for Shopify” badge. Among other requirements, BfS apps must demonstrate LCP under 2.5 seconds at p75 over 28 days and must not drop your storefront’s Lighthouse score by more than 10 points. It’s not a guarantee, but it’s a meaningful signal.

When to bring in help

If your mobile PSI is below 50, your LCP is over 4 seconds, or you’ve installed an app and noticed the store getting visibly slower, that’s the moment to get a developer involved. By the time bounce rate is visibly climbing, you’ve already lost three to six months of compounded conversion drag.

We do Shopify performance work both as one-off engagements and as part of ongoing maintenance retainers. Most performance audits take a week and pay for themselves inside a quarter.

If you’re based in southwestern Ontario, we work with brands in Guelph, Kitchener, Waterloo, Toronto, and across Ontario.

Call to action background