Page caching for WordPress
WP Core Web Vitals keeps every finished page as a file and sends it to the next visitor before WordPress starts. It's on from the moment you activate the plugin.

What does a page cache plugin do for WordPress?
It sends a page WordPress built earlier, so the server doesn't build the same page again for every visitor. Without a cache, PHP loads your plugins and theme and runs the database queries on every request, before the first byte leaves the server, and nothing on the page can start until then. WP Core Web Vitals serves the stored page without starting WordPress: Time to First Byte drops, and LCP with it.
Built on a page that's already optimized
A page's first logged-out visit goes through WordPress as usual. The plugin optimizes the finished page once and stores it on disk. With Fast cache on, every visitor after that gets the file before WordPress and your other plugins load, about five times faster than serving it from inside WordPress.
I didn't add rewrite rules that serve the file straight from nginx or Apache. They would hardly be faster, and every check the plugin makes before it serves a page, such as cookies and URL parameters, would have to be copied into your server configuration.
Links from ads and newsletters carry utm_source or gclid, which makes every click a new URL. Those visitors still get the cached page, because the plugin ignores tracking parameters and parameters it doesn't know. Search, paging and shop filters get their own copy.
When the cache is cleared
Updating a post clears that post and the pages that list it: the home page, the posts page and the archives the post is in. Approving a comment does the same. A change to your theme, a menu, a widget, a plugin or this plugin's settings clears every page. The plugin then builds the cache again in the background, the home page first.
The page cache settings

Page cache
Your visitors get the finished, optimized page from disk, so the server doesn't build it again with PHP and database queries for every visit. That takes Time to First Byte down, and LCP with it, because nothing on the page starts before the first byte arrives. Logged-in users and visitors with something in their cart always get a fresh page, so check your pages in a private window. With the cache off, the plugin optimizes every page again for every visitor, on top of the work WordPress already does. On
Fast cache
Sends the cached page before WordPress and your other plugins even load, about five times faster than serving the same page from inside WordPress. That time comes straight off your Time to First Byte. The plugin sets it up itself, but it leaves a wp-content/advanced-cache.php from another caching plugin alone, so turn that plugin off first. A site updated from 7.x keeps the value it had, so check that this one is on. On
Keep pages for
How long a cached page stays when nothing on it changes. The longer it stays, the fewer visitors wait while WordPress builds an expired page again. A long time is safe, because saving a post already clears that post, the home page and the archives it's in. Pick a shorter time when your pages show something that changes without anyone saving a post, such as a widget with content from another site. 1 month
Fine-tuning

- Maximum cache size (1 GB): the disk space cached pages may use. Above it the oldest pages go first. When the server's disk is almost full nothing new is cached, so the cache never fills it up. Raise it when a large site loses pages from the cache before visitors ask for them again.
- Query strings (Ignore unknown): what the cache does with a URL that has parameters, such as an ad click with
?gclid=or a filtered shop page. On Ignore unknown the visitors from your ads and newsletters get the cached page, because the plugin ignores tracking parameters and parameters it doesn't know. Parameters that change the page, such as search, paging, sorting and shop filters, get a cached copy of their own. Leave it on Ignore unknown: Cache each stores every combination of parameters as a separate page, and Cautious skips the cache for any parameter apart from tracking ones. - Parameters that change the page: parameters that change what a page shows, comma separated, such as
color, sizefor a filter. Add one when visitors who use it get the unfiltered page from the cache. Each value then gets a cached copy of its own. WordPress' own parameters and the ones your plugins register with WordPress are known already. - Parameters that skip the cache: requests with one of these always go to WordPress, so they're not cached and not optimized. Use it for a parameter a plugin has to see on the server on every visit. An affiliate parameter such as
refbelongs here when the affiliate plugin records the referral in PHP: a visitor served from the cache never reaches that plugin, and the referral is lost. Previews and add-to-cart links skip the cache already. - Extra parameters to ignore: parameters to treat like
utm_source, so visitors with them get the cached page and the parameter never makes a copy of its own. The tracking parameters of Google, Meta, Microsoft and the common mailing tools are on the built-in list already. Add your own campaign parameters here. An affiliate parameter such asrefonly belongs here when the referral is recorded by JavaScript in the browser. - Maximum number of filters (3): a page with more parameters that change it, such as four shop filters at once, is still optimized but not stored in the cache. Every combination of filters is a page of its own, and the rare ones would fill the cache with pages nobody asks for twice. Raise it when your visitors often combine more filters on the same category pages.
- Cache search results for (1 day): the second visitor who searches for the same thing gets the results from the cache. Cached searches are cleared whenever a post or page changes, and when this time is up. Choose Don't cache when your search results change without anyone saving a post.
- Never cache: pages whose URL contains one of these parts, such as
/members/, never go into the cache (one per line). Use it for a page that shows each visitor something different without a login. WordPress builds those pages for every visit, and the plugin still optimizes them. Be specific: feed also matches /how-to-feed-your-pet/. - Also clear when content changes: pages, one URL per line, that are cleared whenever a post changes, so the next visitor sees your new post there. Add the pages that show your posts some other way, such as a landing page with a block of recent posts. The post itself, the home page, the posts page and the post's archives are cleared already.
Under Advanced, Late cache (Off) serves the cached page only after WordPress and all your plugins have loaded. Every cached page then arrives later, because the fast cache stops answering. Turn it on only when a plugin that has to run on every visit stops working for logged-out visitors once the cache is on.
Membership sites and a second caching plugin
A membership site where everyone is logged in, or a shop where most visitors have a cart, gets little out of a page cache. Every request there is PHP and database work, and that's a job for your host or developer: reduce the server processing time.
Another caching plugin next to this one gives you two caches to clear and no idea which one answered. One optimizer at a time: turn the other one off.
Questions about the page cache
How do I check that a page comes from the cache?
Open the page in a private window and look at the response headers in DevTools (Network, the document request). A cached page has X-CWV-Cache: HIT, and X-CWV-Cache-Layer says whether the fast cache or PHP served it.
Does the cache work with Cloudflare?
Yes. Add a Cloudflare API token and zone ID under Advanced, and the plugin clears Cloudflare per page when content changes and completely when you clear the cache. If you set Cloudflare up to cache HTML without a token, keep its HTML cache time short.
My host already has a server cache. Do I need this one?
Yes, keep both. The host cache stores the pages this plugin optimized, and when it misses, the plugin's cache still answers from disk.
Why does a page I just changed still look old?
Usually it's another layer: Cloudflare without a token or a host cache the plugin doesn't know. Clear cache in the admin bar clears this plugin and every layer it knows, and the overview in the settings lists the layers it found.
More on server time in general: Time to First Byte and the cache duration part of TTFB.