Playbook · Shopify PageSpeed / LCP poor on mobile

Shopify PageSpeed / LCP poor on mobile — theme JS, apps, image sizes, critical CSS.

Written for a Shopify DTC owner whose PageSpeed Insights or Core Web Vitals show poor LCP on mobile — the hero paints late, main-thread JS stalls, app scripts stack, or the LCP image is far too large — while the store still loads and sells. DIY-first: prove the LCP element, cut theme / app JS, fix image sizes and critical CSS, re-run mobile PSI. Distinct from CDN product images not loading, custom fonts / @font-face not loading, Liquid error on product page, cart drawer not updating, and app embed not loading. No earnings claims, no invented case studies.

Nico at Latch AI Ops · Sep 8, 2026 · ~12 minute read

Buy the 72-hour install — $997CDN imagesCustom fontsMerchant FAQ

01

PageSpeed / LCP poor on mobile — not CDN images, custom fonts, liquid-error, cart-drawer, app-embed.

Several products can look like “my store is slow.” They do not share a settings panel. This page is only when PageSpeed / Largest Contentful Paint is poor on mobile — lab or field LCP red / needs improvement — while images, fonts, and Liquid still resolve. Broken product / collection images from Shopify CDN are cdn-shopify-images-not-loading. Custom fonts / @font-face failing is custom-fonts-not-loading-shopify. A red Liquid / theme error string on the PDP is liquid-error-on-product-page. Cart drawer / AJAX cart not updating is cart-drawer-not-updating. App embeds that never appear are app-embed-not-loading. This page is only: PageSpeed / LCP poor on mobile.

Six ordinary reasons mobile LCP stays poor: theme JavaScript blocking paint or monopolizing the main thread, too many app scripts / App embeds on every template, an oversized or unprioritized LCP image, missing or bloated critical CSS, third-party pixels firing before first paint, or you are debugging CDN image 404s, font CORS, Liquid errors, cart-drawer bugs, or missing app embeds instead. Walk them in that order. You already pay for Online Store. You do not need another seat to read a PageSpeed report.

02

Prove LCP element, URL, and lab vs field on mobile.

Open PageSpeed Insights on the live homepage and one busy product URL. Force mobile. Read LCP time, the LCP element (often a hero image, H1, or slideshow slide), and Opportunities / Diagnostics for render-blocking resources, unused JavaScript, and image delivery. Field data (CrUX) and lab data can disagree — treat field as the score that matters for Search, lab as the debug surface.

DevTools → Performance: record a mobile reload. Mark LCP. Network: which JS / CSS / images precede that paint. Honest proof: if images 404 from CDN, leave for cdn-shopify-images-not-loading. If fonts fail CORS while LCP is fine, leave for custom-fonts-not-loading-shopify. If the PDP prints Liquid error text, leave for liquid-error-on-product-page. Do not mix those proofs with a slow-but-rendering LCP.

03

Theme JavaScript: render-blocking bundles, unused sections, main-thread work.

Many Shopify themes ship a large global JS bundle that parses on every page — slideshows, megamenus, quick-view, animations — even when the template does not use them. Long tasks after load delay LCP when the LCP element waits on script-driven class swaps or lazy-init heroes.

Fix: Online Store → Themes → … → Edit code on Current. Inventory theme.js / section JS loaded in theme.liquid / {% javascript %}. Defer non-critical scripts (defer / dynamic import). Disable unused sections on the homepage template. Prefer theme settings that turn off unused features over shipping dead code. Publish Current. Hard-refresh and re-run mobile PSI. Cart drawer that fails to update after add-to-cart is a behavior bug on cart-drawer-not-updating, not this LCP page.

04

App scripts / App embeds stacking on every page.

Reviews, upsells, chat, wishlists, popups, and pixels often load via App embeds or script tags on every template. Each adds network + main-thread cost before or around LCP. Ten “small” apps are not small on a mid-range Android phone.

Fix: Themes → Customize → App embeds on Current. Turn off embeds you do not need on the homepage / PDP. Prefer loading marketing scripts after interaction or after load when the vendor allows. Remove abandoned apps from the store. Retest mobile PSI after each change so you know which embed hurt LCP. If an embed never appears at all (toggle / OS 2.0 / conflict), that is app-embed-not-loading— different from an embed that loads and slows LCP.

05

Oversized LCP images, missing sizes / srcset / fetchpriority.

When the LCP element is an image, mobile often downloads a desktop-width hero. Missing sizes / srcset, wrong image_url width, or no fetchpriority="high" on the LCP image delays paint. Lazy-loading the LCP image is a classic self-own.

Fix: Themes → Edit code / Customize on Current. For the LCP image use Shopify image_url / image_tag with mobile-sized widths, a correct sizes attribute, and fetchpriority high — do not lazy-load the LCP candidate. Compress the source upload. Hard-refresh. Broken / 404 CDN URLs (image never loads) are cdn-shopify-images-not-loading. This page is when the image loads but is too heavy or too late for mobile LCP.

06

Missing or bloated critical CSS above the fold.

Render-blocking CSS that loads the entire theme stylesheet before first paint pushes LCP out. Extra CSS from apps, font CSS linked without font-display, or huge unused rulesets compound the problem on mobile CPU.

Fix: keep above-the-fold CSS lean — theme critical CSS / section CSS patterns where the theme supports them. Defer non-critical stylesheets. Avoid shipping unused app CSS on the homepage. Fonts that fail CORS while CSS waits are a different product: custom-fonts-not-loading-shopify. Re-run mobile PSI after each CSS change; watch “Eliminate render-blocking resources.”

07

You tested CDN images, custom fonts, liquid-error, cart-drawer, or app-embed instead.

CDN product images broken or 404 is cdn-shopify-images-not-loading. Custom fonts / @font-face not loading is custom-fonts-not-loading-shopify. Liquid error / theme error text is liquid-error-on-product-page. Cart drawer / AJAX cart not updating is cart-drawer-not-updating. App embed never appearing is app-embed-not-loading.

The only honest test for this page: mobile PageSpeed / LCP is poor while the page still renders — theme JS, app scripts, image sizes, or critical CSS. Capture the LCP element, repair those four, publish Current, retest mobile PSI. 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 mobile LCP, cut theme / app JS, size the LCP image correctly, lean critical CSS, and stop confusing CDN images / custom fonts / liquid-error / cart-drawer / app-embed with a slow paint. That is the whole playbook. No agency required. Short answers also live on the merchant FAQ. Related pages: cdn-shopify-images-not-loading, custom-fonts-not-loading-shopify, liquid-error-on-product-page, cart-drawer-not-updating, app-embed-not-loading.

Pay for help when the work is not the LCP 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 PageSpeed agency 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 PageSpeed / LCP 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.