After implementing CDN, LCP actually worsens, typically due to resource distribution strategies or configuration issues. Many websites still load LCP elements (such as above-the-fold hero images, Hero Banners) from the origin server after integrating CDN, or fail to enable HTTP/2, Brotli compression, and cache warming, causing requests to increase by 100–400ms. In real-world cases, unoptimized CDN can push LCP from 2.1s to over 3.0s.
Solutions include caching LCP images to CDN edge nodes, enabling preload, optimizing DNS resolution (reducing approximately 50–120ms), and avoiding cross-region node back-to-origin, thereby consistently keeping LCP within Google’s recommended 2.5s threshold.

Table of Contens
ToggleCache LCP Images to CDN Edge Nodes
When users open a page, LCP is often the above-the-fold hero image. If this image is already cached in the CDN node nearest to the user, the request typically takes only one short hop; if there’s a cache miss, it requires another trip to the origin, adding one round-trip to the origin server and origin processing time. For cross-continental visits, this step commonly adds 200–800 milliseconds; on 4G networks or with cold cache scenarios, LCP can easily drag from 2.3 seconds to over 3 seconds. Google still uses 2.5 seconds as the good LCP target.
Three Types of Configuration Issues
Placing LCP images under the CDN domain doesn’t guarantee edge nodes will retain them. Cloudflare’s default behavior first references the cache headers returned by the origin server; without separately setting Edge Cache TTL, whether edge cache retains the resource and for how long depends on Cache-Control and Expires. The result users see is straightforward: the same above-the-fold image loads as 1 local cache hit in the morning, but may have expired by afternoon, requiring another origin trip. The good LCP threshold remains 2.5 seconds, measured against whether 75% of page visits meet the target; adding 300–700 milliseconds can drop the page from “good” to “needs improvement.”
Start by examining cache headers and edge TTL. If the origin server returns max-age=60 for images, edge nodes will likely treat them as short cache objects for only about 60 seconds; above-the-fold images may expire every minute. For pages with low traffic, early visitors often receive cold cache responses. Event pages, campaign pages, and registration pages are most common: for the first 10–30 minutes after launch, traffic isn’t dense enough, many PoP nodes haven’t warmed up their cache, and European, North American, and Australian visitors will sequentially trigger first-time origin fetches. Cloudflare also provides separate Edge Cache TTL rules; documentation examples include configurations that keep resources in edge cache for 1 day; without this step, the edge layer typically just “follows the origin’s lead.”
By this point, the issue has shifted from “whether CDN is present” to “how long CDN caches, and which nodes have stable cache.” A more common layer involves URLs themselves fragmenting the cache. Business side considers it the same Hero image, but CDN side sees potentially 4, 8, or 16 different objects:
-
/hero.avif?w=1280 -
/hero.avif?w=1280&utm=email -
/hero.avif?w=1280&ref=ad-7 -
/hero.avif?w=1280&session=8f3...
As long as query parameters enter the cache key, edge nodes build separate cache for each version. When users arrive from email, ads, or organic search, although they see the same above-the-fold area, different URLs may be involved behind the scenes, fragmenting cache hit rates. Cloudflare’s cache configuration documentation specifically provides custom cache keys and cache rules to solve this kind of “same resource, different key” situation.
After URLs are fragmented, users experience very specific differences, easily misdiagnosed as “random network slowness.” The following three phenomena are common:
-
Same landing page, desktop LCP 2.2 seconds, mobile ad traffic becomes 3.0 seconds
-
Homepage is stable, entry with campaign parameter is slower by 400–900 milliseconds
-
A/B test only changes copy, image file unchanged, above-the-fold image still back-to-origin
-
Returning users are fast, new visitors are slow, difference commonly 0.3–1.0 seconds
These differences don’t average out, because Chrome records actual visit data, and LCP thresholds look at the 75th percentile; as long as a batch of traffic sources consistently hit poor performance, reports will stay chronically elevated.
Going deeper, the third type of problem isn’t “cache not hit” but “discovered too late.” Even if images are already at edge nodes, browsers may miss the above-the-fold timing because they discover the image late. Chrome’s LCP breakdown explicitly includes resource discovery and resource loading phases; if LCP images are written in CSS background, browsers typically must first fetch CSS, parse CSS, then know to request the image. If images are inserted into DOM after script execution, the request timing shifts even further back. So what users see is: HTML has arrived, text is already there, but the above-the-fold hero image remains empty for 200–600 milliseconds.
At this stage, problematic implementations typically concentrate in these categories:
-
Above-the-fold image implemented as CSS
background-image -
Carousel component loads script first, first image inserted by JS
-
Responsive images exist, but the first image that will actually display isn’t preloaded
-
<img>lacksfetchpriority="high", browser processes at default priority -
Simultaneously preloading 5–10 resources, resulting in none being early enough
MDN’s explanation offetchpriorityis clear: it’s only a priority hint, doesn’t guarantee absolute ordering, but allows browsers to process that image earlier. web.dev also notes that preloading can indeed improve LCP image timing, but preloading too many resources dilutes the priority effect.
Viewing these three types of problems in a single chain makes it easier to understand why users feel “CDN is already in place, but page is still slow.” A real visit often unfolds like this: browser first receives HTML, parses above-the-fold structure in 100–300 milliseconds; if the hero image is hidden behind CSS or JS, waits an additional 1 CSS request or 1 JS initialization; browser finally discovers the image URL, but URL has extra parameters, doesn’t hit existing edge cache; CDN node back-to-origin, plus origin processing time, adds another 200–800 milliseconds; finally image begins downloading and decoding. Each step individually isn’t dramatic, but combined, LCP easily adds 0.6–1.4 seconds.
From an implementation perspective, the troubleshooting sequence can be written more specifically in the body, so readers can immediately check against their own sites:
-
Check response headers: above-the-fold image
Cache-Controlis 60 seconds, 5 minutes, or 1 day or more -
Check edge policy: is Edge Cache TTL separately set for Hero images
-
Check cache keys: do marketing parameters, session parameters enter the key
-
Check discovery timing: is above-the-fold image a native HTML
<img>or late-inserted by script -
Check priority: is
fetchpriority="high"added to above-the-fold image -
Check preloading: only preloading 1 image that will display above the fold, not a whole image gallery
All these check items can be cross-referenced with publicly available documentation on behavior, not guesswork.
First visit from London, above-the-fold image URL with ad parameters, edge MISS, back-to-origin to US East Coast, LCP reaches 3.1 seconds; second visit from same region, parameters cleaned up, edge HIT, browser immediately discovers <img> in HTML, LCP returns to 2.2 seconds. Content of both visits is almost identical, the difference lies in cache headers, cache keys, and discovery timing.
Usually seeing this comparison immediately clarifies: the problem isn’t “image format not switched to WebP/AVIF” but how many steps in the request path are being added. Google’s public guidance still focuses on pushing LCP to 2.5 seconds or less, and web.dev also mentions that 40% of sites still don’t meet recommended thresholds, making LCP the most challenging CWV to handle.
Going one layer deeper, file size also makes the first three types of problems more pronounced. Even if images hit edge cache, if above-the-fold actual delivery is 700 KB, 1.2 MB, downloading and decoding on mobile networks will still extend LCP; but for the same sized file, the difference between HIT and MISS scenarios is even greater for users, because MISS first adds an origin trip, then begins file transfer. web.dev’s responsive images documentation repeatedly emphasizes that browsers should receive images “suitable for the current device,” not always serving desktop-sized images; otherwise, downloading 1600 px images on a phone 390 px wide inherently increases above-the-fold burden.
Writing到这里, you can already see a complete logic chain: edge TTL too short, nodes can’t retain images; URL too fragmented, same image scattered into multiple copies; browser discovers late, cache hit but still can’t help. As long as any two of these overlap, LCP adding over 500 milliseconds is very common; when all three exist, page dropping from 2.3 seconds to 3.3 seconds is not an exaggeration.
Above-the-Fold Hero Image迟迟没出来
Users don’t distinguish between “edge miss” or “back-to-origin taking extra route.” Users only see the above-the-fold hero image arriving late by 300ms, 600ms, or 1 second. LCP’s good target remains under 2.5 seconds, measured against the 75th percentile of page visits; if a group of users is consistently slow, reports will stay chronically elevated. Google’s public documentation has always evaluated on this basis.
First-time visits most amplify the problem. CDN nodes don’t have that Hero image locally yet, so after the request reaches the node, it must fetch the file from the origin server again. If the origin server is in Virginia and the user is in Frankfurt or Sydney, what’s added isn’t a local read but a cross-region network round-trip, plus origin processing time. Cloudflare’s documentation is clear: by default it first follows origin cache headers; without proper cache conditions or separate Edge TTL, resources may continue back-to-origin.
Slow first-time visits aren’t just about “image appearing late.” More commonly: HTML arrives first, title displays first, above-the-fold image area empty for 0.4–1.2 seconds, users may mistakenly think the page hasn’t finished loading. Chrome’s LCP breakdown divides this into resource discovery, resource request, resource completion, and element rendering phases; whichever phase is late, LCP follows suit.
-
New visitor accessing ad page, above-the-fold image not yet cached in node, request path adds 1 origin round-trip
-
In the first 10–30 minutes after traffic begins, many PoPs are still in cold cache state
-
Same page might be 2.3 seconds in local office network, easily becomes 3 seconds or more with cross-continental access
-
User refresh makes second load faster, doesn’t mean the first-time problem doesn’t exist; CrUX and real user metrics still record the first visit
-
If above-the-fold image file is 500 KB, 900 KB, in MISS scenarios download time gets stacked on top
-
When edge node cache hits are unstable, same URL may be fast in the morning, slow in the afternoon, because it expired and back-to-origin again
Reading到这里, the chain problem is already clear: first-time visits are slower, not because of the word “first-time” itself, but because the cache hasn’t been prepared at the node nearest to the user yet. Going one step further, the farther from the origin server, the more easily differences are noticed. Browser first connects to the nearest CDN node, which seems like “globally distributed” already; but as long as that image isn’t at the node locally, the node must still fetch the file from the origin. User only initiated 1 request, but what actually happened behind the scenes was 2 network transfers.
During cross-region access, the extra hundreds of milliseconds don’t average out. LCP only cares about when the largest above-the-fold content finishes rendering. For product detail pages, news homepages, and SaaS landing pages, this element is usually the hero image. If that image arrives 400 milliseconds late, LCP will also be approximately 400 milliseconds late. Google’s documentation on optimizing LCP also focuses on two requests: the initial HTML and the LCP resource itself.
-
User in London accessing US East Coast origin server, MISS adds an extra transoceanic round-trip compared to local HIT
-
User in Melbourne opening European site, when node doesn’t have image, extra wait is often more noticeable than same-continent access
-
Among the same batch of pages, North American users’ LCP 2.4s, European users’ LCP 2.8s, Southeast Asian users’ LCP 3.2s
-
Origin server location determines baseline, edge distribution scope determines user experience gap
-
Cloudflare’s documentation provides a Cache Status header explanation to determine whether each request is a HIT or MISS; if the percentage of MISS is high, first investigate whether cache keys and TTL settings are correct
After understanding this chain, the optimization direction becomes clear. The goal isn’t “using CDN” but “making CDN effective for LCP resources.” For above-the-fold images, at minimum: response headers set appropriate Cache-Control duration, separate Edge Cache TTL rules configured for CDN layer, cache key ignores marketing parameters, image directly referenced in HTML, fetchpriority="high" set, and file size appropriate for target device.
These don’t all need to be implemented simultaneously, but each addresses a specific weak point in the chain. If the edge layer can retain the image, the cross-region back-to-origin step can be avoided; if cache keys ignore parameters, the same image won’t be fragmented across different versions; if discovery timing is optimized, the browser won’t wait extra time to find the image after HTML parsing is complete. Each improvement can save 100–300ms; with all three combined, it’s possible to bring LCP from 3.0+ seconds down to 2.3 seconds or less.
From a diagnostic perspective, Google Chrome DevTools’ Lighthouse and Performance panel are the most direct tools. In the Network panel, filter to the LCP image URL and check the timing breakdown: DNS lookup, TCP connection, TLS handshake, TTFB, content download. In the Performance panel, record a page load and look at the LCP marker in the timings track to identify which phase is consuming the most time. If TTFB is high, check edge caching and cache hit rates; if resource load delay is large, check discovery timing and priority settings.
For production environment monitoring, CrUX (Chrome User Experience Report) provides field data for real user LCP distribution, accessible through PageSpeed Insights or GSC (Google Search Console). If CrUX shows that the 75th percentile LCP exceeds 2.5s, and the site has already implemented CDN, the issue is likely in CDN configuration rather than whether to use CDN. web.dev’s Measure and optimize LCP guide provides step-by-step diagnostic procedures and optimization recommendations, which can be cross-referenced with the issues mentioned in this article.
For e-commerce platforms with frequent promotions, CDN cache warming is particularly important. Before traffic spikes, proactively push above-the-fold images to edge nodes to ensure cache readiness when users arrive. Cloudflare’s Cache Rules API and Tiered Cache features can help achieve more granular cache control. Cache warming doesn’t require visiting from all regions; pushing to a few core PoPs is sufficient, and the CDN’s internal sync mechanism will propagate to other nodes.
Overall, CDN itself is not the problem; the issue is in the configuration and optimization methodology. The three categories of problems mentioned in this article—edge TTL, cache key fragmentation, and discovery timing—cover the main reasons why CDN can paradoxically degrade LCP. Each category has corresponding detection methods and solutions. When you see LCP worsen after implementing CDN, don’t immediately question whether CDN is suitable; instead, check whether the three links mentioned above are properly configured. Often, a few adjustments to cache rules can significantly improve page loading performance.
If you want to further understand CDN caching strategies and LCP optimization techniques, it is recommended to read Google web.dev’s Core Web Vitals and Optimize LCP documentation. These resources provide in-depth explanations of the principles and practical methods behind LCP, and are updated along with Chrome’s performance measurement standards.



