
Shopify Performance Audit: 8 Speed Issues That Cost Sales
A diagnostic walkthrough of 8 high-impact Shopify speed issues we see repeatedly in audits: how to detect each one in PageSpeed Insights or Chrome DevTools, why it costs sales, and where to find the fix. Built on patterns observed across 1,533 audited Shopify stores.
Around 1% of Shopify stores pass the 2.5-second LCP threshold in lab Lighthouse tests, while around 86% pass in real CrUX field data (EcomHint speed benchmark, n=1,533). That gap explains why generic speed advice often misses what's actually slowing your store down. Lab tests assume a slow phone on a throttled connection; CrUX measures real shoppers on real devices.

This Shopify speed audit identifies 8 high-impact issues that surface repeatedly in performance audits, focused on diagnosis rather than implementation. Each issue has a way to detect it (PageSpeed Insights, Chrome DevTools, or Lighthouse), a clear impact , and a one-line pointer to the fix. The fix logic itself lives in the site speed optimization guide, so this article stays diagnostic. Around 90 minutes if you walk all 8 carefully, no paid tools required.
Performance problems usually cost sales in three places: shoppers abandon before the product is visible, interactions feel delayed during product selection, and layout shifts create friction around Add to Cart and checkout actions. Each of the 8 issues below maps to one of those three leak points.
How This Performance Audit Differs from a Full Store Audit
A full Shopify audit checklist covers 32 items across , , performance, trust, and CRO. The 6-step audit walkthrough covers all five dimensions sequentially. This guide is performance-only and detection-focused. Use this when PageSpeed Insights shows a poor score and you need to figure out which specific issue is dragging it down, not when you want a holistic store check.
How to Read This List
Each of the 8 issues has the same structure. First a one-sentence description of what the issue is. Then the detection method, naming the exact PSI flag, Lighthouse audit, or DevTools tab to use, with a threshold that flags the issue. Then the impact framing with sources. Finally a one-line fix pointer with a link to the relevant section of the speed guide. Work through them in order or jump to the one that matches your current PageSpeed report.
Key takeaway: EcomHint benchmark data referenced throughout comes from 1,533 audited Shopify stores with sufficient CrUX field data. Lab metrics were collected through PageSpeed Insights and Lighthouse under mobile test conditions. Field metrics reflect real Chrome users via CrUX.
Quick Reference
| Issue | Main symptom | Detection tool | Fix priority |
|---|---|---|---|
| 1. Hero image LCP | LCP element is large image | PageSpeed Insights | High |
| 2. JS bundle weight | JS transfer over 1 MB | Chrome DevTools | High |
| 3. Third-party app overhead | 30+ services / high blocking time | PageSpeed Insights | High |
| 4. Render-blocking scripts | Sync scripts in head | Lighthouse + View Source | High |
| 5. Render-blocking fonts | FOIT / invisible text on load | PageSpeed Insights | Medium |
| 6. Layout shifts | Late-loading bars / widgets | PageSpeed Insights | Medium |
| 7. INP from interactions | Slow variant / cart / search | PSI field data | Conditional |
| 8. Slow collection pages / TTFB | TTFB over 800 ms | Chrome DevTools | Conditional |
Don't want to check all 8 manually? Run the free Shopify speed test
Issue 1: Hero Image as LCP Element
The LCP () element is whatever takes up the most visual space within the first viewport. Across 1,533 audited Shopify stores in the EcomHint speed benchmark, around 77% have an image as the LCP element. On homepages this is typically the hero banner, on product pages the main product image. When that image is oversized, lazy-loaded by mistake, or missing width and height attributes, LCP suffers.
Detection runs in PageSpeed Insights. Run your homepage and one top product page on the Mobile tab. The report shows an "LCP element" section with a screenshot. If the element is an <img> with transfer above 200 KB, missing explicit width and height, or carrying loading="lazy" on a first-viewport image, treat it as a likely Issue 1. Cross-check against the LCP threshold of 2.5 seconds (Google web.dev).
The sales impact is direct. Google research shows sites passing all three see shoppers around 24% less likely to abandon mid-load (Addy Osmani citing Google research). Slow hero image equals slow LCP equals more shoppers who never see the product.
Fix work belongs in the speed optimization guide's LCP section, which covers conversion, fetchpriority="high", and explicit dimensions.
Issue 2: JS Bundle Weight Overload
Shopify themes and apps load JavaScript that powers everything from the cart drawer to product recommendations. The problem is cumulative: a theme adds 800 KB, the reviews app adds 400 KB, the app adds 300 KB, analytics adds 200 KB. Suddenly the homepage carries 2.5 MB of JS, and a meaningful chunk of it never runs.
Detection uses Chrome DevTools. Open the homepage in incognito, F12, Network tab, refresh. Filter by JS and Transfer. The total at the bottom should ideally sit under 1 MB for ecommerce (industry guidance for mid-tier mobile). For critical-path JS specifically, web.dev's performance budget guide recommends staying under 200 KB on Slow 4G mobile connections (web.dev performance budget).
Real-world Shopify stores blow past those thresholds routinely. Across 225 audited Consumer Goods Shopify stores (EcomHint Consumer Goods speed benchmark), the median homepage carries roughly 2.5 MB of JavaScript with around 929 KB of that bundle unused (analyzed via Lighthouse coverage). On product pages the median is even heavier at 2.7 MB JS with 971 KB unused.
The impact compounds with mobile. Mid-tier Android phones parse JavaScript several times slower than desktop, so every extra megabyte directly delays interactivity. The speed guide's JavaScript section walks through code-splitting, removing unused libraries, and deferring non-critical scripts.
Issue 3: Third-Party App Overhead
Many installed Shopify apps and embeds load their own JavaScript and , often globally on every page whether the feature is visible or not. Across 1,533 audited Shopify stores, the median Shopify store runs 21 to 30 third-party services on its homepage, and service count correlates strongly negative with mobile performance score (r = -0.66) (EcomHint third-party app speed analysis).

Detection runs in PageSpeed Insights. Look for the "Reduce the impact of third-party code" audit. It lists every external service, its transfer size, and its main-thread blocking time. The same article notes service-density patterns by industry. Beauty & Personal Care stores median 31 services, Consumer Goods 26, Automotive Parts 15. If your store sits above 30 services on the homepage, treat it as a likely Issue 3.
Category matters. Analytics services correlate at r=-0.55 with performance score, marketing at -0.45, ad services at -0.41. Reviews and checkout-flow services correlate weakly (-0.20 and -0.12), so they're rarely worth touching first.
The individual outliers help. hits around 90% adoption across audited Shopify stores with a median main-thread blocking time near 486 ms. Heavy outliers include Signifyd at 1,209 ms median (n=28 stores). Lighter services like Affirm (183 ms) and Rebuy (222 ms) often justify their footprint with revenue lift.
Fix work belongs in the speed guide's app inventory section, which covers audit and removal protocol.
Issue 4: Render-Blocking Third-Party Scripts
Render-blocking scripts are JavaScript and CSS that the browser must download and execute before painting anything visible. Chat widgets like Intercom, tools like VWO or Optimizely, and analytics platforms loaded synchronously are the most common offenders on Shopify.
Detection uses Lighthouse. Run the Performance audit and look for "Eliminate ". Each flagged URL has a savings estimate in milliseconds. Cross-reference with View Source on your homepage and search for <script tags inside <head> without an async or defer attribute, especially anything pointing to non-Shopify domains.
The practical scale on Shopify is real. Render-blocking scripts compound quickly. , a chat widget, an A/B testing platform, and analytics often all load synchronously in the head, each adding main-thread work before first paint. Treat each render-blocking script as a high-priority inventory item rather than an automatic LCP penalty. When 3 to 5 sync-loaded stack on top of the theme's own JavaScript, the cumulative render delay grows quickly.
Fix work belongs in the speed guide's render-blocking resources section, which covers async, defer, and conditional loading patterns.
Issue 5: Render-Blocking Fonts
Without font-display: swap, browsers wait for the custom font to download and parse before rendering any text using it. The result is FOIT (Flash of Invisible Text), which delays LCP whenever the LCP element relies on the custom font.
Detection runs in PageSpeed Insights. Look for "Ensure text remains visible during webfont load". As a manual check, view source on your homepage and search for fonts.googleapis.com. Each Google Fonts URL should include &display=swap in the query string (Google web.dev fonts best practices).
The trade-off is brief unstyled text. With swap active, the browser shows the fallback font first and swaps to the custom font when ready, which can cause a small . Swap remains the recommended default for ecommerce stores prioritizing LCP (DebugBear font-display guide), and modern CSS size-adjust and ascent-override descriptors on fallback fonts can shrink that swap shift further (web.dev CSS size-adjust).
Fix work belongs in the speed guide's font section, which covers self-hosting, hints, and font-display configuration.
Want a full Shopify audit alongside performance?
Issue 6: Layout Shifts from Late-Loading Content
() measures how much content jumps around during page load. The threshold for "good" is below 0.1 (Google web.dev CLS). Across 1,533 audited Shopify stores, around 85% pass CLS in field data, so CLS is rarely the failing on Shopify. When it does fail, the cause is almost always late-loading content pushing the layout down after first paint.
Detection runs in PageSpeed Insights. Look for "Avoid large layout shifts". The report screenshots the offending elements with their CLS contribution. Common Shopify culprits include announcement bars and free-shipping countdown banners that inject after page load, app-loaded review widgets, recommended-products carousels, and consent banners.
The usability impact compounds beyond pure metrics. A shopper who taps an Add to Cart button only to have an announcement bar shove the page down 60 pixels mid-tap ends up adding the wrong product to cart. CLS issues cause real friction even when they don't break the page outright.
Fix work belongs in the speed guide's layout stability section, which covers reserved space, skeleton loaders, and font-shift mitigation.
Issue 7: INP from JS-Heavy Interactions
INP () replaced FID as a Core Web Vital in March 2024. The good threshold is 200 ms or less at the 75th percentile of all user interactions (Google web.dev INP). Cutting INP from the poor band (>500 ms) into the good band (<200 ms) can lift engagement meaningfully. Published Google case studies show The Economic Times achieving roughly a 50% bounce-rate drop and 43% pageview lift after a ~4x INP improvement (web.dev INP case studies).
Detection runs in PageSpeed Insights field data. INP appears in the "Core Web Vitals Assessment" with a measured millisecond value. As a lab proxy, Lighthouse Total Blocking Time (TBT) above 300 ms suggests INP issues may surface in the field. Treat TBT as a warning signal, not as proof that field INP fails, since Lighthouse cannot fully simulate real user interactions. Across 1,533 audited Shopify stores, around 98% pass INP in field data, so INP problems are usually localized rather than systemic. When INP does fail, the cause typically traces to specific JS-heavy interactions.
The typical Shopify culprits include variant selectors that re-render the entire product gallery on click, cart drawers that load product cards via fetch on open, and search autocomplete overlays that query multiple sources synchronously. Each interaction does too much work on the main thread before responding visually.
Fix work belongs in the speed guide's JavaScript and interaction section, which covers debouncing, web workers, and event-handler optimization.
Issue 8: Slow Collection Pages and High TTFB
Shopify's Liquid template language allows loops over collections, products, variants, and metafields. Inefficient loops or app-injected database queries multiply server response time. The result is elevated TTFB (Time to First Byte), which delays everything downstream of it.
Detection runs in Chrome DevTools. Open the Network tab on a collection page, refresh, and look at the document request's "Waiting (TTFB)" time in the timing breakdown. Anything above 800 ms on a Shopify collection page flags Issue 8 as a slow-template signal. Compare against your homepage TTFB. Gaps above 300 ms between homepage and collection page point to template or app inefficiency on the collection template specifically.
The scale on Shopify can be meaningful. Across 225 audited Consumer Goods Shopify stores (EcomHint Consumer Goods benchmark), the median collection-page weight is roughly 4.8 MB, often combining a large product feed with a filter app and a recommendations app querying simultaneously. Even when total weight is acceptable, server-side query patterns can push TTFB over a second.
Fix work belongs in the speed guide's server-response section and Shopify's own Liquid documentation, which covers loop limits, caching patterns, and pagination.
What to Fix First
Issues with the largest expected impact get fixed first. Issue 1 (Hero Image LCP) and Issue 3 (Third-Party App Overhead) account for most of the visible speed gap on a typical Shopify store, so start there. Issue 4 (Render-Blocking Scripts) is close behind because GTM and chat widgets are nearly universal. Issue 2 (JS Bundle Weight) is foundational but harder to fix without theme work. Issues 5 through 8 are usually meaningful only when the first four are already addressed.
If your Core Web Vitals field data fails any of LCP, INP, or CLS, fix that one first regardless of where it sits in this list. Field-data failures cost the most because they reflect actual shopper experience.
Automated Detection
Walking 8 issues manually with PageSpeed Insights and Chrome DevTools takes around 90 minutes if you're thorough. If you want a Shopify-specific scan in under a minute, the free Shopify speed test checks against patterns observed across the 1,533-store EcomHint benchmark and surfaces the issues that match your store. For broader audit coverage that includes UX, SEO, trust, and CRO alongside performance, the automated Shopify store audit runs all dimensions and ranks issues by impact.
FAQ
How often should I run this performance audit?
Quarterly is the standard cadence for an active Shopify store. Re-run sooner whenever you install a new app, change theme, modify checkout settings, or see a conversion drop you can't explain. The 8 issues above are the most common regressions after theme or app changes, so post-change audits catch them while the root cause is still obvious.
Should I use PageSpeed Insights or Lighthouse?
PageSpeed Insights wraps Lighthouse and adds real CrUX field data for the URL. For a Shopify performance audit, PSI is the more useful tool because the field data shows what actual shoppers experience. Lighthouse is still helpful for ad-hoc lab tests on staging or for newly launched stores without enough field traffic to populate CrUX. Across 1,533 audited Shopify stores, the lab-versus-field gap on LCP can reach 85 percentage points, so trust field data first when the two disagree.
Mobile or desktop first?
Mobile first. Shopify traffic skews heavily mobile and Core Web Vitals use the mobile tab as the primary signal for rankings. Desktop matters but rarely fails the way mobile does. If your mobile field data passes, desktop almost always passes too.
How many issues are too many?
Finding 3 or 4 of these 8 issues on a single Shopify store is the norm, not the exception. Median Shopify stores fail on a combination of Issue 1 (hero image) and Issue 3 (app overhead) plus one or two of Issues 4 through 8. The number that should worry you is closer to 6 or 7 active issues, which usually points to a theme or app stack that needs structural rework rather than incremental fixes.
Do I need to fix all 8?
No. Fix the ones causing measurable harm. If your field-data CWVs already pass and your conversion rate is stable, polishing past 70 PageSpeed score has diminishing returns. The point of this audit is to find issues that show up in field data and correlate with measurable conversion impact, not to chase a perfect Lighthouse score.
Jakub is the founder of Ecomhint, an AI-powered ecommerce audit tool focused on UX and conversion optimization. He helps online stores identify friction points across product pages, cart, and checkout using CRO best practices and original research data.

