Your Product Page's Slowest Element Is the Photo: Fixing LCP on Shopify
What LCP actually measures
Largest Contentful Paint measures how long it takes for the largest visible image or text block to appear, and on a Shopify product page that element is almost always the main product image. Google's Core Web Vitals guidance sets the threshold at 2.5 seconds or less for a good experience, 2.5 to 4.0 seconds as needs improvement, and over 4.0 seconds as poor, and the target applies at the 75th percentile of real visits, assessed separately for mobile and desktop. LCP is a ranking signal, and pages passing all three Core Web Vitals get a measurable ranking boost, but the ranking is the smaller reason to care. The conversion math is the bigger one: in Shopify's 2026 analysis of store performance, each additional 100 milliseconds of LCP was associated with roughly 3.5 percent lower conversion rates.
The number most stores quote is the lab score, and the lab score is not what customers feel. Lighthouse runs a simulated load on a simulated device. Field data comes from real loads on real phones on real networks, and it lives in Shopify's Web Performance reports and in the field-data section of PageSpeed Insights, which draws on the Chrome User Experience Report over a rolling 28 days. Start there. A store that optimizes for a Lighthouse score fixes the simulated load. A store that optimizes for field LCP fixes the load its customers actually experience. Your checkout conversion rate can look fine while revenue per session falls, and the same split applies to speed: the lab number looks fine while the field number bleeds.
The four sub-parts tell you where the time goes
Google breaks LCP into four sub-parts, and the slowest one tells you what to fix. Time to First Byte is the server response, typically 200 to 800 milliseconds on Shopify, and mostly controlled by Shopify's infrastructure. Resource load delay is the gap before the browser starts fetching the LCP image, which is where a slow theme or a render-blocking script hides. Resource load time is the download itself, which is where an oversized image hides. Element render delay is the wait after download, which is where a web font or a late layout shift hides. Measure the four parts in PageSpeed Insights diagnostics before you change anything, because the fix for a slow download is different from the fix for a late discovery.
The most common finding on a product page is that the LCP image is discovered late and downloaded large. The theme lazy-loads every image including the hero, which is a classic own-goal: lazy-loading the one image the metric measures delays the one paint that matters. The second most common finding is the image served at desktop size to a phone: a 2400 pixel hero downloaded by a phone that displays it at 390 pixels wide. Use Shopify's image transformation parameters and a real srcset so a phone downloads a phone-sized image, and reserve the space with width and height or an aspect ratio so the browser holds the slot. That last step is also the number one fix for CLS, which is the layout shift that follows when the image finally arrives.
The fixes, in order
First, stop lazy-loading the LCP image. Eager-load the first one or two images and lazy-load the rest. Second, preload the main product image, which tells the browser to fetch it before discovering it in the HTML, cutting LCP by 300 to 800 milliseconds. Third, size the image for the screen it is shown on and compress before uploading: tools like TinyPNG or Squoosh cut image size by 40 to 60 percent without visible quality loss, and Shopify's own guidance caps uploads at 2000 by 2000 pixels. Fourth, cut the app bloat, because a typical product page with reviews, upsell recommendations, analytics, and a chat widget loads 1.5 to 4 megabytes of JavaScript alone, and that JavaScript competes with the image for the same bandwidth and the same CPU.
What does not work is the generic checklist. Compressing images and minifying CSS with no LCP element identified and no threshold named is the speed advice that stops before it starts. The check that matters is the one you run tomorrow morning: open Shopify's Web Performance reports, look at LCP by page type and device, and find the product pages over 2.5 seconds. Fix the image on those pages first, then measure again in 28 days, because that is how long PageSpeed Insights field data takes to reflect a fix. Cutting checkout fields to eight works the same way: one measured change, one number that moves, and no checklist. A category page audit follows the same order: measure first, fix in impact order, and stop when the number is good enough.
Frequently asked questions
What is a good LCP for a Shopify product page?
2.5 seconds or less at the 75th percentile of real visits, separately for mobile and desktop. From 2.5 to 4.0 seconds is needs improvement, and over 4.0 seconds is poor. Most unoptimized stores score 3.0 to 6.0 seconds on mobile.
Why is my LCP worse on mobile than desktop?
LCP is typically 2 to 3 times worse on mobile because of slower CPUs and networks, and mobile is what Google measures for ranking. The same image that loads fast on a desktop connection is the bottleneck on a phone.
Should I lazy-load my product images?
Everything below the fold, yes. The main product image, never. Lazy-loading the LCP image delays the one paint the metric measures, and it is the most common own-goal on Shopify product pages.
How long until a speed fix shows up in the data?
PageSpeed Insights field data covers the past 28 days, so it can take time for a fix to be reflected. Shopify's own reports can lag up to 36 hours. Measure the fix in the lab the same day, and judge it in field data a month later.