Features Ad Monitoring Reports Trends & Insights Google Ads Audit Creative Intelligence Industries SaaS E-commerce B2B Agencies Agency Resources Blog Case Studies Help Center Content Libraries CRO Guides Analytics Hub WooCommerce Shopify Pricing Log In Get Started Free

Why is my Shopify site slow and what actually fixes it

By Dror Aharon · CEO, COREPPC · Updated April 17, 2026 · 11 min read
Why is my Shopify site slow and what actually fixes it: editorial illustration
TL;DR

A Shopify slow site is almost always a diagnosis problem, not a fix problem. Every store we audit comes in with the same question, "why is the site suddenly slow," and every operator is already halfway down the wrong rabbit hole. Usually they are blaming Shopify's servers or the theme, when the real cause is 3 apps, 18 pixels, and a hero image nobody resized in 14 months. The fix part is easy once you know what broke. The diagnostic part is where 9 out of 10 stores waste a week. This guide walks through the 20-minute diagnostic that finds the real cause, so you spend the afternoon fixing the thing that actually matters instead of shotgunning "speed booster" apps that make it worse. Most stores find the top cause inside the first 10 minutes and ship the fix the same day.

  • Run PageSpeed Insights, WebPageTest, and Shopify's analyzer together. One tool lies, three tools agree.
  • Check the Coverage tab in DevTools before you touch anything. 3 apps usually account for 60% of the problem.
  • Mobile field LCP is the metric that matters. Not the lab score on the dashboard.
  • If the fix is not obvious after 20 minutes of diagnosis, the problem is Liquid, not JS.

How to tell how slow is "slow" on Shopify

Shopify slow site complaints start with a feeling. The homepage takes a beat too long. A customer emails. The owner types the URL on their phone and thinks, yeah, this is slow. But slow against what? That is the first question, and most operators never answer it cleanly before they start "fixing" things. Best to define the bar before you touch the theme.

The honest numbers for 2026. Mobile LCP under 2.5s is Google's "Good" threshold and the bar that matters for Core Web Vitals. Between 2.5s and 4.0s is the "Needs Improvement" zone, where Google still indexes you but Quality Score and organic ranking both get dinged. Above 4.0s is "Poor," and that is where CR drops off a cliff because real humans on real phones start bouncing before the hero image renders. Most Shopify stores we audit sit between 3.2s and 4.7s on mobile, which means they feel slow, they test slow, and they are losing somewhere between 8 and 20 percent of paid clicks to bounce before the page even loads.

Desktop numbers lie. A store that scores 88 on desktop PageSpeed Insights can sit at 38 on mobile, and the dashboard composite score does not split them cleanly. So the owner sees a green "82" on the Shopify admin and assumes the store is fine, while 65% of traffic on mobile is bouncing at 4.2s LCP. The gap between desktop and mobile on Shopify is almost always the cause, not Shopify itself. The platform is fast. The accumulation of app JS and unoptimized images on top of it is what slows the phone down.

Best to anchor your diagnostic to two specific numbers before anything else. Field LCP on mobile (from the CrUX report inside PageSpeed Insights, not the lab score) and total JavaScript payload (from the Coverage tab in DevTools). If field LCP is above 2.5s and JS payload is above 1.2MB, you have a real problem and the cause is almost certainly in this guide. If field LCP is under 2.0s and you still feel like the site is slow, the problem is not technical, it is a design or UX perception issue, and no amount of speed work fixes that. Different problem, different playbook.

Running the diagnostic: PageSpeed Insights + WebPageTest + Shopify's own analyzer

A Shopify speed problem diagnosis needs three tools because each one tells you a different piece of the story and any single one in isolation misleads. The three we run on every audit, in this order.

  1. Google PageSpeed Insights. Open it, paste the URL, run the mobile test. Look at two things. The lab score at the top (that is the synthetic ceiling under perfect conditions) and the "Core Web Vitals Assessment" from field data below it (that is what real users experienced over the trailing 28 days). If the field LCP is more than 1s slower than the lab LCP, you have a real-world rendering problem that synthetic tests are missing. This is the single most common pattern we see on Shopify slow loading audits.
  2. WebPageTest. Same URL, select "Mobile 4G" from the location dropdown, run the test. The waterfall view is the money shot. You see every request in order, color-coded by type. Render-blocking scripts show up as red bars before the first content paint. Third-party pixels stack up in a cluster that pushes LCP past the fold. This is where you find the actual culprit, not the symptom.
  3. Shopify's "online store speed" report in admin. Go to Online Store, Themes, Actions, View Report. This one is worth running third because it gives you Shopify's own opinion of what is slow. Their composite score tends to be 10 to 15 points higher than real-world mobile PageSpeed, but the breakdown by section (apps, theme, images) is useful for cross-referencing the WebPageTest waterfall.

Run all three on the homepage, a top-traffic product page, and a collection page. Mobile only. Do not waste time on desktop tests during a diagnostic. The 65% of traffic that lands on mobile is where the actual problem lives, and desktop numbers are not going to surface the JS payload issue that usually causes Shopify page speed low scores.

The pattern to watch for. If PageSpeed Insights, WebPageTest, and Shopify's report all point at the same culprit (say, "large JavaScript payload"), that is your fix. If they disagree, the tools are doing their job right and you have multiple issues stacked on top of each other. Most Shopify stores in the "slow" bucket have two or three causes compounding, not one. That is why shotgunning "install a speed booster app" rarely works. The app fixes one cause and the other two remain, so the dashboard barely moves.

Cause 1: app bloat from the last 12 installations

App bloat is the cause in roughly 6 out of 10 Shopify slow site audits we run. The store installed a review app, an upsell tool, a chat widget, a wishlist, a currency converter, a back-in-stock notifier, a loyalty program, a popup tool, a quiz app, a free shipping bar, and an exit-intent modal over 12 months. Each one looked small at install. None of them disclose the render-blocking JS they inject. Now the homepage ships 2.4MB of JavaScript on first paint and nobody can trace it back to a single install.

The diagnostic that finds this in 5 minutes.

The typical wins we see inside a single afternoon. A back-in-stock notifier that loaded on every page but was only needed on out-of-stock product pages. Saved 340KB and 0.6s of LCP. A currency converter loading synchronously in the head when it could defer. Saved 220KB and 0.4s. A loyalty widget loading on the homepage when it only mattered post-purchase. Saved 480KB and 0.9s. One store, all three, total LCP improvement 1.9s in one afternoon.

The trap worth flagging. Do not uninstall the Shopify Facebook and Instagram app or Google Tag Manager just because they show up in the Coverage report. Those are tracking infrastructure and killing them costs more than the LCP gain. Defer them instead. Most analytics scripts can move to defer or async without breaking the data layer, and that buys you most of the speed back without sacrificing attribution.

Cause 2: theme JavaScript that loads on every page

Theme JS is the cause in about 2 out of 10 Shopify speed problem audits. A developer added a carousel script six months ago. Then a currency toggle. Then a "recently viewed" widget. None of them got cleaned up when the next theme tweak shipped. Now every page carries every script, even pages that do not use most of them.

The smell test. Open layout/theme.liquid in the theme code editor. Search for <script>. Count the inline script tags and the external <script src= references. If the head has more than 4 or 5 scripts loading synchronously, you have theme JS bloat. Anything that is not the theme engine itself, the analytics pixel, or the cart drawer controller is a candidate for deferring or deleting.

The diagnostic pattern. Hard-reload the homepage with the Network tab open, filter by JS, sort by transfer size. Scripts larger than 50KB that are not from Shopify's own CDN or your F&I app are worth investigating. Click into each one, check the Initiator column. If it is loaded from theme.liquid and it is not critical above-the-fold rendering, it should either defer or move to the page where it actually runs.

The fix sequence that does not break design.

  1. Clone the live theme into a draft copy. Every change goes into the draft first. Rollback is one click.
  2. For each theme-level script, ask: does this run above the fold? Analytics, tracking, cart badges, chat widgets, popup scripts almost never do. Add defer to those script tags.
  3. For scripts that only run on specific templates (product recommendations on PDP, collection filters on collection pages), move them into the template file instead of theme.liquid. They stop loading on the homepage, cart, checkout, and every other page where they do not run.
  4. Screenshot the homepage, PDP, cart, and checkout before and after. If anything visual changed, you broke something. Find the offending change and try again. Most of these cleanups produce zero visible difference.

The broader playbook for this lives in the companion guide, Shopify Site Speed Optimization, which walks through the full theme code cleanup with the Liquid details. This section is the diagnostic half. Find the scripts, prove they are the problem, then reach for the playbook.

Cause 3: unoptimized hero images and fonts

Unoptimized media is the LCP element on maybe 4 out of 10 Shopify slow site audits, often stacked on top of app bloat. The hero image is usually the culprit. Someone uploaded a 4MB PNG as the homepage banner in 2023 and nobody has touched it since. The Shopify CDN serves the file at full size to every device, including phones on slow 4G.

The diagnostic that finds this in 2 minutes. Open PageSpeed Insights on mobile, scroll to the "Largest Contentful Paint element" section. It tells you exactly which element is the LCP and how long it took to render. If it is an image and the time is above 2.0s, the image is your problem. Right-click the image on the live site, open in a new tab, check the file size in the URL or the network tab. Anything above 200KB for a hero is oversized. Anything above 500KB is a disaster.

The four fixes that ship in 30 minutes.

Fonts are the quieter half of this. If you use a custom brand font loaded from Google Fonts or Adobe Fonts, it adds a DNS lookup, SSL handshake, and an external request that blocks paint. Self-hosting the font in assets/ cuts 200 to 400ms. Adding font-display: swap stops the invisible-text flash that makes pages feel broken. These two changes ship in 20 minutes and nobody on the design team notices the difference because the visual font is the same, it just arrives faster.

Cause 4: third-party pixel scripts (the 15-20 you forgot)

Pixel sprawl is the silent killer on Shopify page speed low audits, especially on stores between 1 and 3 years old. Meta pixel. TikTok pixel. Pinterest tag. LinkedIn Insight tag. Criteo. Klaviyo onsite. Google Ads remarketing. GA4. Microsoft Clarity. Hotjar. Triple Whale. Northbeam. Plus whatever the last "tracking specialist" added and never documented. Some stores we audit have 18 to 22 tracking scripts loading on every page, and the owner knows about maybe 6 of them.

The diagnostic that finds every one.

  1. Open the live site homepage, open DevTools, open the Network tab, filter by "Doc," clear, hard-reload. Switch the filter to "JS" once it loads.
  2. Scan every script that loaded from a domain that is not yours, not Shopify's CDN, and not your core apps. Common pixel domains: connect.facebook.net, analytics.tiktok.com, ct.pinterest.com, snap.licdn.com, static.criteo.net, static.klaviyo.com, googletagmanager.com, clarity.ms, static.hotjar.com, triplewhale.com.
  3. Count them. Anything above 6 is pixel sprawl. Anything above 10 is a problem. Anything above 15 and the tracking layer alone is costing you 0.8 to 1.5s of LCP.
  4. For each one, ask: is this actively used? Meaning, is someone running a TikTok campaign right now, or did the store run one 14 months ago and the pixel never came out? The "we might use it later" tax shows up here too, and it is usually the worst on pixels because nobody wants to be the person who killed a tracking tag.

The fix is boring but effective. Route everything through a single GTM container (browser or server-side). Turn off pixels that have not seen a live campaign in 90 days. For pixels that are active but not critical above-the-fold, add defer so they do not block paint. This alone has dropped LCP by 0.6 to 1.2s on every store we have done the exercise on.

The related guide on pixel sanitization lives at Shopify Meta Pixel Duplicate Events for the dedup side of this. If you are running Meta CAPI, pixel sprawl compounds the problem because now the duplicates are not just browser-side, they are fighting the server-side CAPI events too.

Cause 5: Liquid loops and queries that block render

Liquid loops are the cause that stumps operators because it does not show up in any of the usual places. PageSpeed Insights does not surface it clearly. The Coverage tab is silent. DevTools shows a slow TTFB and nothing else obvious. This is the 1 in 10 cause where the symptom is "the page is slow and nothing in JS or images explains it."

The tell. TTFB (Time to First Byte) above 800ms on the homepage or collection page. Shopify's edge network should return the first byte in 150 to 400ms under normal load. If you see 1.2s+ on a consistent basis, the page is waiting on server-side Liquid to finish rendering before the HTML ships. That is almost always a loop or a nested query doing more work than it should.

Where the problem usually lives.

The diagnostic sequence. Open the slow page. Check TTFB in the Network tab under the initial document request. If it is above 800ms, open the theme code, find the template file for that page, search for {% for %} loops without a limit filter. That is usually the fix. For everything else, Shopify's Liquid performance documentation walks through the profiler tool that shows exactly which Liquid code is eating the render time.

This cause is rare enough that you should check the first four before diving here. But when it is the cause, it is the only cause. Fixing apps and images on a store that is bleeding 900ms of TTFB to a runaway Liquid loop does not move the needle. The browser never gets the HTML fast enough for any of the other fixes to matter.

Frequently asked questions

Why does my Shopify site feel slow even though the dashboard says 82?
The Shopify "online store speed" score is a composite that leans on desktop lab conditions and does not split mobile and desktop cleanly. A store can sit at 82 on the dashboard and run mobile field LCP at 4.2s, which is the number real users actually feel. Best to ignore the dashboard composite and go straight to PageSpeed Insights on mobile, then scroll to the Core Web Vitals Assessment section for the field data from the CrUX report. That is the trailing 28-day average from real users on real devices, and it is the only speed number that correlates with CR and bounce rate. If the dashboard says 82 and field LCP says 4.2s, the dashboard is lying and the customers are right.
How do I know if apps are slowing my Shopify site?
Open the homepage in Chrome, open DevTools, switch to mobile emulation, open the Coverage tab, hard-reload. Sort by "unused bytes" descending. The top 3 rows are almost always third-party app scripts, and the "unused" number tells you how much of that code is loading without being used on the page. If the top 3 rows total more than 400KB of unused JS, app bloat is your primary cause. Match each URL back to the app in Shopify admin, check if the app offers a "load on selected pages" setting, and turn it on. The fix usually ships the same afternoon and drops mobile LCP by 0.5 to 1.5s depending on how bloated the top 3 are.
Does Shopify's server cause slow loading or is it always the theme?
Shopify's edge network is fast. TTFB from their CDN to a mid-range Android phone on 4G is typically 150 to 400ms, which is faster than most self-hosted e-commerce platforms manage. The cause is almost never the Shopify server itself. If you are seeing TTFB above 800ms consistently, the problem is server-side Liquid rendering on your specific theme (usually a runaway loop or an uncached metafield lookup), not Shopify's infrastructure. The fastest way to confirm is to open a second Shopify store on the same plan and run PageSpeed on it. If that one is fast and yours is slow, the issue is in your theme or apps, not the platform.
Will a Shopify speed booster app fix my slow site?
Mostly no. Apps like Hyperspeed, NitroPack, and RapidLoad produce real lab-score improvements by lazy-loading everything and deferring scripts aggressively. The field data (real-user LCP from the CrUX report) often does not move because they optimize for synthetic conditions, not real devices. Some of them also break theme functionality in hard-to-debug ways, like lazy-loading the LCP hero image (which delays LCP instead of improving it) or deferring critical scripts that control the cart drawer. Best to do the manual audit first, fix the obvious app bloat and image issues, and only evaluate a speed app after the baseline is clean. Most stores find they do not need one.
How long before speed fixes show up in conversion rate and revenue?
PageSpeed lab scores update immediately on deploy. Field data (the CrUX report) updates on a 28-day rolling average, so real-user LCP starts moving within 7 to 10 days and stabilizes around day 28. Conversion rate impact lags that by another 2 to 4 weeks, because CR changes need enough traffic to rise above daily noise before the trend is readable. Best to set a 6-week measurement window after shipping speed fixes. Compare 6 weeks before to 6 weeks after on mobile CR by traffic source. Paid social usually shows the fastest signal because Meta's algorithm reads bounce and dwell time within 24 to 48 hours. Across the stores we have audited, 0.4 to 0.7 points of mobile CR lift inside 6 weeks is the typical range after a clean speed pass.
Is my Shopify theme or my apps the bigger cause of slow loading?
Apps win about 60% of the time in our audit sample, theme code wins about 25%, and images or fonts win the remaining 15%. The quick test. If the Coverage tab in DevTools shows 3 third-party app URLs in the top 5 by unused bytes, apps are your primary cause. If the top 5 are mostly theme.js or internal scripts from your own theme, theme code is the cause. If JS payload is under 1MB but LCP is still above 2.5s, the cause is the hero image or the custom font loading pattern. The 20-minute diagnostic in this guide tells you which of the three buckets you are in inside the first 10 minutes, and that is usually enough to start shipping the fix the same afternoon.

A Shopify slow site problem is almost always fixable, and usually in an afternoon, once you know which of the five causes is actually the cause. Most stores skip the diagnostic and jump straight to "install a speed app," which fixes the wrong thing, or to "rebuild the theme," which is 6 months of work for something a Coverage tab scan would have surfaced in 5 minutes. Best to run the 20-minute diagnostic in this guide before you touch a single file. PageSpeed Insights on mobile, WebPageTest waterfall, Shopify's own report, then the Coverage tab to find the top 3 offenders. If the top 3 are apps, you fix apps. If the top 3 are theme scripts, you defer or move them. If the TTFB is above 800ms, you go hunting for the Liquid loop. In that order. The broader playbook for each fix lives in the companion guide. This one was about finding the right cause so you stop fixing the wrong thing.

Get a full X-ray of your ad account

Paste your Meta and Google Ads. See exactly where signal is leaking. Free. 60 seconds.

Start my audit
Dror Aharon
Dror Aharon
CEO, COREPPC

Ran paid media for 70+ Shopify brands. COREPPC manages $12M+ a year across Meta and Google for ecommerce and SaaS operators.