// Troubleshooting · Storefront
Why are your Shopify images not loading?
Last updated 28 September 2026.
Six causes, in order of likelihood: CDN propagation right after an upload, broken lazy-load JavaScript, an image-optimizer app conflict (or the URL rewrites it left behind), a deleted file still referenced, an ad-blocker or consent tool on the visitor's side, and a mobile-only rendering bug. One reload names yours: open the browser console (F12) → Network → filter Img → reload, and read the failing request. A 404 on cdn.shopify.com is a dead reference; a request that never fires is the lazy-loader; a third-party host is the optimizer or a blocker.
A broken product image doesn't stop a determined buyer the way a dead add-to-cart does — it does something quieter and almost as expensive: it makes the store look abandoned. Trust leaks. And because images often break for some pages, devices or visitors rather than all of them, the merchant is usually the last to see it.

Where an image request dies
Every image on your store passes through six stages, and each stage is one of the six causes. The theme's Liquid produces the URL (is it correct?); the lazy-load script swaps it in (did the swap fire?); an optimizer app may rewrite it (is the rewrite still valid?); the request reaches Shopify's CDN or the app's (does the file exist?); it passes the visitor's blocker or consent tool (is it allowed?); and the device renders it. The Network tab tells you which stage failed in a single reload.
Cause 1: CDN propagation after upload
Just uploaded or replaced an image and it won't show? Shopify serves images from its CDN, and fresh uploads can take a few minutes to propagate — while your browser may also be caching the old (missing) response. Fix: wait a few minutes, then hard-refresh (Ctrl/Cmd+Shift+R) and re-test in a private window before touching anything else.
Cause 2: broken lazy-load JavaScript
Most themes load images lazily — a placeholder sits in the markup and JavaScript swaps in the real image as you scroll. If any script error fires first (a theme edit, an app conflict), the swap never happens and you get grey boxes that never fill. Signature: images fine at the top of the page, missing below the fold; the console shows a red JavaScript error. Fix: find the erroring script (it's named in the console) — if it's an app's, disable that app embed; if it's the theme's, publish your last known-good theme copy.
Cause 3: image-optimizer app conflicts (and their ghosts)
Optimizer apps rewrite image URLs to serve compressed versions from their own CDN. Two failure modes: the app conflicts with the theme's lazy-loader (both fighting over the same src), or — nastier — you uninstalled the app and its URL rewrites remain, pointing at a service that no longer recognises your store. Fix: for conflicts, disable one of the two lazy-load layers; for ghosts, remove the app's leftover code (that's a leftover-code problem — our free scanner finds the residue).
Cause 4: renamed or deleted files still referenced
An image deleted from Files (or a product image removed) that's still referenced in a theme section, a page or hard-coded HTML returns 404 forever. Signature: the Network tab shows a 404 on a cdn.shopify.com URL. Fix: re-upload the file under the same name, or update the reference to the current file.
Cause 5: ad-blockers and consent tools
Some visitors' ad-blockers block third-party image hosts (common with images served via marketing or optimizer domains), and aggressive consent tools can hold back image scripts until acceptance. These customers see broken images while you see none. Fix: serve product imagery from Shopify's own CDN rather than third-party hosts, and test your consent tool's "reject all" path — the store should still show its products.
Cause 6: mobile-only failures
Lazy-load thresholds, responsive srcset bugs and app widgets can break images only on phones — where most stores' sessions live (check Sessions by device in your Shopify analytics for your own split). Fix: always test on a real phone over mobile data, not a resized desktop window; the phone's remote-debug console, or a simple screenshot comparison, shows what desktop testing hides. More in why is your store not working on mobile?
A broken image request has exactly six places to die — theme URL, lazy-load script, optimizer rewrite, CDN file, visitor's blocker, or device rendering — and the browser's Network tab tells you which one in a single reload.¶
The images that cost the most are the ones that break for other people: a blocker, a consent tool or a phone-only bug leaves the merchant's own screen perfect while the customer's shows grey boxes.¶
Frequently asked questions
Why are my Shopify images not loading?
Why do images load for me but not for customers?
Images broke after removing an optimizer app — why?
How do I catch broken images before customers do?
Keep reading: Leftover app code, explained · Not working on mobile? · The Watch check
// Found last, fixed in minutes
Is your store
actually okay?
Bilby visits your store like a customer and reports anything broken — images included — with screenshots. One free scan, no signup.
Thin or missing product content is the other half of this problem, and it is the half search engines and AI assistants see. Navaal: AI SEO, AEO & GEO audits a Shopify catalogue for it free, and writes what is missing for review.