EyeCaptain
    Improve LCP on Product Pages: Fix Images, Fonts and Scripts

    Improve LCP on Product Pages: Fix Images, Fonts and Scripts

    Learn how to improve LCP on a product page: find what slows Largest Contentful Paint, from hero images to fonts and sliders, and get under 2.5 seconds.

    Dimitris Andreadakis

    7 min read
    78 views
    improve LCP product pagelargest contentful paint optimizationLCP image fetchpriorityreduce LCP ecommercecore web vitals product page

    To improve LCP on a product page, make the main product image load first and fast: never lazy-load it, give it fetchpriority="high", serve a correctly sized modern format, and put it in the initial HTML instead of a JavaScript slider. Then remove render-blocking fonts and scripts until Largest Contentful Paint is 2.5 seconds or less.

    Largest Contentful Paint (LCP) measures when the biggest visible element in the viewport finishes rendering. On a product page that is almost always the main product photo, or occasionally the product title if the image is small. Google's Core Web Vitals guidance rates LCP of 2.5 seconds or less as good, over 4 seconds as poor, and assesses it at the 75th percentile of real page loads. Shoppers feel it as the moment the page looks ready.

    What is a good LCP score for a product page?

    A good LCP is 2.5 seconds or less for at least 75 percent of visits, measured separately on mobile and desktop, according to Google's Core Web Vitals thresholds. Between 2.5 and 4 seconds "needs improvement". Above 4 seconds is "poor".

    Two details matter for stores. First, the score that counts in Google Search Console comes from real Chrome users (field data), not from a single lab test. A page can pass in Lighthouse on fast office Wi-Fi and fail for shoppers on mobile networks. Second, product page templates share one LCP problem across thousands of URLs, so one template fix can move the whole group.

    What usually makes LCP slow on a product page?

    On product pages, slow LCP usually comes from five causes. Most stores have two or three at once.

    CauseHow to spot itFix
    Main image lazy-loadedloading="lazy" on the first gallery imageRemove lazy loading from the first image only
    Image discovered lateImage injected by JavaScript or set as a CSS backgroundUse a plain img tag in the server HTML, or preload it
    Oversized image fileFull-resolution JPEG or PNG sent to phonesUse srcset and sizes, WebP or AVIF, sensible compression
    Slider or gallery scriptImage hidden until a carousel library initializesRender the first slide in HTML, visible by default
    Render-blocking CSS, fonts and third-party scriptsLong gap between image download and paintDefer non-critical scripts, inline critical CSS, fix font loading

    Slow server response also hurts, especially on uncached pages with heavy apps or plugins. On hosted platforms you have less control over the server, so the four front-end causes are usually where the gains are.

    EyeCaptain
    The hero image gets the early path. Do not lazy-load the LCP product image.

    How do you find which element is the LCP?

    Run the product page through PageSpeed Insights. It shows field data from the Chrome User Experience Report when your page has enough traffic, plus a lab test that names the LCP element. Chrome DevTools' Performance panel shows the same element and splits LCP into four parts, described in Google's web.dev documentation:

    • Time to first byte: how long the server takes to start sending HTML.
    • Resource load delay: the gap between the HTML arriving and the browser starting to download the image.
    • Resource load duration: how long the image download takes.
    • Element render delay: the gap between the image arriving and it appearing on screen.

    This breakdown tells you which fix to try first. A large load delay points to discovery problems. A large load duration points to file size. A large render delay points to blocking scripts, fonts or sliders.

    How do you make the hero product image load faster?

    Make the browser find the image immediately, download it early, and download as few bytes as possible. Apply these in order:

    1. Remove lazy loading from the main image. Many themes set loading="lazy" on every gallery image. Keep it on the thumbnails and later slides, not the first one.
    2. Add fetchpriority="high" to the main image tag. This tells the browser to download it ahead of less important resources.
    3. Put the image in the server-rendered HTML as a normal img element. If the theme sets it as a CSS background or inserts it with JavaScript, add a preload link in the head for that exact image URL.
    4. Serve the right size. Use srcset and sizes so a phone gets a phone-sized file. Most platform image CDNs can resize through URL parameters.
    5. Use a modern format. WebP and AVIF are usually much smaller than JPEG at similar quality, and most current browsers support them.
    6. Serve images from your own domain or CDN where possible, to avoid an extra connection to a third-party host. If you cannot, add a preconnect hint.
    7. Set width and height attributes so the space is reserved. This mainly helps layout stability, covered in our CLS guide.
    EyeCaptain
    Give the hero image an early route. Identify the LCP element on the product page. Make its URL discoverable in the initial…

    Why do product image sliders hurt LCP?

    Many carousel libraries hide all slides until their JavaScript downloads, runs and calculates the layout. The image may be downloaded already, but it cannot paint until the script finishes, which shows up as element render delay.

    The fix is to make the first slide work without the script: visible by default in the HTML and CSS, with the carousel enhancing it once it loads. Avoid sliders that fade in the first image with an animation. Also question whether the gallery needs a heavy library at all. A simple main image with clickable thumbnails often does the job with less code, and on mobile a native horizontal scroll with CSS scroll snap can replace a script entirely.

    EyeCaptainEyeCaptain
    -35%
    Conversions Booster

    Your checkout is leaking revenue

    35% of cart abandonments are caused by fixable UX issues. Our audit reveals trust gaps, hidden costs, and checkout friction points.

    Complex checkout

    How do web fonts affect LCP?

    When the LCP element is text, such as a long product title on a page with a small image, a web font can hold back the paint. If the font uses font-display: block, browsers may hide the text while the font downloads.

    Use font-display: swap or optional so text appears in a fallback font straight away. Preload only the one or two font files used above the fold, self-host them where you can, and subset them to the characters you need. Limit font weights: each extra weight is another file competing with your product image for bandwidth.

    EyeCaptain
    Separate the critical path. Defer work that is not needed for the first screen.

    Which third-party scripts slow down LCP?

    Any script that blocks rendering or competes for bandwidth early can delay LCP. On product pages the usual suspects are:

    • A/B testing tools with anti-flicker snippets that hide the whole page until the test script loads.
    • Review widgets, upsell apps and size-guide apps that load synchronously in the head.
    • Chat widgets and social proof popups.
    • Tag managers loading many marketing tags at once.
    • Apps left installed after you stopped using them, which still inject code.

    Load these with async or defer, or after the page has rendered. Remove dead apps. If you run experiments, check how your testing tool loads and keep any page-hiding timeout short, as covered in our A/B testing guide. Scripts also hurt responsiveness after load, which is a separate metric covered in our INP guide.

    What does an LCP fix look like on a real product page?

    Take a hypothetical furniture store whose product pages show a sofa in a six-image gallery. PageSpeed Insights on mobile names the first gallery image as the LCP element and shows a slow result. The breakdown shows a long resource load delay and a long render delay.

    Inspection finds the cause: the theme applies loading="lazy" to all gallery images, the gallery library hides slides until it initializes, the image is a large JPEG sent at desktop width to phones, and a review app plus an A/B testing snippet load in the head. The fixes: remove lazy loading and add fetchpriority="high" to the first image, render the first slide visible in HTML, serve WebP through srcset, and defer the review app. The page now paints the sofa as soon as its smaller file arrives. The team then confirms the change in field data over the following weeks.

    Key takeaways

    • Google rates LCP of 2.5 seconds or less as good, measured at the 75th percentile of real visits.
    • On product pages the LCP element is usually the main product image, so start there.
    • Never lazy-load the first image; give it fetchpriority="high" and put it in the server HTML.
    • Make the first slider image visible without JavaScript, and fix font-display for text LCP.
    • Defer third-party scripts and remove unused apps.

    Speed is one input to conversion; layout and clarity are others. A free CRO audit on EyeCaptain reviews one product page in a real browser on desktop and mobile. For the technical side, see our technical analysis page.

    EyeCaptain
    A practical LCP investigation. Find the actual large element before changing priorities.

    Frequently asked questions

    Why is my LCP good in Lighthouse but poor in Search Console?

    Lighthouse runs one lab test on a simulated device and network. Search Console uses field data from real Chrome users over the previous 28 days, assessed at the 75th percentile. Real shoppers use slower phones and networks, arrive with cold caches and trigger personalized scripts. Trust field data for the score that counts, and use lab tests to debug causes.

    Should I preload the product image?

    Preload helps when the browser cannot discover the image early, for example when it is set as a CSS background or inserted by JavaScript. If the image is already a normal img tag in the HTML, fetchpriority="high" is usually enough. Preload only the one image that is the LCP element, because preloading many resources makes them compete with each other.

    Does a video on a product page affect LCP?

    It can. For video elements, LCP counts the poster image or the first displayed frame. A large autoplay video above the fold may become the LCP element and load slowly. Use a lightweight, optimized poster image, avoid autoplaying heavy files at the top of the page, and consider placing video lower in the gallery.

    How long until LCP fixes show in Search Console?

    Search Console's Core Web Vitals report uses a rolling 28-day window of real-user data, so improvements appear gradually over several weeks. Use the "Validate fix" option after deploying changes to start monitoring. PageSpeed Insights lab results update immediately, which helps confirm the fix works technically before field data catches up.

    Enjoyed this article?

    One short email a week with practical CRO and UX tips

    No spam. Unsubscribe anytime.

    Find what stops your visitors from converting

    EyeCaptain is an AI-powered CRO & UX audit tool that automatically scans your pages, identifies UX issues, and gives you actionable optimization suggestions to increase conversions. Try it for free, no card, no commitment.

    Free CRO Audit
    Share this article
    LinkedIn X

    About the author

    Founder of EyeCaptain. Writes about conversion rate optimization, UX analysis and the neuromarketing behind pages that actually sell.

    More articles by Dimitris Andreadakis