A metered paywall has to count what each reader has already seen without turning every article into an uncacheable page. Those two requirements together are what make it a hosting problem.
Three audiences read the same URL — anonymous, metered and subscribed — and only one of them can be sent the full article.
The free-article count is read and incremented at the edge, so an anonymous reader's third article of the month is decided in a few milliseconds rather than by booting WordPress to ask.
Rather than marking every article uncacheable, the cache key carries an entitlement class, so each piece is stored once per access tier instead of once per reader.
Signed-in entitlement lookups run against the object cache, so a spike on a free article does not slow the site down for the people who are actually paying for it.
Gated content is withheld at the server rather than hidden with styling, so the paywall is not defeated by opening the page source or disabling JavaScript.
Subscription signups and upgrades bypass cache entirely and get their own write capacity, because they arrive inside the same spike as the article that prompted them.
A metered paywall is a tuning exercise: set it too tight and you lose the traffic, too loose and nobody subscribes. That decision needs numbers rather than an instinct.
The naive implementation makes every article dynamic and the publication collapses under its own paywall. Varying the cache instead keeps almost all of it cacheable.
These are the settings that differ from a standard WordPress site on the same plan. Each follows from one URL having to produce different content for different readers without becoming uncacheable.
| Setting | What we do | Why |
|---|---|---|
| Cache key | Carries an entitlement class rather than a session identifier | Keying on the reader turns the cache into a per-visitor store with a hit rate near zero; keying on the tier keeps three copies of an article rather than a hundred thousand. |
| Meter counting | Evaluated and incremented at the edge | Asking WordPress how many articles somebody has read makes the paywall itself the slowest component of the page it is protecting. |
| Gated content | Withheld server-side, never sent and then hidden | A paywall implemented in styling is one keystroke from being bypassed, and the full text sits in the HTML for anybody scraping the site. |
| Entitlement lookups | Held in the object cache with a short lifetime | Entitlement is checked on every single request a subscriber makes, which makes it the most repeated query on the whole publication. |
| Signup endpoints | Uncached with dedicated write capacity | Conversions arrive inside the same spike as the article that caused them, which is precisely when write capacity is scarcest. |
Every plan includes free migration, daily backups, SSL and 24/7 support.
Free migration, metering at the edge, and articles that stay cacheable for every tier.