Does Your WordPress Site Need Page Caching? Start with the HTML Response

Illustration of stored web pages being reused by a browser

Page caching is worth testing when generating HTML repeatedly slows your server down and visitors can safely receive the same page. If your host already caches pages, or HTML responses are already fast enough, check what an additional caching plugin would actually improve before installing one.

Start with public pages viewed while logged out. Keep login, account, cart, and personal calendar pages out of the initial shared-cache test. Check that edits and access changes reach visitors correctly as well as measuring response time. The table below will help you choose a starting point for your setup.

Check your existing cache before adding another one

Your host or web server may already cache HTML. Adding a plugin can introduce another stored copy and another place to clear it when content changes. First, find out what the current cache covers and how it updates.

I'd start with one public article viewed while logged out and record the following.

What you find What it suggests What to do next
Your host or web server already caches HTML The existing cache may be sufficient Keep it initially and check its coverage, exclusions, and update behavior
There's no page cache, and server processing is repeatedly slow Page caching is a candidate for testing Start with one type of public page in a test environment
The first response is still slow with caching enabled The cache may be missing, or another delivery delay may be involved Investigate cookies, URLs, redirects, connections, and server load separately
HTML arrives quickly, but a heading or image appears late An HTML cache may not address the bottleneck Investigate the relevant files and browser rendering work
Your host or web server already caches HTML
What it suggestsThe existing cache may be sufficient
What to do nextKeep it initially and check its coverage, exclusions, and update behavior
There's no page cache, and server processing is repeatedly slow
What it suggestsPage caching is a candidate for testing
What to do nextStart with one type of public page in a test environment
The first response is still slow with caching enabled
What it suggestsThe cache may be missing, or another delivery delay may be involved
What to do nextInvestigate cookies, URLs, redirects, connections, and server load separately
HTML arrives quickly, but a heading or image appears late
What it suggestsAn HTML cache may not address the bottleneck
What to do nextInvestigate the relevant files and browser rendering work

As in the first article, Time to First Byte (TTFB) can include connection and network time. A slow initial response alone doesn't establish that PHP or the database is responsible. WordPress optimization overview

Cache pages that visitors can safely share

A public article and an account page need different caching rules. The article may look the same to many visitors, while names, shopping carts, and personal schedules vary by user. Check whether the HTML contains personal data, rather than relying on login status alone.

Page or feature Initial decision What to check
Public article viewed while logged out A reasonable first test Content, menus, images, and update timing
Homepage or category listing Can be cached, with the right invalidation rules Listings after publication, edits, and changes to private status
Login, admin, or account page Exclude from the initial shared HTML cache test Authentication state and whether one visitor's information could reach another
Cart, checkout, or personal calendar Exclude from shared caching until its behavior is understood Sessions, permissions, live values, and the service's documented exclusions
Search results or URL parameters Determine whether results can be shared safely Whether search terms, language, and filters are included in the cache key
An app with shared HTML and private data fetched through JavaScript Evaluate HTML and data requests separately API authentication, response caching, and stale security tokens embedded in HTML
Public article viewed while logged out
Initial decisionA reasonable first test
What to checkContent, menus, images, and update timing
Homepage or category listing
Initial decisionCan be cached, with the right invalidation rules
What to checkListings after publication, edits, and changes to private status
Login, admin, or account page
Initial decisionExclude from the initial shared HTML cache test
What to checkAuthentication state and whether one visitor's information could reach another
Cart, checkout, or personal calendar
Initial decisionExclude from shared caching until its behavior is understood
What to checkSessions, permissions, live values, and the service's documented exclusions
Search results or URL parameters
Initial decisionDetermine whether results can be shared safely
What to checkWhether search terms, language, and filters are included in the cache key
An app with shared HTML and private data fetched through JavaScript
Initial decisionEvaluate HTML and data requests separately
What to checkAPI authentication, response caching, and stale security tokens embedded in HTML

These are conservative starting rules, not a claim that logged-in pages can never be cached. FlyingPress, for example, supports separate caches by user role. A shared role doesn't by itself make personalized content safe to cache, so I'd evaluate that feature separately from ordinary public pages. FlyingPress caching by user role

Understand what reusing HTML saves

Without a page cache, WordPress runs PHP and retrieves information from the database to build HTML for a request. When the content hasn't changed and the visitor can receive the same page, some of that repeated work can be avoided.

A page cache stores finished HTML for reuse. Depending on the server and product, the response may be served before PHP and WordPress run, or after some code has already executed. Check how your host or caching product serves a cached page instead of assuming every cache follows the same path.

A cache hit, or HIT, means the cache found a usable copy for the request. A cache miss, or MISS, means it didn't.

HIT: a usable HTML copy is available

  1. BrowserRequests the page
  2. Cache handling layerFinds stored HTML

Response: Stored HTML returns to the browser. The serving path depends on the product and server settings.

MISS: no usable copy is available

  1. BrowserRequests the page
  2. Cache handling layerNo usable copy
  3. WordPress and databaseBuild the HTML

Response: Generated HTML returns to the browser. Storage and regeneration timing depend on the product.

This diagram shows processing roles, not measured performance or separate physical servers. Arrows show request processing; responses are described separately. File delivery and browser rendering also need their own checks.

This is a conceptual model. I didn't disable my production cache or run a new before-and-after test for this article. I also haven't used measurements from my existing site as a baseline for a server without a CDN.

WordPress documents page caching and object caching separately. An object cache reuses data used by WordPress; a page cache reuses a finished page. Having an object cache such as Redis doesn't establish that HTML page caching is enabled too. WordPress caching documentation

Confirm cache hits and check the returned content

On a miss, some products generate the page, respond, and store a copy. Others schedule cache generation in the background. One request immediately after clearing the cache isn't enough to decide that caching has failed.

FlyingPress, which I use on my site, documents a workflow in which an uncached page is served before optimization and cache generation follow. That is one product's behavior, not a configuration recipe for every cache. When and where FlyingPress caches pages

Response headers and cache dashboards provide useful clues, but they don't replace checking the page. An intermediate proxy may replay a stored header, and a cached HTML response can still contain old content.

  1. Open a public article while logged out. Save the HTML request's headers, content, and inspection time.
  2. Confirm that cache generation has finished according to the product's documentation, then repeat the request under the same conditions.
  3. Record the cache status and verify that the response contains the content you expect.
  4. Record browser and server cache states separately. DevTools' Disable cache option doesn't clear server-side copies.

Test updates as well as response time

A fast response isn't enough if readers keep receiving an old article. Purging removes or invalidates a cached copy. Preloading generates pages ahead of subsequent visits. They serve different purposes.

Use synthetic posts in a test environment and keep a way to restore the original content and settings. Decide which pages each change should update before running the test.

Change to test Expected result What to inspect
Edit an article The response contains the new text The article's HTML and rendered page
Publish a post Relevant homepage and category listings include it Publication conditions, ordering, and exclusions
Make a post private Logged-out access is blocked and listings no longer include it The post, related listings, and intermediate caches
Change a menu or shared page element Relevant pages show the change Several representative articles on desktop and mobile
Simulate a failed update job The failure is visible and recovery is possible Job status, the previous settings, and returned content
Edit an article
Expected resultThe response contains the new text
What to inspectThe article's HTML and rendered page
Publish a post
Expected resultRelevant homepage and category listings include it
What to inspectPublication conditions, ordering, and exclusions
Make a post private
Expected resultLogged-out access is blocked and listings no longer include it
What to inspectThe post, related listings, and intermediate caches
Change a menu or shared page element
Expected resultRelevant pages show the change
What to inspectSeveral representative articles on desktop and mobile
Simulate a failed update job
Expected resultThe failure is visible and recovery is possible
What to inspectJob status, the previous settings, and returned content

FlyingPress documents automatic purging and preloading of related pages after content changes. A custom homepage or an additional cache layer still needs its own verification. A feature description doesn't prove that every update path on my site works. FlyingPress related-page updates

Keep the evidence needed for an adoption decision

Record uncached responses, responses after cache generation, and responses after an edit separately. Don't combine results that differ in device profile, login state, cache state, connection, or measurement tool. For repeated runs under matched conditions, record the median and range.

I'd adopt the change if HTML waiting time improves, the page and its features still work, and content and permission changes reach visitors correctly. If a cache hit doesn't reduce the delay, investigate further. Stop and roll back if a change breaks functionality or access controls.

This article contains no new before-and-after measurements. The tables describe a test procedure and decision criteria, not tests I reran on my site for this post. The historical font example in part one is not evidence of a page-caching improvement here.

The next article will cover pages whose HTML arrives quickly but whose content still appears late. I'll use the LCP element to decide whether images, fonts, CSS, or JavaScript deserve attention first.

Related reading

Part 1: Find the WordPress performance bottleneck before adding a CDN

WordPress caching documentation

Scroll to Top