A Shopify store can look finished and still fail Core Web Vitals. The usual culprits are not mysterious: an oversized hero image, a theme app extension that injects three scripts on every page, a product gallery that downloads every angle before the first paint, and click handlers that make INP fall apart on mobile.
We set LCP, INP and CLS budgets at design time, not after launch. For most D2C storefronts that means: LCP under 2.5s on a mid-range Android over 4G for the product and collection templates, INP that stays responsive when a shopper filters or adds to cart, and CLS that does not shove the buy button after the review widget loads.
Fixes that actually hold: serve the LCP image yourself (correct size, fetchpriority, no lazy-load on the hero), defer non-critical apps, replace auto-playing slideshows on mobile, and stop bundling the entire catalog’s metafields into the first HTML payload. Hydrogen or a headless storefront is an option when the Liquid theme cannot carry the experience — it is not the first lever.
INP is where many “optimized” themes still fail. Heavy main-thread work on add-to-cart, variant change and predictive search is the usual story. We profile the real interaction, then split the work: optimistic UI, smaller event handlers, fewer third-party pixels on the critical path.
Do not paste an industry “X% conversion lift per 100ms” onto your board as a guarantee. Use your own traffic, conversion rate and average order value in the estimator, then treat the output as a planning number — not a contractual SLA. The engineering job is to make speed a measured feature of the store, with a before/after on the templates that earn the money.
