Skip to main content
sitewarm

Top 10 CDNs in 2026 for caching and warming

· sitewarm

This is a comparison of ten CDNs on one question: how well does each one let you cache pages, see what the cache did, and refill it after a purge or deploy? The scores come from each vendor's own documentation, read on 18 October 2026, and every point links to the page it came from in the guide for that CDN. Speed, price and network size are deliberately left out; the section on what this ranking does not measure explains why.

If you are new to the topic, start with why cache warming matters and the glossary entry on cache warming.

How we scored the CDNs

Each CDN gets 0, 1 or 2 points on five criteria, for a maximum of 10. A capability scores only if the vendor documents it; anything we could not find in the pages we reviewed on 2026-10-18 scores 0 and is noted in the guide as not documented in the pages reviewed. That is a statement about the documentation, not proof the feature is missing.

  • Cache state on the response. 2: a default response header that says more than hit or miss (for example stale, updating or revalidated). 1: hit or miss only, or a richer header that appears only when you send a debug request header. 0: only in logs or a header you configure yourself. This decides whether you can verify that cache warming worked; see cache status.
  • Purge. 1 point for purging by tag or key (surrogate keys); 1 point for a documented option that marks content stale instead of deleting it (soft purge or invalidate). A capability whose documentation contradicts itself scores 0.
  • Origin protection. 1 point for a documented shared tier or shield (tiered caching); 1 point for documented request collapsing of concurrent misses.
  • CDN-only TTL. 2: a current header that sets the CDN's TTL separately from the browser's, such as `CDN-Cache-Control` or Surrogate-Control. 1: `s-maxage` and configuration rules only.
  • Stale serving. 1 point for serving from cache while refreshing in the background (`stale-while-revalidate` or an equivalent asynchronous refresh); 1 point for serving stale content when the origin fails (`stale-if-error` or an equivalent setting).

Ties are broken by origin protection, then purge, then name. Origin protection comes first because it decides how much of a cold start reaches the origin; purge comes second because it decides how cold a deploy makes the cache in the first place.

The scores

RankCDNCache statePurgeOrigin protectionCDN-only TTLStale servingTotal
1Cloudflare2222210
2Fastly122229
3Vercel220228
4Amazon CloudFront112127
5KeyCDN202127
6Akamai121127
7Netlify211217
8Bunny.net212106
9Google Cloud CDN011226
10Azure Front Door200103

Four CDNs tie at 7. Amazon CloudFront and KeyCDN both score 2 on origin protection; CloudFront places ahead on purge (1 against 0). Akamai and Netlify both score 1 on origin protection; Akamai places ahead on purge (2 against 1). Bunny.net places ahead of Google Cloud CDN on origin protection (2 against 1).

What this ranking does not measure

This is a documentation review of caching features, not a benchmark. It does not measure latency, throughput, PoP count, uptime, security features, support or price, and a CDN that scores lower here can still be the right choice for reasons outside caching. Features change: every fact is dated 2026-10-18 and should be checked against the vendor's documentation before you rely on it.

Nor does the score say how fast your pages will be. Cache warming helps with cold starts after a purge or deploy, with the thundering herd of concurrent misses, with how quickly the cache hit ratio recovers, and with origin load and cost. It can improve LCP by lowering TTFB on pages that would otherwise miss; it does not change INP or CLS, and no CDN setting will make a page rank.

The ten CDNs

1. Cloudflare: 10 of 10

Cloudflare scores on every criterion. cf-cache-status distinguishes EXPIRED, STALE, UPDATING and REVALIDATED from plain hits and misses; purge works by tag, prefix and hostname, and invalidate marks content stale for revalidation; Tiered Cache and a cache lock protect the origin; Cloudflare-CDN-Cache-Control and CDN-Cache-Control set CDN-only TTLs; and both stale-while-revalidate and stale-if-error are supported. The catch for warming is that HTML is not cached by default, so a Cache Rule comes first. Read the Cloudflare caching guide.

2. Fastly: 9 of 10

Fastly loses one point on cache state: X-Cache reports HIT or MISS, and a pass is reported as a miss. Everything else scores in full: purge by surrogate key with soft purge, shielding and default request collapsing, Surrogate-Control for CDN-only TTLs, and both stale directives. Read the Fastly caching guide.

3. Vercel: 8 of 10

Vercel's x-vercel-cache header is detailed, cache tags can be invalidated (marked stale) or deleted, Vercel-CDN-Cache-Control sets CDN-only TTLs and both stale directives work. It scores 0 on origin protection because the pages we reviewed describe a cache segmented by region with no shared tier, and request collapsing is not described. Each deployment also starts with its own cache. Read the Vercel caching guide.

4. Amazon CloudFront: 7 of 10

CloudFront's regional edge caches and Origin Shield, which consolidates concurrent requests for the same object, give it full marks on origin protection, and it honors both stale directives. It loses points because the response header only says hit or miss (detailed result types are in the logs), invalidation removes objects rather than marking them stale, and TTLs are set through s-maxage and cache policies. Read the Amazon CloudFront caching guide.

5. KeyCDN: 7 of 10

KeyCDN's X-Cache header reports STALE as well as HIT and MISS, Origin Shield is free for all customers and uses collapsed forwarding, and it serves stale content when the origin is unreachable or uses stale-while-revalidate. It scores 0 on purge: there is no soft purge, and its documentation disagrees with itself about purging by tag (a support article lists it, the API reference we checked does not), so we did not count it. Read the KeyCDN caching guide.

6. Akamai: 7 of 10

Akamai scores in full on purge (Fast Purge by cache tag, with invalidate as the default method) and stale serving (prefresh refreshes popular objects asynchronously before they expire, and stale objects can be served when the origin fails). Cache state appears only when you send Pragma debug headers, request collapsing is not described in the pages we reviewed, and TTLs are set in Property Manager or with s-maxage, so it scores 1 on the other three. Read the Akamai caching guide.

7. Netlify: 7 of 10

Netlify sends the standard `Cache-Status` header with one entry per layer, supports Netlify-CDN-Cache-Control and CDN-Cache-Control, and can purge by cache tag. The durable cache gives function responses a shared layer. It loses points for having no soft purge, no documented request collapsing and no documented stale-if-error. Every deploy invalidates the cache for its deploy context by default. Read the Netlify caching guide.

8. Bunny.net: 6 of 10

Bunny.net reports HIT, MISS or BYPASS in CDN-Cache, offers Origin Shield and Request Coalescing, and can purge by tag. It loses points because there is no soft purge, TTLs follow Cache-Control and zone settings without a CDN-only header, and serving stale content is not described in the pages we reviewed. Read the Bunny.net caching guide.

9. Google Cloud CDN: 6 of 10

Google Cloud CDN honors CDN-Cache-Control, serves stale-while-revalidate asynchronously, and has Serve While Stale for unreachable origins. It scores 0 on cache state because the response carries no cache-status header unless you add one with the {cdn_cache_status} variable, and it loses points on purge (invalidation removes content) and origin protection (request coalescing, but no tier described in the pages we reviewed). Read the Google Cloud CDN caching guide.

10. Azure Front Door: 3 of 10

Azure Front Door's X-Cache header is on every response and explains uncached responses with values such as PRIVATE_NOSTORE and CONFIG_NOCACHE. Purge is by path only, each edge site manages its own cache with no shared tier described, and stale serving and request collapsing are not described in the pages we reviewed. Azure Front Door (classic) retires on 31 March 2027 (as of 2026-10-18). Read the Azure Front Door caching guide.

What the scores mean for cache warming

On every CDN in this list, a purge or a new deployment leaves pages cold in each location until something requests them again. The criteria above decide how much that costs. A shared tier means one warming request fills a layer that other locations reuse. Soft purge and stale serving mean visitors can get a stale copy while the CDN refreshes it. A detailed cache-status header means you can confirm each page is cached, instead of assuming it.

Whatever CDN you use, start with correct `Cache-Control` headers, check that HTML is actually cacheable, and read the cache-status header on a second request to confirm.

Where sitewarm fits

Cache warming after every deploy, with proof the CDN serves your pages from cache. sitewarm requests the pages in your sitemap and reports the cache state the CDN returns for each one, with the vantage point it was measured from.

Frequently asked questions

Which CDN is best for caching in 2026?

On the five caching criteria in this comparison, Cloudflare scored 10 of 10 and Fastly 9, based on documentation read on 2026-10-18. The criteria leave out speed, price and network size, so the right CDN for you can differ.

How were the CDNs ranked?

Each CDN scored 0 to 2 on cache state on the response, purge, origin protection, CDN-only TTL and stale serving. Only documented capabilities scored. Ties are broken by origin protection, then purge, then name.

Does a CDN purge leave the cache cold?

Yes, for the purged pages, in every location, until they are requested again. A soft purge or invalidate keeps a stale copy that can be revalidated, which softens the effect. See why cache warming matters.

Does cache warming improve Core Web Vitals?

It can improve LCP by lowering TTFB for pages that would otherwise be a cache miss. It does not change INP or CLS.

Is this ranking a performance benchmark?

No. It is a review of documented caching features. It does not measure latency, uptime, PoP count or price.

References

  1. Cloudflare: Cloudflare cache responseshttps://developers.cloudflare.com/cache/concepts/cache-responses/
  2. Cloudflare: Purge cachehttps://developers.cloudflare.com/cache/how-to/purge-cache/
  3. Fastly: X-Cachehttps://www.fastly.com/documentation/reference/http/http-headers/X-Cache/
  4. Fastly: Request collapsinghttps://www.fastly.com/documentation/guides/concepts/cache/request-collapsing/
  5. Vercel: CDN Cachehttps://vercel.com/docs/caching/cdn-cache
  6. Vercel: Purging the CDN cachehttps://vercel.com/docs/caching/cdn-cache/purge
  7. CloudFront: Origin Shieldhttps://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/origin-shield.html
  8. KeyCDN: Frequently asked questionshttps://www.keycdn.com/support/frequently-asked-questions
  9. KeyCDN: API referencehttps://www.keycdn.com/api
  10. Akamai: Purge methodshttps://techdocs.akamai.com/purge-cache/docs/purge-methods
  11. Akamai: Know your caching optionshttps://techdocs.akamai.com/property-mgr/docs/know-caching
  12. Netlify: Caching overviewhttps://docs.netlify.com/build/caching/caching-overview/
  13. Bunny.net: CDN Accelerationhttps://bunny.net/docs/cdn/cdn-acceleration
  14. Cloud CDN: Caching overviewhttps://docs.cloud.google.com/cdn/docs/caching
  15. Azure Front Door: Cachinghttps://learn.microsoft.com/en-us/azure/frontdoor/front-door-caching
  16. RFC 9111: HTTP Cachinghttps://www.rfc-editor.org/rfc/rfc9111
  17. RFC 9211: The Cache-Status HTTP Response Header Fieldhttps://www.rfc-editor.org/rfc/rfc9211

Warm your cache after every deploy

sitewarm requests the pages in your sitemap after a deploy and reports the cache state the CDN returns for each one, with the vantage point it was measured from.