You opened Google PageSpeed Insights, ran your store URL, and felt your stomach drop. A score of 22 on mobile. Maybe 34. You've got a good product, decent traffic, a theme you paid for, and Google is telling you your store is basically unusable on mobile.

Here's the thing: it's almost never the theme's fault. And it's almost never something you did wrong on purpose. It's the slow accumulation of small decisions that made total sense at the time: installing an app here, adding a chat widget there. Together, they quietly buried your performance.

I've audited over 47 Shopify stores in the past two years. The causes are almost always the same seven things. Let me walk through each one.

📊
What counts as a "good" Shopify speed score? A score of 70+ on mobile and 80+ on desktop is a solid target. Most stores I audit for the first time score between 15 and 40 on mobile. A score below 50 on mobile means your store is actively costing you sales every single day.
Mobile score What it means Revenue impact
0-49 Poor: most visitors experience slow loads Significant daily revenue loss
50-69 Needs improvement: noticeable lag on mobile Moderate impact on conversions
70-100 Good: fast experience for most users Optimised for conversions

Cause 1: Too many apps firing JavaScript on every page

Cause #1

App script bloat: the #1 reason Shopify stores are slow

Every app you install adds JavaScript to your store. That JavaScript loads on every single page: your homepage, your product pages, your checkout, even when the app has no function on that page whatsoever.

A review app fires on your homepage even though there are no reviews there. A currency switcher loads on your blog. A loyalty points widget loads on your 404 page. None of this is visible to you. All of it is visible to Google and to your customers' browsers.

In practice, stores with more than 12-15 active apps almost always score below 40 on mobile PageSpeed. I've seen stores with 23 apps scoring 14 on mobile. Not because any one app was catastrophically bad, but because 23 small problems add up to one very large one.

How to fix it Go through every app in your Shopify admin. For each one, ask honestly: do I use this at least once a week? Is it generating revenue I can measure? If not, remove it. Then check if any remaining apps have settings to limit which pages they load on. Many do; they just don't enable it by default.

Cause 2: Large, uncompressed images

Cause #2

Images that are too large are the easiest win

Images are typically 50-80% of a page's total weight. A single hero image uploaded at 4MB can add 2-3 seconds to your load time on its own. Most merchants upload images straight from their camera or a designer without ever compressing them.

The problem gets compounded when you have 30 product images on a collection page, all loading at full resolution before the customer has even scrolled past the first row.

How to fix it Compress all images before uploading. Tools like Squoosh or TinyPNG are free. Convert to WebP format (30-50% smaller than JPEG at the same quality). Implement lazy loading so images below the fold only load when the customer scrolls to them. This one change alone can cut your page weight by 40%.

Cause 3: Render-blocking scripts

Cause #3

Scripts that stop your page from loading until they finish

Some scripts load synchronously, meaning your browser stops everything and waits for that script to fully download and execute before rendering any more of the page. This is called render-blocking, and it's invisible to you but devastating to your load time.

Common culprits: old Google Analytics implementations, Facebook Pixel added the wrong way, chat widgets loaded in the <head>, and certain review app scripts.

How to fix it Scripts that are not critical to initial page render should be loaded with defer or async attributes, or moved to load after the main content. Your chat widget does not need to block your hero image from loading. Neither does your review app.

Not sure what's slowing your store?

I'll audit your store before we even speak: free, no obligation.

Get a free speed audit →

Cause 4: A poorly optimised theme

Cause #4

Your theme may be loading features you're not using

Many premium Shopify themes come packed with features: sliders, animations, video backgrounds, parallax effects, all of which load their JavaScript and CSS regardless of whether you've enabled those features. A theme you bought for $180 can be loading 800KB of unused code on every page.

Shopify's own free themes (Dawn, Sense, Craft) are substantially leaner than most premium themes and often outperform them on PageSpeed scores.

How to fix it If you're on a premium theme, audit which features you're actually using. Unused Liquid sections and JavaScript modules can often be removed from the theme code without affecting your live design. If you're building a new store, start with Dawn. It's fast by default.

Cause 5: Unoptimised font loading

Cause #5

Custom fonts add more load time than most people realise

Fonts seem small but they block text from rendering until they're downloaded. If you're loading 4 font weights from Google Fonts, that's 4 separate network requests before your customer can read a single word on your page.

This shows up in Core Web Vitals as a high LCP (Largest Contentful Paint) score, meaning the main content of your page takes too long to become visible.

How to fix it Use font-display: swap so text renders immediately in a fallback font while the custom font loads. Preload your most important font file. Limit yourself to 2 font weights maximum. Self-host fonts instead of loading from Google Fonts where possible.

Cause 6: Too many third-party tracking scripts

Cause #6

Pixels, tags, and trackers that accumulate over time

Every marketing channel you've tried has probably left a script behind. Facebook Pixel, Google Analytics, TikTok Pixel, Pinterest Tag, Klaviyo, Hotjar, Lucky Orange: each one adds weight. And unlike apps, these scripts are often forgotten when you stop using a channel.

I've audited stores still loading the TikTok Pixel six months after the merchant stopped running TikTok ads. Pure dead weight.

How to fix it Audit your theme's <head> section and Google Tag Manager container. Remove any scripts for channels you're no longer actively using. Consolidate remaining scripts into Google Tag Manager if you haven't already. It loads asynchronously and is significantly cleaner than individually pasted scripts.

Cause 7: Failing Core Web Vitals

Cause #7

Google's three metrics that directly affect your SEO ranking

Core Web Vitals are Google's official measurements of user experience, and since 2021, they're a direct Google ranking factor. A failing score here means your store is being actively penalised in search results, even if your content and products are excellent.

The three metrics are: LCP (Largest Contentful Paint: how long until the main content loads), CLS (Cumulative Layout Shift: how much the page jumps around while loading), and INP (Interaction to Next Paint: how quickly your page responds to clicks and taps).

How to fix it Target LCP under 2.5 seconds (optimise your hero image, preload critical assets). Fix CLS by setting explicit width and height on all images and embeds. This prevents layout jumping. Fix INP by reducing the amount of JavaScript executing on user interaction.
💡
The honest truth about Shopify speed scores A PageSpeed score of 100 is not realistic for a Shopify store with real functionality. A score of 70-85 on mobile is excellent and is what most professionally optimised stores achieve. Anyone promising you a score of 95+ on a fully functional Shopify store is likely gaming the score, not improving real-world performance.

How long does it take to fix a slow Shopify store?

For most stores, a proper speed optimization takes 5-7 working days. This includes a full audit, making all changes in preview mode (so your live store is never affected), and delivering a before/after report with every change documented.

The work itself, once you know what needs fixing, is systematic. App audit, image compression, script cleanup, Core Web Vitals fixes. Done properly, most stores move from a mobile score of 20-40 to 70-85 within that window.

Can I fix my Shopify store speed myself?

Yes, for some of it. Removing unused apps, compressing images before upload, and deleting dead tracking scripts are all things you can do yourself without touching any code. These changes alone can move a score by 15-20 points in some cases.

The harder parts (JavaScript deferral, Core Web Vitals fixes, theme code cleanup, lazy loading implementation) require code access and Shopify Liquid knowledge. If you're not comfortable in your theme code, those are the parts worth getting help with.

What should I do right now?

Start here: run your store URL through Google PageSpeed Insights. Look at your mobile score. Look at the "Opportunities" section. It will tell you the biggest wins in order of impact.

Then go through your apps. If you have more than 12 installed, you almost certainly have scripts you don't need firing on pages they have no business being on.

If you want someone to do this for you, thoroughly and with zero risk to your live store, that's exactly what I do. I personally audit every store before our first call so I can tell you exactly what's wrong before you commit to anything.

Get your store audited (free)

20-minute call. I review your store first. You get the truth about your speed before spending a penny.

Book free audit →