Playbook · Shopify CDN product images broken / 404
Shopify CDN product images broken or 404 — image_url filters, theme, app rewrite, Cloudflare.
Written for a Shopify DTC owner whose product or collection images from cdn.shopify.com / files/ break, 404, or show empty thumbnails while the rest of the page still loads — bad image_url / image_tag filters, theme img src / srcset, an app rewriting CDN hosts, or Cloudflare proxy / Hotlink / Polish. DIY-first: prove the image URL in Network, fix filter / theme / rewrite / Cloudflare, hard-refresh. Distinct from Liquid error on product page, checkout blank / CDN error, theme editor publish failing, cart drawer not updating, and www redirect loop. No earnings claims, no invented case studies.
Nico at Latch AI Ops · Sep 8, 2026 · ~12 minute read
Buy the 72-hour install — $997Liquid errorCheckout blank / CDNMerchant FAQ
01
CDN product images broken / 404 — not liquid-error, checkout blank/CDN, theme-editor, cart-drawer, www-redirect.
Several products can look like “Shopify CDN is down.” They do not share a settings panel. This page is only when product / collection image requests to Shopify CDN fail or 404 while text, price, and add-to-cart still render. A red Liquid / theme error string on the PDP is liquid-error-on-product-page. Checkout that white-screens or fails with CDN / ERR_CONNECTION is checkout-blank-or-cdn-error. Theme editor Save / Publish that refuses is theme-editor-publish-failing. Cart drawer / AJAX cart not updating is cart-drawer-not-updating. www / non-www redirect loop is www-redirect-loop-shopify. This page is only: broken or 404 product images from Shopify CDN.
Six ordinary reasons CDN product images break: a bad image_url / image_tag size or crop filter, theme img src / srcset pointing at deleted media or the wrong object, an app rewriting CDN hosts or injecting broken lazy-load, Cloudflare proxy / Hotlink / Polish interfering with cdn.shopify.com or custom files/, media missing on that SKU in Admin while the template still prints a URL, or you are debugging Liquid error text, blank checkout CDN errors, theme editor publish, cart drawer, or www redirects instead. Walk them in that order. You already pay for Online Store. You do not need another seat to clear a 404 image.
02
Prove the broken CDN image URL in Network and open it alone.
Open the broken product or collection in a private window on the live domain. DevTools → Network → Img (or All). Reload. Find the failing request — usually cdn.shopify.com or a /cdn/shop/files/ path. Status 404 means the object is gone or the path/filter is wrong. Status 403 / blocked often means Hotlink, referrer policy, or a proxy rule. Status 200 with a tiny / empty body can still look broken in the gallery.
Paste the URL into a new tab alone. Compare Admin → Products → [SKU] → Media: is the image still attached? Does a fresh theme preview show it? Honest proof: if only product / collection images fail while the rest of the storefront loads, stay on this page. If the whole PDP prints Liquid error / theme error text, leave for liquid-error-on-product-page. If checkout itself is blank or ERR_CONNECTION to a CDN host, leave for checkout-blank-or-cdn-error. Do not mix those proofs.
03
Bad image_url / image_tag size, crop, or format filters.
Themes and snippets build CDN URLs with Liquid image_url / image_tag (and older img_url) filters — width, height, crop, format, pad. A typo, an unsupported size string, or a filter applied to a nil image object produces a URL that 404s or returns a broken asset while Admin Media still looks fine.
Fix: Online Store → Themes → … → Edit code. Open the product / card / gallery snippet named in the img request (or View Source on the broken img). Compare the rendered src to Shopify’s current image_url docs. Use a safe width (for example width: 800) without inventing crop tokens. Guard with {% if product.featured_image %} so nil media does not emit a junk path. Save on the Current / Published theme. Hard-refresh. If the page itself prints a Liquid error string instead of a broken img, that is liquid-error-on-product-page.
04
Theme img src / srcset pointing at deleted media or wrong object.
Hard-coded CDN URLs in sections, metafield image references that were deleted, or srcset pointing at variant images that no longer exist will 404 even when the product still has a featured image. Draft themes can look fine while Current still serves the old paths.
Fix: Themes → Customize → product / collection template on Current. Reconnect image blocks to product media / featured image. Remove hard-coded https://cdn.shopify.com/... strings from custom Liquid. Re-upload missing Media on the SKU if Admin shows none. Publish Current. If Save / Publish in the theme editor fails entirely, leave for theme-editor-publish-failing. Variant UI that never swaps the image without a 404 Network row is closer to variant-picker-not-updating.
05
App rewrite of CDN hosts or injected lazy-load breaking product images.
Image optimizers, lazy-load apps, page builders, and some SEO / CDN apps rewrite img src to their own host or inject data-src without a working fallback. After uninstall, leftover scripts still rewrite Shopify CDN URLs to dead endpoints — classic “thumbnails broke the day I removed the app.”
Fix: Themes → Customize → App embeds / app blocks on Current — disable image rewrite / optimizer embeds. Edit code and remove leftover scripts that replace cdn.shopify.com. Retest Network → Img. If the bug is only that an App embed never appears (no image 404), that is app-embed-not-loading. Cart AJAX that fails without broken product images is still cart-drawer-not-updating.
06
Cloudflare proxy, Hotlink Protection, or Polish mishandling Shopify CDN.
Shopify already serves media from its own CDN. Putting the shop apex or www behind Cloudflare orange-cloud with Hotlink Protection, Polish, Rocket Loader, or aggressive cache rules can block or mangle image requests — especially when a theme or app proxies files through your domain instead of cdn.shopify.com directly. Flexible SSL plus a second redirect layer can also look like “images will not load” when the browser is stuck in a loop.
Fix: Cloudflare → DNS — set the Shopify primary hostname to DNS-only (grey cloud) per Shopify’s custom-domain guidance, or exclude /cdn/* and image paths from Hotlink / Polish / Rocket Loader. Purge cache. Retest the img URL alone. Pure www / non-www ERR_TOO_MANY_REDIRECTS without image 404s is www-redirect-loop-shopify. Custom domain / SSL still pending is custom-domain-ssl-not-connecting.
07
You tested liquid-error, checkout blank/CDN, theme-editor, cart-drawer, or www-redirect instead.
Liquid error / theme error text on product or collection is liquid-error-on-product-page. Checkout blank page / CDN / ERR_CONNECTION is checkout-blank-or-cdn-error. Theme editor Save / Publish failing is theme-editor-publish-failing. Cart drawer / AJAX cart not updating is cart-drawer-not-updating. www / non-www redirect loop is www-redirect-loop-shopify.
The only honest test for this page: product or collection images from Shopify CDN break or 404 while the rest of the page loads. Capture the img URL, repair image_url filters / theme src / app rewrite / Cloudflare, publish Current, retest. Anything else is a different product.
08
When to stay DIY vs pay $997.
Stay DIY if you can spend one afternoon on the list above: prove the CDN img URL, fix image_url / image_tag filters, reconnect theme media sources, disable app rewrites, and stop confusing liquid-error / checkout blank-CDN / theme-editor / cart-drawer / www-redirect with broken product images. That is the whole playbook. No agency required. Short answers also live on the merchant FAQ. Related pages: liquid-error-on-product-page, checkout-blank-or-cdn-error, theme-editor-publish-failing, cart-drawer-not-updating, www-redirect-loop-shopify.
Pay for help when the work is not the broken thumbnail row — it is connecting the stack you already have so lead capture is not dying in DMs, storefront and checkout-ready exceptions land in a channel you already check, and the live store is one workflow instead of a spreadsheet plus a Slack bot you forgot. That is the Latch AI Ops install.
What $997 USD one-time buys: lead capture on the live store, ops alerts in a channel you already check, and a checkout-ready workflow. 72 hours after collaborator access, not after payment. One live Shopify store. Access plus a delivery thread. Store URL collected at checkout. Not a SaaS seat, not a theme rebuild retainer, not a conversion guarantee, not a brand or theme job.
Other shops’ public ranges, not testimonials: a checkout / ops install typically runs $500–$2,500. A full ops consulting block typically runs $2,000–$5,000. $997 is the cheap end of that work, sold as a 72-hour install of three systems — not as an earnings number or conversion-lift claim.
What it does not buy: more orders, recovered revenue, a forever CDN / image guarantee, or a case study. Latch AI Ops has not published customer proof because there are no customers yet. You are buying the install.
Checkout is on Whop. Operator is Nico. United States offer. You can revoke collaborator access after handoff. We do not take owner passwords.