Why your Shopify store is slow, and the 4 fixes that work
From 100+ store audits: four problems cause about 90% of Shopify slowness. None need a rebuild, the biggest one is free, and one popular fix makes things worse.
Ashraful
Shopify Select Partner

A slow store costs money in a way that is hard to see. Nobody emails to say they left because your product page took six seconds. They just leave, and your conversion rate is a bit worse than it should be, forever.
We have audited more than 100 Shopify stores. The same four problems account for roughly 90% of the slowness, and none of them require rebuilding your theme. Here they are, in the order we fix them, with what each one is actually worth.
Before that, one piece of advice that will save you money: do not install a speed optimisation app. We will come back to why, but if you take one thing from this page, take that.
1. Your apps are the problem, and you have more than you think
Open your store, view source, and count the unique third party domains loading in the head. A typical store we audit has between 15 and 25.
Every one of those is a DNS lookup, a TLS handshake, and usually a blocking request that happens before your product image starts downloading. The customer is looking at a white screen while your store negotiates with a review widget.
The audit takes an hour and you can do it yourself:
- List every installed app
- For each one, ask what would visibly break if you removed it tomorrow
- Notice how often the honest answer is "nothing"
We routinely remove six to eight apps from a store, and the most common reaction from the owner is that they had forgotten it was installed. A typical cleanup recovers 15 to 30 Lighthouse points on mobile and saves $60 to $200 a month in subscriptions that were making the store worse.
Look hardest at: popup apps, review apps whose widget you removed from the theme but whose script still loads on every page, trust badge apps, currency converters that only rewrite text, and anything with "optimise", "boost", or "speed" in its name.
What this is worth: the largest single gain available to most stores, and it costs nothing. It gives you money back.
2. Images, which Shopify already handles if you let it
Shopify's CDN serves modern formats and correctly sized images automatically. It only does this if your theme asks correctly, and a lot of themes do not.
The version still on plenty of stores:
<img src="{{ product.featured_image.src }}">
That ships one enormous file to every device, including phones.
The version that lets the CDN do its job:
<img
src="{{ product.featured_image | image_url: width: 800 }}"
srcset="{{ product.featured_image | image_url: width: 400 }} 400w,
{{ product.featured_image | image_url: width: 800 }} 800w,
{{ product.featured_image | image_url: width: 1600 }} 1600w"
sizes="(min-width: 1024px) 50vw, 100vw"
width="800" height="800"
loading="lazy" decoding="async"
alt="{{ product.featured_image.alt | escape }}">
Two details worth knowing even if you never touch the code.
The width and height attributes are not about size. They tell the browser how much room to reserve, which stops the page jumping as images arrive. That jumping is a Core Web Vital called CLS, and Google measures it.
loading="lazy" must not be on your main product image or hero. Lazy loading the first thing the customer sees delays exactly the image you want fastest. Lazy load everything below the fold, never above it.
What this is worth: typically 10 to 20 Lighthouse points, and it removes the reason people install image optimiser apps. You do not need one. Shopify's CDN is already better than what the app is doing.
3. Your hero image is queued behind everything else
The largest thing on your first screen, usually a hero or the main product image, is what Google measures as Largest Contentful Paint. On most stores the browser does not even discover that image until it has parsed the CSS, because the image is referenced in a stylesheet or set by JavaScript.
One line in the head fixes it:
<link rel="preload" as="image"
href="{{ section.settings.hero | image_url: width: 1600 }}"
fetchpriority="high">
That tells the browser to start fetching the important image immediately rather than discovering it several steps later.
What this is worth: we have measured 600 to 900ms off LCP on stores where nothing else changed. It is the single highest ratio of result to effort in Shopify performance work.
4. The tag manager nobody has opened in two years
Google Tag Manager is where marketing scripts go to accumulate. Every campaign adds a pixel. No campaign removes one.
Open your container and look at the tags. On a store that has been running a few years you will typically find a Facebook pixel from an agency you no longer work with, two heatmap tools, a chat widget that was trialled and never removed, and three conversion pixels for platforms you have stopped advertising on.
Delete what you are not using. Then set the survivors to fire on the pages that need them rather than on every page.
What this is worth: varies enormously, from nothing to 20 points. It is the least predictable of the four and the most often skipped, because nobody owns the tag manager.
Why the speed apps do not work
A speed optimisation app is a script that runs in your store to make your store faster. Read that back.
They mostly do three things: lazy load images, which your theme should already do correctly; defer scripts, which sometimes breaks them in ways you find out about later; and minify assets that Shopify already serves compressed.
To do those, they add another third party domain, another request, and another dependency. We uninstall them as the first step of most speed engagements, and the score usually goes up.
The exception is that some apps genuinely do useful work, particularly around bundling. But if your store has a "speed" app and a Lighthouse score in the 50s, the app is not the reason the score is 50 rather than 30. It is part of why it is not 80.
What "fast enough" actually means
Chasing 100 is a waste of your money. Google's own thresholds are the ones that matter:
- LCP under 2.5 seconds. The main content is visible.
- CLS under 0.1. The page does not move while loading.
- INP under 200ms. Taps respond immediately.
Hit those three on mobile and you are ahead of most of your competitors. The Lighthouse number is a proxy; those three are the thing.
Also: test on mobile, on a throttled connection, on a product page. Not your homepage on desktop office wifi. Your customers are on phones on mobile data, and your product pages are where the money is.
The realistic order
If you do these in order, most stores get the majority of the available gain in the first two.
- Audit and remove apps. Free, biggest single win.
- Fix the image markup. A few hours of developer time.
- Preload the hero. One line.
- Clean the tag manager. An hour, and you may need marketing in the room.
None of it requires a new theme. If someone is quoting you a rebuild to fix speed, get a second opinion first.
We do this work as a fixed-price engagement with a Lighthouse 90+ guarantee and a 14 day re-test, and it usually ships inside a week.
Want to know where your store stands before spending anything? The free store audit runs the real numbers on your actual product pages and tells you which of these four is costing you most. No signup, and you get a written report by email.
Or book a 30 minute call and we will look at it together.
About the author
Ashraful
Shopify Select Partner, Top Rated Plus on Upwork. 700+ Shopify projects shipped over 7+ years: themes, apps, migrations, speed, Hydrogen. Solo shop, no agency middlemen.
Read the full storyWorking on a Shopify project?
That's what I do every day. Pick whichever feels lower-friction.
More from the blog
Keep reading

The one line that cuts 800ms off most Shopify stores
Your biggest image is queued behind analytics and app scripts. One preload line in the head fixes it, and three rules decide whether it helps or backfires.
Read
Your Shopify store has a script budget and you are over it
Nobody decides to make their store slow. It happens one reasonable app at a time. Set the budget, run the audit, and get paid for it in returned subscriptions.
Read
Shopify layout shift: the 3 fixes that move the needle
The page jumps as someone reaches for Add to Cart and they tap the wrong thing. Three causes explain nearly all Shopify CLS, and why your lab score is understating it.
Read