Skip to content
WP speed & Core Web Vitals

Does WordPress Need a CDN? When It Pays Off and When It Doesn't

Most WordPress sites do not need a CDN. The five thresholds (geography, page weight, mobile, TTFB, attack surface) where Cloudflare or BunnyCDN earn it.

By WitsCode8 min read
WP speed & Core Web Vitals

Most WordPress sites do not need a CDN. A site serving a single country off a modern managed host such as Kinsta, WP Engine, Pressable, Rocket.net, or Cloudways on Vultr High Frequency, with HTTP/2, Brotli compression, and a tuned page cache, already delivers a domestic TTFB under 400 milliseconds. Adding a CDN to that stack pays for one more DNS lookup, one more TLS handshake, an extra layer of cache to invalidate on every deploy, and a monthly bill for a problem the host already solved. The CDN earns its place only when one of five conditions is true: international traffic above twenty-five percent, total page weight above two megabytes, mobile cellular share above sixty percent, an origin TTFB profile worse than six hundred milliseconds at the seventy-fifth percentile, or a real attack surface that the host cannot absorb on its own. Underneath that direct answer is a longer one, and it is the one the rest of this piece is for.

The geography rule, which is the one CDNs were originally built for

A content delivery network is, before anything else, a geographic shortcut. It exists because the speed of light is finite and a packet traveling from a Frankfurt user to a Virginia origin spends two hundred milliseconds in transit before any server has had a chance to respond. Multiply that by the four round trips a TLS handshake plus an HTTP request demands and the user waits the better part of a second on physics alone, regardless of how fast the host renders PHP.

If twenty-five percent or more of your pageviews come from outside the country your host's primary region serves, the geography rule applies and a CDN starts earning its keep. The threshold is not arbitrary. Below twenty-five percent, the international tail is small enough that you can serve them adequately and prioritize the domestic majority. Above it, you are leaving meaningful conversion revenue on the floor for users who experience your site as a mediocre regional cousin of itself. Cloudflare, BunnyCDN, and KeyCDN all run global edge networks that reduce that international round trip from two or three hundred milliseconds to twenty or forty. The user in Frankfurt now hits a Frankfurt POP, terminates TLS there, and gets cached HTML or assets back without ever crossing the Atlantic.

If your audience is regional, this entire rule collapses. A B2B SaaS company selling exclusively into Australia, hosted in Sydney, gains nothing from a global CDN except the privilege of paying for one. The rule is geography, not popularity.

The page weight rule, where bandwidth and image-heavy pages take over

The second case where a CDN pays off has nothing to do with where users live and everything to do with how much you are asking their connection to download. Photographer portfolios, food blogs with full-bleed hero photography, e-commerce catalogs with product galleries, news sites with embedded video, and any site whose front-end design depends on imagery cross the threshold quickly. Total page weight above two megabytes is the line where the bottleneck shifts from server response time to bandwidth, and bandwidth is what edge caches and image-optimization layers exist to manage.

BunnyCDN with the Bunny Optimizer add-on, Cloudflare Pro with Polish and Mirage, and KeyCDN with its image processing pipeline all do the same fundamental thing: they intercept image requests at the edge, convert them to WebP or AVIF on the fly based on the requesting browser, resize them to the actual rendered dimensions, and cache the result. A two-megabyte page often comes out the other side at six hundred kilobytes without anyone touching the WordPress media library. For sites where images are the product, that compression is not a luxury, it is the difference between a site that loads on a coffee-shop wi-fi connection and one that does not.

A note on what this does not solve. The CDN cannot fix images that were uploaded at six thousand pixels wide and rendered at four hundred. Garbage in, garbage out, even at the edge. The image optimization plugins that live on the WordPress side, ShortPixel and Imagify being the ones we reach for most often, still need to do their job before the CDN gets involved.

The mobile rule, which is really a latency rule in disguise

Mobile traffic is not slow because phones are slow. Phones are fine. Mobile traffic is slow because cellular networks introduce latency at the radio layer that desktop wired connections do not. Each TCP handshake on a 4G connection costs three to six hundred milliseconds before any HTTP request flies. On a marginal 3G fallback, it can cost over a second. The new connection is the expensive part, not the throughput.

When sixty percent or more of your traffic is mobile and a meaningful share of those mobile sessions happen on cellular rather than home wi-fi, edge POPs start mattering not because the bytes get there faster once the connection exists, but because the connection exists faster. The radio backhaul to a nearby Cloudflare POP is shorter than the backhaul to a distant origin. Multiply that across the dozen connections a typical WordPress page requires for fonts, scripts, images, and tracking pixels, and the cumulative savings are substantial. Sites whose audiences are predominantly mobile on cellular, which typically means consumer brands targeting users in transit, news, social commerce, and anything optimized for ad spend on Instagram or TikTok, see the largest mobile gains from a CDN.

The origin TTFB rule, where the CDN compensates for a slow host

The fourth threshold is the one that comes up most often in audits we run for prospective clients, and it is the one we most often try to talk people out of trusting. If your origin TTFB at the seventy-fifth percentile of real-user data is above six hundred milliseconds, a CDN with full-page caching can mask that problem dramatically. Cloudflare's Automatic Platform Optimization for WordPress, billed at five dollars a month on top of the free tier, caches the rendered HTML of anonymous pageviews at the edge. A user requesting your homepage hits the POP, gets a cached HTML response in fifty milliseconds, and never touches your origin at all. The TTFB the user experiences is the POP's TTFB, not the host's.

This is real and it works. It is also a temptation. Putting a CDN in front of a slow host fixes the symptom for anonymous, cached pageviews while doing nothing for the underlying problem on every uncached request, every logged-in session, every checkout, every dynamic page. The right move, almost always, is to fix the host. Move from shared hosting to managed hosting, tune the page cache, dequeue the plugins inflating the response. The CDN is then a multiplier on a healthy origin rather than a tourniquet on a bleeding one. If the budget will not cover a host migration, edge caching is a defensible interim, and we configure plenty of them. We do not pretend it is the proper fix.

The attack surface rule, the case for a CDN that has nothing to do with speed

Every WordPress site with a public login page, a comment form, a WooCommerce checkout, or a REST API endpoint gets probed within hours of going live. Bot scanners hammering xmlrpc.php, credential stuffing against wp-login, scrapers harvesting product catalogs, occasional DDoS volumetric attacks aimed at competitors. The host can absorb some of this. A managed host like Kinsta or WP Engine has a competent edge layer that blocks the obvious abuse. A budget shared host frequently does not, and even the good hosts will appreciate having Cloudflare's free tier in front, soaking up the bot traffic before it reaches the application.

Cloudflare's free WAF, rate limiting, and bot management absorb a class of traffic that has nothing to do with speed and everything to do with whether the site stays up under hostile conditions. For a site selling anything, this is not optional. For a marketing site for a regional plumber, it is overkill. The threshold is whether the site has anything an attacker would consider worth the trouble: customer data, payment surfaces, valuable content, or a domain reputation worth hijacking. If the answer is yes to any of those, the security argument alone justifies the CDN regardless of where the speed thresholds land.

When a CDN is overhead and you should not bother

The inverse of the rules above is also useful. A single-country B2B site with under fifty thousand monthly pageviews on a premium managed host, total page weight under one megabyte, origin TTFB already below three hundred milliseconds, and no public commerce or login surface beyond the WordPress admin gains nothing from a CDN that it does not already have through the host's bundled edge layer. Adding a third-party CDN here means adding a configuration surface, a cache-purging step to every deploy, an extra invalidation bug waiting to happen when a logged-in user sees a cached anonymous version of the page, and a monthly bill that is paying for the privilege of complexity.

The two most expensive CDN failure modes we see in client audits are both invalidation problems. The first is logged-in users served stale anonymous HTML because the cache key did not exclude the wordpress_logged_in_ cookies. The second is WooCommerce cart and checkout pages cached when they should never be, leaving customers seeing each other's cart contents. Both are configuration mistakes, both are recoverable, and both are reasons to think hard about whether the CDN is actually solving a problem worth those risks. If your site is fast enough already, do not add the layer.

How we make the call on a WitsCode audit

When we run a performance audit, the CDN question gets answered against those five thresholds, in order, and the answer is yes only if at least one threshold is decisively crossed. We pull the actual geography breakdown from the analytics, the actual page weight from a current PageSpeed Insights run, the actual TTFB profile from the field data in Chrome User Experience Report, the actual mobile share from the device segment, and the actual attack surface from the site's role. If none of the five rules apply, we recommend skipping the CDN, fixing the host or the cache layer instead, and revisiting the question when the site outgrows its current shape. If one or more apply, we recommend the smallest CDN that solves the specific problem the threshold identifies, configure it carefully against the failure modes above, and document the cache-bypass rules so the next deploy does not break it.

The point of the question "does WordPress need a CDN" is that the right answer is almost never the universal yes that the CDN vendors would prefer. It is a conditional yes, attached to specific facts about the site, and getting those facts right matters more than picking the right vendor. Pick the host first, audit the site against the five thresholds, and only then write the check.

Get weekly field notes.

Practical writing on shipping products, straight to your inbox. No spam.

Need help with this?

WordPress Development

We design and build web apps, MVPs, and SaaS products. Talk to us about what you are working on.

Talk to us

Want to discuss wp speed & core web vitals for your business?

Start a project and we'll talk through where you are, what's working, and the highest-leverage moves for the next 90 days.