How to Speed Test Your Shopify Theme (And What To Do When It Fails)
Disclosure: ThemeSweep is built by JMS Dev Lab, the publisher of this blog. This article is mostly about the free diagnostic tools anyone can use. ThemeSweep comes up near the end because it addresses one specific problem this process can uncover.
The Moment You Realise Something Is Wrong
You launch a campaign. Traffic arrives. The email converted, the ad spend landed, the Instagram story did its job. Visitors are on your product page. And then they leave.
You check Google PageSpeed Insights out of curiosity and see a mobile score of 38. You have no idea what that number means, whether it is the cause of the flat conversion rate, or what to do about it. So you close the tab and tell yourself you will deal with it later.
Six months later, the score is still 38. Every campaign you have run since has been leaking money into the gap between "visitor arrives" and "page is actually usable." A 1-second delay in mobile load time reduces conversions by around 7%, and most underperforming Shopify themes are losing three to five seconds they do not need to lose.
This post is the diagnostic step I wish every Shopify merchant would run once a quarter. It takes about 20 minutes. You need no technical skill and no paid tools. At the end, you will know exactly what is slowing your store down and what to do next.
Step 1: Run the Three Free Tools That Actually Matter
There are dozens of speed-testing tools. You only need three. Each one measures something slightly different, and you want all three data points before you decide what to fix.
Google PageSpeed Insights
URL: pagespeed.web.dev. Paste your store URL in, wait 30 seconds, and read the mobile score first. Mobile is what Google ranks on and what the majority of Shopify traffic arrives on.
What to look at:
- Performance score — the big number at the top. Aim for 70+ on mobile. Anything under 50 is an active problem.
- Largest Contentful Paint (LCP) — how long until the main above-the-fold content is visible. Good: under 2.5s. Poor: over 4s.
- Total Blocking Time (TBT) — how long JavaScript is blocking the browser from responding to the user. Good: under 200ms. Poor: over 600ms.
- Cumulative Layout Shift (CLS) — how much the page jumps around while loading. Good: under 0.1. Poor: over 0.25.
Run the test on your homepage, a collection page, and a product page. Mobile scores are often worst on product pages because that is where the most apps inject the most code.
GTmetrix
URL: gtmetrix.com. Free account gets you one test at a time with a clear waterfall chart. This is the tool you will spend the most time with.
What to look at:
- Waterfall tab — every HTTP request your page makes, in order, with load times. This is where dead code from uninstalled apps becomes visible.
- Total page size — how many MB the page weighs. Anything over 3MB on mobile is too heavy.
- Number of requests — how many files the browser has to fetch. A healthy Shopify product page is under 80 requests. Many bloated stores sit at 150+.
Shopify's Built-In Web Performance Report
In your Shopify admin, go to Analytics → Reports → Web performance. Shopify runs its own Core Web Vitals checks on your store using real visitor data (not synthetic tests). This is the closest thing you have to what Google actually sees when it decides your search ranking.
Shopify grades each metric as Good, Needs Improvement, or Poor. If LCP or TBT is Poor, that is the thing to fix first.
Step 2: Read the Waterfall Like a Detective
Open your GTmetrix waterfall chart for a product page. You are looking for three specific smells.
Smell 1: Requests to domains you do not recognise. If your theme is loading JavaScript from cdn.some-reviews-app.com but you uninstalled that reviews app four months ago, that is dead code. The app is gone. The code in your theme is still fetching from its CDN on every page view. Sometimes the CDN returns a 404, sometimes it hangs, but it always wastes time.
Smell 2: Long bars on scripts that load before the main content. Render-blocking scripts are the reason LCP numbers are bad. A 1.5-second bar on a JavaScript file at the top of the waterfall means your visitor is staring at a blank screen for 1.5 seconds before anything useful appears.
Smell 3: Large image files. Any image over 500KB on a mobile page is a problem. Hero images over 1MB are common and almost always fixable with compression or format conversion (WebP).
Make a list of every suspicious request with its domain name and size. You will need it in the next step.
Step 3: Work Out What Is Actually Yours Versus What Is Leftover
Here is where most merchants give up. You have a list of suspicious scripts loading from domains you do not recognise. But which ones belong to apps you are still using (leave alone) and which ones belong to apps you uninstalled months ago (safe to remove)?
This is harder than it sounds. When you uninstall a Shopify app, the app disappears from your admin but the code it injected into your theme stays behind. Every Liquid snippet, every stylesheet reference, every inline script — all of it persists until something explicitly removes it. Shopify does not do this. The app developer does not do this. Your theme keeps loading it forever.
The manual process is painful: open your theme code editor, search for every domain you flagged in GTmetrix, cross-reference each match against your list of currently installed apps in Settings → Apps and sales channels, and only delete what matches an uninstalled app.
If you have cycled through ten or more apps over your store's lifetime, this takes hours and it is easy to make a mistake. Delete the wrong snippet and your reviews widget disappears or your currency converter breaks. A safer path exists.
Step 4: Use ThemeSweep to Organise the Review
ThemeSweep is the embedded Shopify app JMS Dev Lab built for this step. It scans supported Liquid, JavaScript, CSS, and JSON theme files using static-reference analysis and known app-code signatures, then reports each potential leftover with its evidence, confidence, and a likely source when a known pattern is recognised. Shopify does not provide ThemeSweep an authoritative list of the merchant’s other installed apps, so treat every finding as a candidate to review, not a verdict.
Scanning is read-only. When you select a finding for cleanup, ThemeSweep revalidates the code and prepares the change on a duplicate theme for preview, with file backups and rollback available for 30 days.
ThemeSweep does not guarantee a PageSpeed, LCP, or request-count improvement. Run PageSpeed Insights and GTmetrix before and after any change you publish, and judge the result from your own store’s numbers.
ThemeSweep is listed on the Shopify App Store with a Free plan and paid plans at $9.99, $19.99, and $39.99 per month, billed in USD. Check the listing for current plan details before installing.
Step 5: Fix The Remaining Issues In The Right Order
Dead code is usually the biggest win, but it is not the only one. After running ThemeSweep, re-run PageSpeed Insights and GTmetrix. If you still have issues, tackle them in this order:
- Oversized images — Use a tool like TinyIMG or Shopify's built-in image optimisation. Convert PNG and JPG to WebP where possible.
- Render-blocking scripts from apps you are still using — Check whether each active app has an "async load" setting. Many do, and it is off by default.
- Unused CSS from your theme — Most Shopify themes ship with CSS for every possible layout option, even ones you do not use. This is harder to clean up and I would only touch it after the above two are sorted.
- Font loading — Custom fonts can easily add a second to LCP. Use
font-display: swapin your theme settings or limit yourself to one font family.
Re-run all three speed tests after each change. You want to see the numbers moving in the right direction, not guess. If a change does not improve the scores, undo it.
How Often Should You Run This?
Every quarter is a reasonable cadence. Also run the speed test any time you:
- Install a new app (check for a before/after speed hit)
- Uninstall an app (the code almost certainly stayed behind)
- Update your theme
- Launch a big campaign (know the baseline before you send traffic — see speeding up your store before a sale)
The merchants who keep their stores fast are not the ones with special knowledge. They are the ones who check the numbers regularly and act on what they find.
Related Reading
- The Hidden Cost of Uninstalling Shopify Apps — Why the code stays behind and what it costs you over time.
- Signs Your Shopify Theme Has Dead App Code — Symptoms to watch for before you even run a speed test.
- ThemeSweep and Cleanify Code — A checklist for evaluating evidence, uncertainty, preview, and rollback.
- Shopify Theme Audit Tools Compared — Broader overview of theme-health tools and what each actually does.
Need Help with Your Shopify Store?
Whether you have questions about theme performance, need help interpreting a speed test, or want a hand cleaning up after years of app installs, we are here to help. Get in touch and tell us what the numbers are showing you.
Related reading: Shopify Theme Audit Tools Compared: Which One Is Worth Running · 5 Signs Your Shopify Theme Is Full of Dead App Code · The Hidden Cost of Uninstalling Shopify Apps · How to Evaluate Theme Cleanup Tools · ThemeSweep.
Have an awkward problem like this one?
Send us one workflow. JMS Dev Lab will recommend the most sensible next step: build, buy, automate or wait.
— or leave your email for one practical reply, with no newsletter —