Published: June 24, 2026
Nuvemshop (known as Tiendanube in Spanish-speaking Latin America) is the leading ecommerce platform in the region, powering over 180,000 online stores. With merchants customizing their storefronts through multiple themes and dynamic content arrangements, ensuring fast page loads across this diversity presents unique technical challenges.
- Largest Contentful Paint (LCP) health improved 68%, from 57% to 96% in one year, reflecting a major shift in how stores render content at the top of the viewport for real users.
- Core Web Vitals pass rate jumped from 48% to 72%, meaning nearly 3 out of 4 stores now meet Google's baseline performance threshold.
- Shopping engagement improved measurably: Analyzing the same cohort of
Brazilian stores active in Jan 2025 and Jan 2026, mobile visitors from
Google organic search showed:
- 8.9% increase in conversion rate (session-to-paid-order)
- 8.4% increase in cart engagement rate (session-to-cart)
- Mobile drove the biggest gains, consistent with where LCP improvements were most significant.
These results align with Deloitte research commissioned by Google (over 30 million sessions across 37 brands), which found that a 0.1s improvement in load speed can increase retail conversion rates by 8.4%, validating the direction of our investments.
The Challenge: LCP detection in dynamic ecommerce layouts
At the start of 2025, only 48% of our stores passed Core Web Vitals thresholds, and 57% had healthy LCP scores. Our initial hypothesis was image weight or server latency. We were wrong.
Through PageSpeed Insights analysis across thousands of stores, we discovered that our platform allows merchants to arrange homepage sections dynamically: carousels, banners, product grids, and custom modules can appear in any order.
This flexibility introduced an unforeseen issue: the right element was not always being identified as LCP. In stores with carousels, which represented 85% of our storefronts, a banner further down in the viewport was sometimes being marked as LCP instead of the first carousel image, depending on how the page rendered across different screens and devices. This meant our optimization efforts weren't having the intended effect: We were optimizing elements that weren't actually LCP elements.
Unlike typical SaaS platforms, we couldn't just fix the homepage. We needed a solution that worked across every possible theme configuration, section arrangement, and merchant customization, without breaking existing stores or limiting creative freedom.
How dynamic layouts affect LCP element selection
Through PageSpeed Insights analysis and real-user monitoring, we discovered that CSS transitions on carousels and banners were delayed when elements became visible to the browser's LCP detection algorithm. Even though users perceived the carousel as loading first, the browser sometimes marked a banner in the second section as the LCP element—because that element's visibility wasn't delayed by transition effects.
We identified three root causes:
- CSS transitions were delayed when elements were considered visible, pushing LCP detection to the wrong frame.
- Lazy loading was applied to images at the top of the viewport that needed to load immediately.
- Missing priority signals meant the most important images weren't being loaded first.
We also found that a significant portion of LCP measurements came from category and product pages, not just homepages, meaning our fixes needed to apply consistently across all high-traffic page types.
Implementation: fixing the three root causes at scale
With the causes identified, the fixes were straightforward. We applied them consistently across all core themes and page types, but each required careful scoping to avoid creating new problems.
- Removed CSS transitions for first-position sections. Sections that appear first on the page now render immediately, ensuring the browser detects them as LCP candidates without artificial delays.
Removed lazy loading from images at the top of the viewport. For images in the first section, we conditionally remove
loading="lazy"to eliminate resource load delay. We were careful to scope this only to the first image in first-position sections:<!-- Before --> <img src="slide-1.webp" loading="lazy" alt="Featured product"> <!-- After --> <img src="slide-1.webp" alt="Featured product">Added explicit priority signals. By adding
fetchpriority="high", we tell the browser's preload scanner that the LCP image is a top priority resource, letting it be discovered and downloaded sooner, before layout and rendering finish. We added validation logic to ensure priority signals only apply when the element is actually in a position where it could be the LCP candidate: Addingfetchpriority="high"to too many images would be counterproductive, since if everything is high priority, nothing is.<!-- Before --> <img src="slide-1.webp" alt="Featured product"> <!-- After --> <img src="slide-1.webp" fetchpriority="high" alt="Featured product">Reduced latency through edge caching. Caching is effective for reducing load times, but in ecommerce, it carries a real risk: Serving stale pricing and inventory data directly affects customer trust and revenue. We approached this carefully by monitoring business metrics alongside performance data, maximizing cache hit rates while ensuring we never cached content that could harm the merchant or buyer experience.
Impact and results: From 57% to 96% LCP improvement
| Metric (Jan 2025 to Jan 2026) | Relative improvement |
|---|---|
| LCP (good) | +68% (57% to 96%) |
| Core Web Vitals (pass rate) | +50% (48% to 72%) |
| Conversion rate (session to paid order) — mobile Google organic | +8.9% |
| Cart engagement (session to cart) — mobile Google organic | +8.4% |
These improvements positioned Nuvemshop and Tiendanube as the #1 performance-ranked ecommerce platform in Brazil, Argentina, and Mexico.
Key takeaways and post-mortem reflections
Nuvemshop's highly customizable architecture meant we couldn't rely on standard optimization playbooks. The real problem wasn't image weight or server latency: It was that browsers were selecting unexpected elements as LCP due to CSS transitions, missing priority signals, and lazy loading applied to images at the top of the viewport.
The fix was straightforward once we understood the root causes: Remove transitions from first-position sections, remove lazy loading from images at the top of the viewport, and add explicit priority signals. We applied this consistently across all core themes, page types, and the over 180,000 stores on our platform.
The results speak for themselves: LCP pass rates went from 57% to 96%, overall Core Web Vitals pass rates jumped from 48% to 72%, and merchants saw measurable gains: An 8.9% increase, in conversion rate and a 8.4% increase in cart engagement on mobile. Fast storefronts aren't just a technical achievement, they directly drive merchant success.