{"id":1148,"date":"2026-08-19T20:42:39","date_gmt":"2026-08-19T20:42:39","guid":{"rendered":"https:\/\/www.ahosting.net\/blog\/?p=1148"},"modified":"2026-08-19T22:08:18","modified_gmt":"2026-08-19T22:08:18","slug":"litespeed-cache-and-cloudflare","status":"publish","type":"post","link":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/","title":{"rendered":"LiteSpeed Cache and Cloudflare: Fixing Double Caching Without Breaking Either (2026)"},"content":{"rendered":"\n<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"Do LiteSpeed Cache and Cloudflare conflict with each other in 2026?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Typically they do not. In a default configuration Cloudflare caches only static assets and leaves HTML to your origin, so LiteSpeed Cache keeps sole ownership of the page cache and nothing is stored twice. The conflict appears only after you opt into HTML caching at the edge, through Automatic Platform Optimization, a Cache Rule, or the retired Cache Everything page rule. The plugin warning many site owners see is a precaution about that opt-in, not evidence that the two products are incompatible. Which specific settings collide is set out in the AHosting Cache Layer Ownership Matrix earlier in this guide.\"}},{\"@type\":\"Question\",\"name\":\"Does Cloudflare do caching by default, or must you enable it yourself?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Specifically, Cloudflare caches static content automatically and dynamic content only on request. Images, CSS and JavaScript are cacheable the moment your domain is proxied, while HTML pages are excluded until you add a Cache Rule or enable Automatic Platform Optimization. Cloudflare also declines to cache any response carrying a Set-Cookie header, a private or no-store directive, or a request method other than GET. That default is the reason a freshly proxied WordPress site behind LiteSpeed rarely shows double caching until somebody changes it deliberately.\"}},{\"@type\":\"Question\",\"name\":\"Cloudflare APO vs LiteSpeed Cache: which page cache should own HTML in 2026?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Ultimately only one of them can, and LiteSpeed's own documentation is unambiguous that Automatic Platform Optimization must be switched off when the LiteSpeed Cache page cache is in use, because both are page caches and their functions must not be duplicated. On a LiteSpeed server the practical answer is to keep HTML at the origin: LiteSpeed Cache already serves cached pages before PHP executes, and it understands WordPress publish events, so it invalidates precisely. Automatic Platform Optimization makes more sense on stacks with no server-level page cache to begin with.\"}},{\"@type\":\"Question\",\"name\":\"Cloudflare edge cache vs LiteSpeed server cache: which header shows what served the page?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"In practice you read two headers together. The cf-cache-status header reports what Cloudflare did, where HIT means the edge answered and DYNAMIC means the URL was never eligible for edge caching at all. The x-litespeed-cache header reports what the origin did, where hit means LiteSpeed served a stored page. Reading either one alone is what makes double caching so easy to miss. The full combination table, including the two states that indicate genuine trouble, appears in the verdict table above.\"}},{\"@type\":\"Question\",\"name\":\"How does AHosting run LiteSpeed Cache and Cloudflare together without double caching?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Notably the rule is one page cache, one owner. AHosting runs LiteSpeed Web Server with LSCache holding the HTML layer and leaves Cloudflare on its default behavior, where the edge accelerates static assets and passes HTML through. Because LSCache integrates at the server level, cached pages are returned before PHP starts and consume no entry processes at all. Purge order matters just as much as configuration: the origin cache is flushed first, then the edge, and the result is verified before the change is considered done.\"}},{\"@type\":\"Question\",\"name\":\"What is the downside of Cloudflare caching on an AHosting LiteSpeed Cache setup?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Fortunately the downside is narrow and entirely avoidable. Edge HTML caching adds a second layer that WordPress cannot invalidate on its own, so a published edit can clear the origin cache and still be served stale from the edge until its own timer expires. It also hides origin behavior from you, because a page answered at the edge never reveals whether the server cache underneath is healthy. On a stack that already returns cached pages in roughly sixteen milliseconds, the latency won is small next to the staleness risk introduced.\"}},{\"@type\":\"Question\",\"name\":\"Should I disable the Cloudflare plugin when LiteSpeed Cache and Cloudflare are both active?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"That said, the warning that prompts this question is broader than the actual conflict. The official Cloudflare plugin is required if you intend to run Automatic Platform Optimization, so removing it is wrong for that setup and right for almost every other one. If you are keeping HTML at the origin, you do not need the plugin at all, and you can instead enter a scoped Cloudflare API token in the LiteSpeed Cache CDN screen so that an origin purge propagates outward automatically.\"}},{\"@type\":\"Question\",\"name\":\"Why does the LSCache crawler blacklist pages once Cloudflare edge caching is enabled?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Consequently the crawler is measuring the wrong layer. LiteSpeed blacklists a URI when the response is not cacheable by design, meaning it carries a no-cache directive in the x-litespeed-cache-control header, or when the response status is not a 200 or 201. When Cloudflare answers from its own edge cache, the crawler never reaches the origin, so it records a response that says nothing about the server cache it was sent to warm. Site owners who bypass the edge in development mode see the same crawler run cleanly.\"}},{\"@type\":\"Question\",\"name\":\"Does AHosting WordPress hosting support LiteSpeed Cache and Cloudflare on shared plans?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Indeed both work on every AHosting WordPress plan, and neither requires a support ticket to set up. LSCache installs from the WordPress plugin repository and begins caching immediately because the LiteSpeed server layer is already present, which is why an internal review of one production server found no custom configuration file on any account running it. Cloudflare sits in front independently. The one decision that matters is which of the two owns your HTML, and the matrix above resolves it line by line.\"}},{\"@type\":\"Question\",\"name\":\"WooCommerce checkout with LiteSpeed Cache and Cloudflare: what must bypass both caches in 2026?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Above all, cart, checkout, account and any logged-in session must bypass every caching layer, not merely the one you configured most recently. LiteSpeed Cache excludes these paths natively once WooCommerce is detected, and Cloudflare declines them by default because the responses carry a Set-Cookie header. Introducing an edge HTML rule can override that protection if the rule is written too broadly, which is the single most expensive mistake in this entire configuration. Confirm the exclusion with a header check rather than assuming it.\"}}]}<\/script>\n\n\n<div class=\"wp-block-aioseo-table-of-contents\"><ul><li><a class=\"aioseo-toc-item\" href=\"#what-double-caching-means\">What Double Caching Actually Means on a LiteSpeed Server<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#why-cloudflare-does-not-double-cache\">Why Cloudflare Alone Does Not Double-Cache Your WordPress Site<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#three-opt-ins\">The Three Opt-Ins That Create the Conflict<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#ownership-factor-1-html\">LiteSpeed Cache and Cloudflare Ownership Factor 1: Who Holds the HTML<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#ownership-factor-2-features\">LiteSpeed Cache and Cloudflare Ownership Factor 2: Splitting the Optimization Features<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#where-they-overlap\">Where LiteSpeed Cache and Cloudflare Overlap Function by Function<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#ownership-factor-3-purge\">LiteSpeed Cache and Cloudflare Ownership Factor 3: Making Purges Propagate<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#reading-the-headers\">Reading the Two Headers That Expose Double Caching<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#verdict-table\">The LiteSpeed Cache and Cloudflare Verdict Table<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#crawler-blacklisting\">Why the Cache Warming Crawler Starts Blacklisting Pages<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#the-conflict-warning\">What the LiteSpeed Conflict Warning Is Actually Telling You<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#production-observations\">First-Hand: What LiteSpeed Cache and Cloudflare Look Like in Production<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#diagnose-your-setup\">Diagnose Your Own LiteSpeed Cache and Cloudflare Configuration<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#practical-checklist\">A Practical Checklist for LiteSpeed Cache and Cloudflare<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-litespeed-cache-and-cloudflare\">Frequently Asked Questions About LiteSpeed Cache and Cloudflare<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#faq-do-litespeed-cache-and-cloudflare-conflict\">Do LiteSpeed Cache and Cloudflare conflict with each other in 2026?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-does-cloudflare-do-caching-by-default\">Does Cloudflare do caching by default, or must you enable it yourself?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-cloudflare-apo-vs-litespeed-cache-html\">Cloudflare APO vs LiteSpeed Cache: which page cache should own HTML in 2026?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-cloudflare-edge-cache-vs-litespeed-server-cache-header\">Cloudflare edge cache vs LiteSpeed server cache: which header shows what served the page?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-how-ahosting-runs-litespeed-cache-and-cloudflare\">How does AHosting run LiteSpeed Cache and Cloudflare together without double caching?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-downside-of-cloudflare-caching-on-ahosting-litespeed\">What is the downside of Cloudflare caching on an AHosting LiteSpeed Cache setup?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-should-i-disable-the-cloudflare-plugin\">Should I disable the Cloudflare plugin when LiteSpeed Cache and Cloudflare are both active?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-why-lscache-crawler-blacklists-pages\">Why does the LSCache crawler blacklist pages once Cloudflare edge caching is enabled?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-does-ahosting-support-litespeed-cache-and-cloudflare-shared\">Does AHosting WordPress hosting support LiteSpeed Cache and Cloudflare on shared plans?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-woocommerce-checkout-litespeed-cache-and-cloudflare\">WooCommerce checkout with LiteSpeed Cache and Cloudflare: what must bypass both caches in 2026?<\/a><\/li><\/ul><\/li><\/ul><\/div>\n\n\n<div class=\"ah-tldr\">\n  <span class=\"ah-tldr-badge\">TL;DR<\/span>\n  <p>LiteSpeed Cache and Cloudflare only double-cache when you enable edge HTML caching. Keep one page cache, leave Cloudflare on static assets, and verify with two headers.<\/p>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Running LiteSpeed Cache and Cloudflare together is the default shape of a fast WordPress stack, and it is also the configuration that generates more contradictory advice than any other. Site owners see a plugin warning about a conflict, read a forum thread telling them to pick one, and end up disabling something that was working. The truth is narrower and more useful: these two layers coexist safely until a specific set of options is switched on, and the damage they cause afterwards is silent. Nothing errors. Pages simply go stale, edits fail to appear, and the cache warming tool starts marking healthy URLs as uncacheable.<\/p>\n\n\n\n<figure class=\"wp-block-audio\"><audio controls src=\"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/08\/Perfect_LiteSpeed_and_Cloudflare_WordPress_Setup.m4a\"><\/audio><figcaption class=\"wp-element-caption\">Listen: why Cloudflare does not double-cache by default, and the three settings that change that. By Matt Chrust, Director of Business Development, AHosting.<\/figcaption><\/figure>\n\n\n\n<h2 id=\"what-double-caching-means\" class=\"wp-block-heading\">What Double Caching Actually Means on a LiteSpeed Server<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Double caching means two independent systems have each stored a complete copy of the same HTML page and neither one knows when the other should discard it. That is the entire problem in one sentence. A CDN storing your images alongside a server storing your pages is not double caching, because the two layers hold different objects and never disagree.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Notably, the disagreement only becomes possible once both layers hold HTML. WordPress can instruct the origin cache to drop a page the instant you press Update, because the plugin runs inside WordPress. It has no comparable authority over a copy sitting in a data center several hundred miles away. Consequently the edge copy survives on its own timer, and your visitors read whichever version their nearest location happens to hold.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Furthermore, the staleness window is not a bug in either product. In <a href=\"https:\/\/httpwg.org\/specs\/rfc9111.html\" target=\"_blank\" rel=\"noopener\">the HTTP caching specification<\/a>, a stored response stays usable until its freshness lifetime expires, and every cache in a chain calculates that independently. Both layers are behaving correctly. They are simply answering different questions, which is why the symptom presents as intermittent rather than broken.<\/p>\n\n\n\n<h2 id=\"why-cloudflare-does-not-double-cache\" class=\"wp-block-heading\">Why Cloudflare Alone Does Not Double-Cache Your WordPress Site<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Here is the fact that resolves most of the confusion: Cloudflare does not cache HTML by default. According to <a href=\"https:\/\/developers.cloudflare.com\/cache\/get-started\/\" target=\"_blank\" rel=\"noopener\">Cloudflare\u2019s documented default cache behavior<\/a>, static content such as images, CSS and JavaScript is cacheable the moment your domain is proxied, while dynamic content including HTML pages is excluded unless you add a Cache Rule. Cloudflare additionally refuses to store any response that carries a Set-Cookie header, a private or no-store directive, or a non-GET method.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In practice this means a freshly proxied WordPress site behind LiteSpeed is already in the recommended configuration. The origin owns HTML, the edge accelerates assets, and no page exists in two places. Nobody has to choose between the two products, because out of the box they are not competing for the same object.<\/p>\n\n\n\n<h3 id=\"three-opt-ins\" class=\"wp-block-heading\">The Three Opt-Ins That Create the Conflict<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Specifically, three deliberate changes move HTML to the edge and introduce the second copy. Automatic Platform Optimization comes first, and it exists precisely to cache WordPress HTML at the edge, as set out in <a href=\"https:\/\/blog.cloudflare.com\/automatic-platform-optimizations-starting-with-wordpress\/\" target=\"_blank\" rel=\"noopener\">Cloudflare\u2019s own launch write-up for the feature<\/a>. A Cache Rule carrying an Edge TTL applied to page URLs is the second. Third comes the legacy Cache Everything page rule, which still lingers in older configurations. Each is a reasonable choice on a stack with no server-level page cache. On LiteSpeed, each creates the duplicate.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"LiteSpeed Cache and Cloudflare: Stop Double Caching (2026)\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/bb4FrxInPTA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 id=\"ownership-factor-1-html\" class=\"wp-block-heading\">LiteSpeed Cache and Cloudflare Ownership Factor 1: Who Holds the HTML<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Therefore the first decision is the only one that genuinely matters, and it is binary. One layer owns HTML. On a LiteSpeed server the origin is the stronger candidate for a reason that has nothing to do with brand preference: LSCache is built into the web server rather than bolted on above it, so a cached page is returned before PHP is ever invoked. That is the same mechanism behind <a href=\"https:\/\/www.ahosting.net\/blog\/wordpress-litespeed-hosting-2026\/\">how LiteSpeed hosting serves WordPress pages before PHP runs<\/a>, and it is why a cached request consumes no PHP worker at all.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Moreover, the origin cache is the only one WordPress can address directly. Publishing a post, editing a page or updating a plugin fires an invalidation the plugin understands. An edge cache receives no such signal unless you build one. Ownership at the origin therefore buys correctness, and correctness is worth more than the handful of milliseconds an edge copy would save on a stack already returning cached pages in roughly sixteen milliseconds.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That said, the reverse choice is legitimate on hosting without a server-level page cache. If your platform runs Apache with no native cache layer, moving HTML to the edge is a genuine upgrade. The error is running both, not preferring either. For sites that have outgrown shared infrastructure entirely, <a href=\"https:\/\/www.ahosting.net\/dedicated-server.html\">a dedicated server<\/a> changes the arithmetic again by removing contention from the equation.<\/p>\n\n\n\n<h2 id=\"ownership-factor-2-features\" class=\"wp-block-heading\">LiteSpeed Cache and Cloudflare Ownership Factor 2: Splitting the Optimization Features<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Beyond page caching, both products ship overlapping optimization features, and this is where configurations quietly rot. Minification, image conversion, and HTML rewriting all exist on both sides. Enabling the same function twice does not double the benefit; it produces assets processed by one layer and re-processed by another, which is how a site ends up serving a stylesheet that no longer matches its markup.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Additionally, one setting is frequently misread. Cloudflare is a distributed proxy rather than a reverse-proxy CDN, so the plugin\u2019s Enable CDN mapping option is not meant for it, per <a href=\"https:\/\/blog.litespeedtech.com\/2018\/01\/17\/cloudflare-management-lscache\/\" target=\"_blank\" rel=\"noopener\">LiteSpeed\u2019s explanation of that distinction<\/a>. Turning it on rewrites asset URLs that Cloudflare already serves transparently. The table below assigns every overlapping function to exactly one owner and names the signal that confirms it.<\/p>\n\n\n\n<h3 id=\"where-they-overlap\" class=\"wp-block-heading\">Where LiteSpeed Cache and Cloudflare Overlap Function by Function<\/h3>\n\n\n\n<figure class=\"wp-block-table ah-ladder\"><table><thead><tr><th>Function<\/th><th>Owning layer<\/th><th>Turn off on the other layer<\/th><th>Verification signal<\/th><\/tr><\/thead><tbody><tr><td>Full-page HTML cache<\/td><td>LiteSpeed Cache<\/td><td>APO, Cache Rules and Cache Everything all OFF<\/td><td><code>x-litespeed-cache: hit<\/code><\/td><\/tr><tr><td>Static asset delivery<\/td><td>Cloudflare<\/td><td>No action needed \u2014 default behavior<\/td><td><code>cf-cache-status: HIT<\/code> on assets<\/td><\/tr><tr><td>CSS and JS minify<\/td><td>LiteSpeed Cache<\/td><td>Cloudflare Auto Minify OFF<\/td><td>Minified filename at origin<\/td><\/tr><tr><td>WebP image conversion<\/td><td>LiteSpeed Cache<\/td><td>Cloudflare Polish OFF<\/td><td><code>content-type: image\/webp<\/code><\/td><\/tr><tr><td>Guest Mode \/ first-visit optimization<\/td><td>LiteSpeed Cache<\/td><td>Requires edge HTML caching OFF<\/td><td>Guest Mode test passes in plugin<\/td><\/tr><tr><td>Brotli and HTTP\/3 transport<\/td><td>Cloudflare<\/td><td>Nothing to disable at origin<\/td><td><code>content-encoding: br<\/code><\/td><\/tr><tr><td>Object cache (database layer)<\/td><td>Origin only<\/td><td>Never an edge function<\/td><td>Site Health reports persistent cache<\/td><\/tr><tr><td>Cache warming crawler<\/td><td>LiteSpeed Cache<\/td><td>Needs an origin-reaching request path<\/td><td>Crawler blacklist stays empty<\/td><\/tr><tr><td>Purge on content update<\/td><td>LiteSpeed Cache, propagating outward<\/td><td>Manual edge purges become unnecessary<\/td><td><code>cf-cache-status: MISS<\/code> after update<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">The AHosting Cache Layer Ownership Matrix \u2014 one owner per function, with the signal that confirms it.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Accordingly, the matrix is worth applying line by line rather than skimming. Most broken configurations fail on only one or two rows, and the failure is invisible in a browser because both layers return a valid page. Sites running checkout flows should treat the object-cache row as mandatory, which is why <a href=\"https:\/\/www.ahosting.net\/woocommerce-hosting.html\">WooCommerce-tuned hosting plans<\/a> ship with the database layer already provisioned.<\/p>\n\n\n\n<h2 id=\"ownership-factor-3-purge\" class=\"wp-block-heading\">LiteSpeed Cache and Cloudflare Ownership Factor 3: Making Purges Propagate<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Once ownership is settled, the remaining risk is propagation. An origin purge does not reach the edge unless something tells it to, and this is the gap that produces the classic complaint of an edit that refuses to appear. Two mechanisms close it, and they are mutually exclusive in practice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First and foremost, the plugin can drive Cloudflare directly. Per <a href=\"https:\/\/docs.litespeedtech.com\/lscache\/lscwp\/cdn\/\" target=\"_blank\" rel=\"noopener\">the plugin\u2019s CDN screen documentation<\/a>, entering a scoped API token generated from the WordPress template lets a LiteSpeed Purge All also purge Cloudflare automatically, keeping the edge current without a second dashboard. Alternatively, if you have kept HTML at the origin as recommended, there is very little at the edge to purge, and the question largely dissolves.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ultimately the sequence is what people get wrong. Purging the edge before the origin simply refills the edge from a stale origin copy. Origin first, edge second, then verify \u2014 in that order, every time. On accounts where sustained dynamic traffic makes purge frequency itself a load concern, <a href=\"https:\/\/www.ahosting.net\/vps-hosting.html\">VPS hosting with dedicated resources<\/a> removes the shared ceiling that turns a purge storm into a queue.<\/p>\n\n\n\n<h2 id=\"reading-the-headers\" class=\"wp-block-heading\">Reading the Two Headers That Expose Double Caching<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Diagnosing LiteSpeed Cache and Cloudflare takes one command and two headers. The <code>cf-cache-status<\/code> header reports what Cloudflare did, and <code>x-litespeed-cache<\/code> reports what the origin did. Reading either alone is exactly why double caching survives so long undetected \u2014 each header, on its own, looks perfectly healthy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Interestingly, the standards world has already formalized this problem. <a href=\"https:\/\/httpwg.org\/specs\/rfc9211.html\" target=\"_blank\" rel=\"noopener\">RFC 9211 Cache-Status field<\/a> defines a single header in which every cache in a chain appends its own entry, ordered from the cache closest to the origin outward to the one closest to the user, specifically so an entire chain can be debugged at once. Neither product emits it yet, so the two-header read below remains the practical method.<\/p>\n\n\n\n<h3 id=\"verdict-table\" class=\"wp-block-heading\">The LiteSpeed Cache and Cloudflare Verdict Table<\/h3>\n\n\n\n<figure class=\"wp-block-table ah-ladder\"><table><thead><tr><th><code>cf-cache-status<\/code><\/th><th><code>x-litespeed-cache<\/code><\/th><th>Verdict<\/th><th>What to do<\/th><\/tr><\/thead><tbody><tr><td><code>DYNAMIC<\/code><\/td><td><code>hit<\/code><\/td><td>Correct \u2014 recommended shape<\/td><td>None. This is the target state.<\/td><\/tr><tr><td><code>DYNAMIC<\/code><\/td><td><code>miss<\/code><\/td><td>Correct, cache cold<\/td><td>Warm it with the crawler, then re-test.<\/td><\/tr><tr><td><code>HIT<\/code><\/td><td><code>hit<\/code><\/td><td>Double cached<\/td><td>Two stored copies. Disable edge HTML caching.<\/td><\/tr><tr><td><code>HIT<\/code><\/td><td>(header absent)<\/td><td>Double cached, origin masked<\/td><td>Edge is answering; origin health is unknown.<\/td><\/tr><tr><td><code>BYPASS<\/code><\/td><td><code>no-cache<\/code><\/td><td>Correct for cart and checkout<\/td><td>None. Confirm it stays this way.<\/td><\/tr><tr><td><code>MISS<\/code><\/td><td><code>hit<\/code><\/td><td>Edge caching HTML, cold<\/td><td>Duplicate forming. Review your Cache Rules.<\/td><\/tr><tr><td><code>DYNAMIC<\/code><\/td><td>(header absent)<\/td><td>Nothing is caching<\/td><td>LSCache inactive or excluded. Check the plugin.<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">The AHosting Double-Cache Verdict Table \u2014 seven header combinations and what each one means.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Similarly, one detail trips people up during testing. A logged-in administrator is excluded from caching on both layers by design, so a browser check while signed in reports the uncached path and tells you nothing. Test in a private window, or against the command line, and always bypass your own edge with a cache-busting query string when you want to confirm what the origin is really doing \u2014 the same technique described in <a href=\"https:\/\/www.ahosting.net\/blog\/reduce-ttfb-wordpress-server-vs-plugins\/\">whether a CDN fixes high TTFB or merely hides it<\/a>.<\/p>\n\n\n\n<h2 id=\"crawler-blacklisting\" class=\"wp-block-heading\">Why the Cache Warming Crawler Starts Blacklisting Pages<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">One symptom deserves its own section because it is so widely misdiagnosed. After edge HTML caching is enabled, the LiteSpeed crawler begins marking large numbers of URLs as uncacheable, and site owners reasonably conclude the crawler is broken. It is not.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By contrast, the crawler is doing exactly what it was built to do \u2014 against the wrong layer. Under the <a href=\"https:\/\/www.litespeedtech.com\/support\/wiki\/doku.php\/litespeed_wiki:cache:lscwp:troubleshooting:crawler_blacklist\" target=\"_blank\" rel=\"noopener\">documented crawler blacklist conditions<\/a>, a URI is blacklisted when the response carries a no-cache directive in the <code>x-litespeed-cache-control<\/code> header, or when the status is not a 200 or 201. When the edge answers first, the crawler never reaches the origin, so it records a verdict about a response the origin never sent. Operators who bypass the edge in development mode watch the identical crawler run cleanly, which is the tell.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In fact this matters more than a cosmetic list. A crawler that cannot warm the origin cache leaves real visitors generating uncached page builds, and those consume PHP workers \u2014 the mechanism behind <a href=\"https:\/\/www.ahosting.net\/blog\/wordpress-concurrent-users-shared-hosting\/\">how cached pages raise your concurrency ceiling<\/a>. A configuration error at the edge becomes a capacity problem at the origin.<\/p>\n\n\n\n<h2 id=\"the-conflict-warning\" class=\"wp-block-heading\">What the LiteSpeed Conflict Warning Is Actually Telling You<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The warning that starts most of these investigations reads as a recommendation to disable the Cloudflare plugin, and taken literally it is too broad. Running LiteSpeed Cache and Cloudflare side by side is not the problem, and the plugin itself is harmless. What the message is guarding against is the page-cache duplication that the plugin makes available, since the official plugin is the supported route to Automatic Platform Optimization outside enterprise plans.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, LiteSpeed states the underlying rule plainly in its <a href=\"https:\/\/docs.litespeedtech.com\/lscache\/lscwp\/general\/\" target=\"_blank\" rel=\"noopener\">LiteSpeed Cache general settings documentation<\/a>: when using the plugin alongside other optimization solutions you must not duplicate functions, and because Automatic Platform Optimization is itself a page cache, it has to be off for the LiteSpeed page cache to work correctly. Read that way, the notice is not a verdict on Cloudflare at all. It is a warning about owning HTML twice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As such, the correct response depends on which layer you chose. Keeping HTML at the origin means the plugin is simply unnecessary and the notice can be dismissed. Choosing the edge instead means keeping the plugin and disabling the overlapping origin features, including Guest Mode. Either path is coherent. Running both page caches is the only genuine error, and it is also the configuration people arrive at by accident. Where hostile traffic is the real driver for edge features, <a href=\"https:\/\/www.ahosting.net\/blog\/stop-xml-rpc-bot-flood\/\">filtering hostile traffic at the edge<\/a> is a better reason to sit behind Cloudflare than caching ever was.<\/p>\n\n\n\n<h2 id=\"production-observations\" class=\"wp-block-heading\">First-Hand: What LiteSpeed Cache and Cloudflare Look Like in Production<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Across AHosting accounts pairing LiteSpeed Cache and Cloudflare, one pattern recurs. An internal review of a production WordPress server found LSCache installed on fourteen of roughly one hundred and twenty WordPress accounts \u2014 and not one of those fourteen carried a custom plugin configuration file. That detail is more interesting than it first appears.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Consequently it confirms something the documentation implies but rarely states: on a LiteSpeed server the plugin begins full-page caching on activation, with no wizard and no configuration step. Site owners are therefore running a page cache they never consciously configured. When one of them later enables edge HTML caching, believing they are adding caching to a site that has none, they are in fact adding a second one. That is the mechanism behind almost every double-caching report, and it explains why the affected site owner is genuinely surprised.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Overall, the operational lesson is to establish which layer holds HTML before changing anything, rather than after. This applies equally to <a href=\"https:\/\/www.ahosting.net\/web-hosting.html\">standard web hosting accounts<\/a> and to larger deployments, because the failure is architectural rather than a function of plan size. If you are weighing a plugin-level cache instead, <a href=\"https:\/\/www.ahosting.net\/blog\/litespeed-cache-vs-wp-rocket\/\">how LSCache compares with plugin-level page caches<\/a> covers that trade-off.<\/p>\n\n\n\n<div class=\"ah-infographic\">\n<svg viewBox=\"0 0 1200 640\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-label=\"Diagram comparing the correct single page cache configuration with the double cached configuration for LiteSpeed Cache and Cloudflare\">\n<title>LiteSpeed Cache and Cloudflare: correct versus double-cached request paths<\/title>\n<desc>Two request paths. In the correct path Cloudflare serves static assets and passes HTML to LiteSpeed Cache at the origin. In the double-cached path both Cloudflare and LiteSpeed store HTML, so an origin purge leaves a stale edge copy.<\/desc>\n<rect width=\"1200\" height=\"640\" fill=\"#0f172a\"\/>\n<rect x=\"0\" y=\"0\" width=\"10\" height=\"640\" fill=\"#2563eb\"\/>\n<text x=\"48\" y=\"60\" fill=\"#ffffff\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"30\" font-weight=\"700\">One Page Cache vs Two: The Same Stack, Two Outcomes<\/text>\n<text x=\"48\" y=\"96\" fill=\"#94a3b8\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"18\">ahosting.net | Est. 2002<\/text>\n<rect x=\"48\" y=\"130\" width=\"1104\" height=\"220\" rx=\"10\" fill=\"#132038\" stroke=\"#22c55e\" stroke-width=\"2\"\/>\n<text x=\"72\" y=\"168\" fill=\"#22c55e\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"22\" font-weight=\"700\">CORRECT &#8211; HTML owned at the origin<\/text>\n<rect x=\"72\" y=\"192\" width=\"230\" height=\"86\" rx=\"8\" fill=\"#1e293b\"\/>\n<text x=\"187\" y=\"228\" fill=\"#e2e8f0\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"18\" text-anchor=\"middle\">Visitor<\/text>\n<text x=\"187\" y=\"254\" fill=\"#94a3b8\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"15\" text-anchor=\"middle\">requests a page<\/text>\n<rect x=\"352\" y=\"192\" width=\"230\" height=\"86\" rx=\"8\" fill=\"#1e293b\"\/>\n<text x=\"467\" y=\"222\" fill=\"#e2e8f0\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"18\" text-anchor=\"middle\">Cloudflare<\/text>\n<text x=\"467\" y=\"248\" fill=\"#94a3b8\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"15\" text-anchor=\"middle\">assets only &#8211; HTML<\/text>\n<text x=\"467\" y=\"268\" fill=\"#94a3b8\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"15\" text-anchor=\"middle\">passes through<\/text>\n<rect x=\"632\" y=\"192\" width=\"230\" height=\"86\" rx=\"8\" fill=\"#1e293b\"\/>\n<text x=\"747\" y=\"222\" fill=\"#e2e8f0\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"18\" text-anchor=\"middle\">LiteSpeed Cache<\/text>\n<text x=\"747\" y=\"248\" fill=\"#94a3b8\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"15\" text-anchor=\"middle\">serves stored HTML<\/text>\n<text x=\"747\" y=\"268\" fill=\"#94a3b8\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"15\" text-anchor=\"middle\">before PHP runs<\/text>\n<rect x=\"912\" y=\"192\" width=\"216\" height=\"86\" rx=\"8\" fill=\"#14321f\"\/>\n<text x=\"1020\" y=\"228\" fill=\"#22c55e\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"17\" text-anchor=\"middle\">Publish = instant<\/text>\n<text x=\"1020\" y=\"254\" fill=\"#22c55e\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"17\" text-anchor=\"middle\">invalidation<\/text>\n<text x=\"322\" y=\"242\" fill=\"#2563eb\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"24\" text-anchor=\"middle\">-&gt;<\/text>\n<text x=\"602\" y=\"242\" fill=\"#2563eb\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"24\" text-anchor=\"middle\">-&gt;<\/text>\n<text x=\"882\" y=\"242\" fill=\"#2563eb\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"24\" text-anchor=\"middle\">-&gt;<\/text>\n<text x=\"72\" y=\"322\" fill=\"#94a3b8\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"16\">Headers: cf-cache-status: DYNAMIC + x-litespeed-cache: hit<\/text>\n<rect x=\"48\" y=\"378\" width=\"1104\" height=\"220\" rx=\"10\" fill=\"#132038\" stroke=\"#f87171\" stroke-width=\"2\"\/>\n<text x=\"72\" y=\"416\" fill=\"#f87171\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"22\" font-weight=\"700\">DOUBLE CACHED &#8211; APO or a Cache Rule stores HTML too<\/text>\n<rect x=\"72\" y=\"440\" width=\"230\" height=\"86\" rx=\"8\" fill=\"#1e293b\"\/>\n<text x=\"187\" y=\"476\" fill=\"#e2e8f0\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"18\" text-anchor=\"middle\">Visitor<\/text>\n<text x=\"187\" y=\"502\" fill=\"#94a3b8\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"15\" text-anchor=\"middle\">requests a page<\/text>\n<rect x=\"352\" y=\"440\" width=\"230\" height=\"86\" rx=\"8\" fill=\"#3f1d1d\"\/>\n<text x=\"467\" y=\"470\" fill=\"#fca5a5\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"18\" text-anchor=\"middle\">Cloudflare<\/text>\n<text x=\"467\" y=\"496\" fill=\"#fca5a5\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"15\" text-anchor=\"middle\">stores HTML copy 1<\/text>\n<text x=\"467\" y=\"516\" fill=\"#fca5a5\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"15\" text-anchor=\"middle\">own expiry timer<\/text>\n<rect x=\"632\" y=\"440\" width=\"230\" height=\"86\" rx=\"8\" fill=\"#3f1d1d\"\/>\n<text x=\"747\" y=\"470\" fill=\"#fca5a5\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"18\" text-anchor=\"middle\">LiteSpeed Cache<\/text>\n<text x=\"747\" y=\"496\" fill=\"#fca5a5\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"15\" text-anchor=\"middle\">stores HTML copy 2<\/text>\n<text x=\"747\" y=\"516\" fill=\"#fca5a5\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"15\" text-anchor=\"middle\">purged on publish<\/text>\n<rect x=\"912\" y=\"440\" width=\"216\" height=\"86\" rx=\"8\" fill=\"#3f1d1d\"\/>\n<text x=\"1020\" y=\"476\" fill=\"#fca5a5\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"17\" text-anchor=\"middle\">Publish = stale<\/text>\n<text x=\"1020\" y=\"502\" fill=\"#fca5a5\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"17\" text-anchor=\"middle\">page at the edge<\/text>\n<text x=\"322\" y=\"490\" fill=\"#f87171\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"24\" text-anchor=\"middle\">-&gt;<\/text>\n<text x=\"602\" y=\"490\" fill=\"#f87171\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"24\" text-anchor=\"middle\">-&gt;<\/text>\n<text x=\"882\" y=\"490\" fill=\"#f87171\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"24\" text-anchor=\"middle\">-&gt;<\/text>\n<text x=\"72\" y=\"570\" fill=\"#94a3b8\" font-family=\"Poppins,Arial,sans-serif\" font-size=\"16\">Headers: cf-cache-status: HIT + x-litespeed-cache: hit<\/text>\n<\/svg>\n<\/div>\n\n\n\n<h2 id=\"diagnose-your-setup\" class=\"wp-block-heading\">Diagnose Your Own LiteSpeed Cache and Cloudflare Configuration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Below, describe what your own LiteSpeed Cache and Cloudflare headers report and the tool returns the verdict from the table above, together with the next action. Run the check in a private window against a public page rather than while signed in.<\/p>\n\n\n\n<style>\n.ahdc-tool{background:#0f172a;border-radius:12px;padding:28px;margin:28px 0;border-left:6px solid #2563eb;}\n.ahdc-tool h3{color:#ffffff;font-size:1.35rem;margin:0 0 8px;}\n.ahdc-tool p.ahdc-sub{color:#cbd5e1;font-size:.95rem;margin:0 0 20px;}\n.ahdc-tool label{display:block;color:#e2e8f0;font-weight:600;font-size:.92rem;margin:16px 0 6px;}\n.ahdc-tool select{width:100%;padding:11px 12px;border-radius:8px;border:1px solid #475569;background:#1e293b;color:#ffffff;font-size:.95rem;}\n.ahdc-out{margin-top:22px;padding:18px;border-radius:8px;background:#1e293b;border-left:4px solid #2563eb;}\n.ahdc-verdict{font-size:1.1rem;font-weight:700;margin:0 0 8px;color:#ffffff;}\n.ahdc-act{color:#cbd5e1;font-size:.95rem;margin:0;}\na.ahdc-btn.wp-element-button{display:inline-block;margin-top:18px;padding:12px 22px;border-radius:8px;background:#2563eb!important;color:#ffffff!important;text-decoration:none!important;font-weight:600;font-size:.95rem;}\n<\/style>\n<div class=\"ahdc-tool\">\n<h3>Double-Cache Diagnostic<\/h3>\n<p class=\"ahdc-sub\">Read both headers on a public URL, then match them here.<\/p>\n<label for=\"ahdc-cf\">What does cf-cache-status report?<\/label>\n<select id=\"ahdc-cf\" data-ahdc=\"cf\">\n<option value=\"DYNAMIC\">DYNAMIC<\/option>\n<option value=\"HIT\">HIT<\/option>\n<option value=\"MISS\">MISS<\/option>\n<option value=\"BYPASS\">BYPASS<\/option>\n<\/select>\n<label for=\"ahdc-ls\">What does x-litespeed-cache report?<\/label>\n<select id=\"ahdc-ls\" data-ahdc=\"ls\">\n<option value=\"hit\">hit<\/option>\n<option value=\"miss\">miss<\/option>\n<option value=\"no-cache\">no-cache<\/option>\n<option value=\"absent\">header is absent<\/option>\n<\/select>\n<div class=\"ahdc-out\">\n<p class=\"ahdc-verdict\" id=\"ahdc-verdict\">Correct &#8211; recommended shape<\/p>\n<p class=\"ahdc-act\" id=\"ahdc-act\">Nothing to change. The origin owns HTML and the edge is accelerating assets only.<\/p>\n<\/div>\n<a class=\"ahdc-btn wp-element-button\" href=\"https:\/\/www.ahosting.net\/wordpress-hosting.html\">See the LiteSpeed stack behind this setup<\/a>\n<\/div>\n<script>\n(function(){\n  document.addEventListener('DOMContentLoaded', function(){\n    var root = document.querySelector('.ahdc-tool');\n    if (!root) { return; }\n    var cf = document.getElementById('ahdc-cf');\n    if (!cf) { return; }\n    var ls = document.getElementById('ahdc-ls');\n    if (!ls) { return; }\n    var vEl = document.getElementById('ahdc-verdict');\n    if (!vEl) { return; }\n    var aEl = document.getElementById('ahdc-act');\n    if (!aEl) { return; }\n    var MAP = {\n      'DYNAMIC|hit':      ['Correct - recommended shape','Nothing to change. The origin owns HTML and the edge is accelerating assets only.'],\n      'DYNAMIC|miss':     ['Correct, but the cache is cold','Run the LiteSpeed crawler to warm the origin cache, then test the same URL again.'],\n      'DYNAMIC|no-cache': ['Correct for cart, checkout and account pages','Expected on excluded URLs. On a normal page it means an exclusion rule is too broad.'],\n      'DYNAMIC|absent':   ['Nothing is caching HTML','LSCache is inactive or this URL is excluded. Check the plugin is enabled before anything else.'],\n      'HIT|hit':          ['Double cached','Two layers hold this page. Disable APO or the Cache Rule so the origin owns HTML.'],\n      'HIT|miss':         ['Double cached, origin cold','The edge is answering while the origin cache is empty. Remove edge HTML caching first.'],\n      'HIT|no-cache':     ['Serious - an excluded page is cached at the edge','A page marked uncacheable is being stored by Cloudflare. Audit your Cache Rules now.'],\n      'HIT|absent':       ['Double cached, origin masked','The edge is serving HTML and hiding origin health. Bypass the edge to inspect the origin.'],\n      'MISS|hit':         ['Edge caching HTML, currently cold','A duplicate is forming. Review Cache Rules before the edge copy starts being served.'],\n      'MISS|miss':        ['Edge caching HTML, both cold','Both layers will store this page. Remove the edge HTML rule.'],\n      'MISS|no-cache':    ['Edge is attempting to cache an excluded page','Cloudflare considers this cacheable but the origin does not. Narrow the rule.'],\n      'MISS|absent':      ['Edge caching HTML with no origin cache','Confirm LSCache is active, then decide which single layer owns HTML.'],\n      'BYPASS|hit':       ['Edge bypassed, origin cached','Normal when a bypass rule is set. Confirm it is intentional for this URL.'],\n      'BYPASS|miss':      ['Edge bypassed, origin cold','Warm the origin cache with the crawler for this URL.'],\n      'BYPASS|no-cache':  ['Correct for cart and checkout','This is the target state for transactional pages. No change needed.'],\n      'BYPASS|absent':    ['Nothing is caching this URL','Every layer is bypassed. Intentional for checkout, a problem anywhere else.']\n    };\n    function render(){\n      var key = cf.value + '|' + ls.value;\n      var hit = MAP[key];\n      if (!hit) { return; }\n      vEl.textContent = hit[0];\n      aEl.textContent = hit[1];\n    }\n    root.addEventListener('change', function(e){\n      var t = e.target;\n      if (!t) { return; }\n      if (!t.getAttribute('data-ahdc')) { return; }\n      render();\n    });\n    render();\n  });\n})();\n<\/script>\n\n\n\n<h2 id=\"practical-checklist\" class=\"wp-block-heading\">A Practical Checklist for LiteSpeed Cache and Cloudflare<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Work through these in order to bring LiteSpeed Cache and Cloudflare into a single-owner configuration. Each step is verifiable, and the sequence matters because a later check is meaningless if an earlier one has not been settled.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Decide which single layer owns HTML, and write the decision down before changing any setting.<\/li>\n\n\n\n<li>Confirm Automatic Platform Optimization is off if the origin owns HTML, and that no Cache Rule targets page URLs.<\/li>\n\n\n\n<li>Search your Cloudflare configuration for any surviving Cache Everything rule from an older setup.<\/li>\n\n\n\n<li>Disable Auto Minify and Polish at the edge if the plugin is already handling minification and WebP conversion.<\/li>\n\n\n\n<li>Leave the plugin CDN mapping option off, since Cloudflare is a distributed proxy rather than a reverse-proxy CDN.<\/li>\n\n\n\n<li>Enter a scoped Cloudflare API token in the plugin CDN screen so an origin purge propagates outward automatically.<\/li>\n\n\n\n<li>Verify cart, checkout, account and login URLs return a bypass verdict on both layers.<\/li>\n\n\n\n<li>Run the crawler and confirm the blacklist stays empty rather than filling with ordinary pages.<\/li>\n\n\n\n<li>Re-test both headers in a private window, and repeat the check after the next content update.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, treat the header check as a recurring task rather than a one-time fix. Edge configurations drift as features are trialled and forgotten, and a stale page is the kind of defect nobody reports because it never looks like an error.<\/p>\n\n\n\n<h2 id=\"faq-litespeed-cache-and-cloudflare\" class=\"wp-block-heading\">Frequently Asked Questions About LiteSpeed Cache and Cloudflare<\/h2>\n\n\n\n<h3 id=\"faq-do-litespeed-cache-and-cloudflare-conflict\" class=\"wp-block-heading\">Do LiteSpeed Cache and Cloudflare conflict with each other in 2026?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Typically they do not. In a default configuration Cloudflare caches only static assets and leaves HTML to your origin, so LiteSpeed Cache keeps sole ownership of the page cache and nothing is stored twice. The conflict appears only after you opt into HTML caching at the edge, through Automatic Platform Optimization, a Cache Rule, or the retired Cache Everything page rule. The plugin warning many site owners see is a precaution about that opt-in, not evidence that the two products are incompatible. Which specific settings collide is set out in the AHosting Cache Layer Ownership Matrix earlier in this guide.<\/p>\n\n\n\n<h3 id=\"faq-does-cloudflare-do-caching-by-default\" class=\"wp-block-heading\">Does Cloudflare do caching by default, or must you enable it yourself?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Specifically, Cloudflare caches static content automatically and dynamic content only on request. Images, CSS and JavaScript are cacheable the moment your domain is proxied, while HTML pages are excluded until you add a Cache Rule or enable Automatic Platform Optimization. Cloudflare also declines to cache any response carrying a Set-Cookie header, a private or no-store directive, or a request method other than GET. That default is the reason a freshly proxied WordPress site behind LiteSpeed rarely shows double caching until somebody changes it deliberately.<\/p>\n\n\n\n<h3 id=\"faq-cloudflare-apo-vs-litespeed-cache-html\" class=\"wp-block-heading\">Cloudflare APO vs LiteSpeed Cache: which page cache should own HTML in 2026?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ultimately only one of them can, and LiteSpeed&#8217;s own documentation is unambiguous that Automatic Platform Optimization must be switched off when the LiteSpeed Cache page cache is in use, because both are page caches and their functions must not be duplicated. On a LiteSpeed server the practical answer is to keep HTML at the origin: LiteSpeed Cache already serves cached pages before PHP executes, and it understands WordPress publish events, so it invalidates precisely. Automatic Platform Optimization makes more sense on stacks with no server-level page cache to begin with.<\/p>\n\n\n\n<h3 id=\"faq-cloudflare-edge-cache-vs-litespeed-server-cache-header\" class=\"wp-block-heading\">Cloudflare edge cache vs LiteSpeed server cache: which header shows what served the page?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In practice you read two headers together. The cf-cache-status header reports what Cloudflare did, where HIT means the edge answered and DYNAMIC means the URL was never eligible for edge caching at all. The x-litespeed-cache header reports what the origin did, where hit means LiteSpeed served a stored page. Reading either one alone is what makes double caching so easy to miss. The full combination table, including the two states that indicate genuine trouble, appears in the verdict table above.<\/p>\n\n\n\n<h3 id=\"faq-how-ahosting-runs-litespeed-cache-and-cloudflare\" class=\"wp-block-heading\">How does AHosting run LiteSpeed Cache and Cloudflare together without double caching?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Notably the rule is one page cache, one owner. AHosting runs LiteSpeed Web Server with LSCache holding the HTML layer and leaves Cloudflare on its default behavior, where the edge accelerates static assets and passes HTML through. Because LSCache integrates at the server level, cached pages are returned before PHP starts and consume no entry processes at all. Purge order matters just as much as configuration: the origin cache is flushed first, then the edge, and the result is verified before the change is considered done.<\/p>\n\n\n\n<h3 id=\"faq-downside-of-cloudflare-caching-on-ahosting-litespeed\" class=\"wp-block-heading\">What is the downside of Cloudflare caching on an AHosting LiteSpeed Cache setup?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Fortunately the downside is narrow and entirely avoidable. Edge HTML caching adds a second layer that WordPress cannot invalidate on its own, so a published edit can clear the origin cache and still be served stale from the edge until its own timer expires. It also hides origin behavior from you, because a page answered at the edge never reveals whether the server cache underneath is healthy. On a stack that already returns cached pages in roughly sixteen milliseconds, the latency won is small next to the staleness risk introduced.<\/p>\n\n\n\n<h3 id=\"faq-should-i-disable-the-cloudflare-plugin\" class=\"wp-block-heading\">Should I disable the Cloudflare plugin when LiteSpeed Cache and Cloudflare are both active?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">That said, the warning that prompts this question is broader than the actual conflict. The official Cloudflare plugin is required if you intend to run Automatic Platform Optimization, so removing it is wrong for that setup and right for almost every other one. If you are keeping HTML at the origin, you do not need the plugin at all, and you can instead enter a scoped Cloudflare API token in the LiteSpeed Cache CDN screen so that an origin purge propagates outward automatically.<\/p>\n\n\n\n<h3 id=\"faq-why-lscache-crawler-blacklists-pages\" class=\"wp-block-heading\">Why does the LSCache crawler blacklist pages once Cloudflare edge caching is enabled?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Consequently the crawler is measuring the wrong layer. LiteSpeed blacklists a URI when the response is not cacheable by design, meaning it carries a no-cache directive in the x-litespeed-cache-control header, or when the response status is not a 200 or 201. When Cloudflare answers from its own edge cache, the crawler never reaches the origin, so it records a response that says nothing about the server cache it was sent to warm. Site owners who bypass the edge in development mode see the same crawler run cleanly.<\/p>\n\n\n\n<h3 id=\"faq-does-ahosting-support-litespeed-cache-and-cloudflare-shared\" class=\"wp-block-heading\">Does AHosting WordPress hosting support LiteSpeed Cache and Cloudflare on shared plans?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Indeed both work on every AHosting WordPress plan, and neither requires a support ticket to set up. LSCache installs from the WordPress plugin repository and begins caching immediately because the LiteSpeed server layer is already present, which is why an internal review of one production server found no custom configuration file on any account running it. Cloudflare sits in front independently. The one decision that matters is which of the two owns your HTML, and the matrix above resolves it line by line.<\/p>\n\n\n\n<h3 id=\"faq-woocommerce-checkout-litespeed-cache-and-cloudflare\" class=\"wp-block-heading\">WooCommerce checkout with LiteSpeed Cache and Cloudflare: what must bypass both caches in 2026?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Above all, cart, checkout, account and any logged-in session must bypass every caching layer, not merely the one you configured most recently. LiteSpeed Cache excludes these paths natively once WooCommerce is detected, and Cloudflare declines them by default because the responses carry a Set-Cookie header. Introducing an edge HTML rule can override that protection if the rule is written too broadly, which is the single most expensive mistake in this entire configuration. Confirm the exclusion with a header check rather than assuming it.<\/p>\n\n\n\n<script>\n(function(){\n  document.addEventListener('DOMContentLoaded', function(){\n    var allH3s = document.querySelectorAll('h3.wp-block-heading');\n    var inFaq = false;\n    for (var i = 0; i < allH3s.length; i++) {\n      var h3 = allH3s[i];\n      var prev = h3.previousElementSibling;\n      if (prev) {\n        if (prev.tagName === 'H2') {\n          var prevId = prev.getAttribute('id');\n          if (prevId) {\n            if (prevId.indexOf('faq-') === 0) {\n              inFaq = true;\n            } else {\n              inFaq = false;\n            }\n          }\n        }\n      }\n      if (inFaq) {\n        initToggle(h3);\n      }\n    }\n    function initToggle(h3) {\n      var answer = h3.nextElementSibling;\n      if (!answer) { return; }\n      if (answer.tagName !== 'P') { return; }\n      var chev = document.createElement('span');\n      chev.className = 'ahfaq-chev ahfaq-chev-closed';\n      chev.setAttribute('aria-hidden', 'true');\n      h3.appendChild(chev);\n      h3.setAttribute('tabindex', '0');\n      h3.setAttribute('aria-expanded', 'false');\n      answer.classList.add('ahfaq-collapsed');\n      h3.addEventListener('click', function(){ doToggle(h3, answer, chev); });\n      h3.addEventListener('keydown', function(e){\n        if (e.key === 'Enter') { e.preventDefault(); doToggle(h3, answer, chev); }\n        if (e.key === ' ') { e.preventDefault(); doToggle(h3, answer, chev); }\n      });\n    }\n    function doToggle(h3, answer, chev) {\n      var isOpen = h3.getAttribute('aria-expanded') === 'true';\n      if (isOpen) {\n        answer.classList.remove('ahfaq-open');\n        answer.classList.add('ahfaq-collapsed');\n        h3.setAttribute('aria-expanded', 'false');\n        chev.classList.add('ahfaq-chev-closed');\n        chev.classList.remove('ahfaq-chev-open');\n      } else {\n        answer.classList.remove('ahfaq-collapsed');\n        answer.classList.add('ahfaq-open');\n        h3.setAttribute('aria-expanded', 'true');\n        chev.classList.remove('ahfaq-chev-closed');\n        chev.classList.add('ahfaq-chev-open');\n      }\n    }\n  });\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>TL;DR LiteSpeed Cache and Cloudflare only double-cache when you enable edge HTML caching. Keep one page cache, leave Cloudflare on static assets, and verify with two headers. Running LiteSpeed Cache and Cloudflare together is the default shape of a fast WordPress stack, and it is also the configuration that generates more contradictory advice than any [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":1149,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[151],"tags":[233,217,231,104,232,105,46],"class_list":["post-1148","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hosting-guides","tag-apo","tag-cdn","tag-cloudflare","tag-litespeed-cache","tag-page-cache","tag-wordpress-caching","tag-wordpress-hosting"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"LiteSpeed Cache and Cloudflare only double-cache when you enable edge HTML. See which layer owns what, and the two headers that prove your setup is clean.\" \/>\n\t<meta name=\"robots\" content=\"max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n\t<meta name=\"author\" content=\"Matt Chrust\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Blog Home | AHosting Blog\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"LiteSpeed Cache and Cloudflare \u2014 Fix Double Caching 2026\" \/>\n\t\t<meta property=\"og:description\" content=\"LiteSpeed Cache and Cloudflare only double-cache when you enable edge HTML. See which layer owns what, and the two headers that prove your setup is clean.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/08\/litespeed-cache-and-cloudflare-ahosting.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/08\/litespeed-cache-and-cloudflare-ahosting.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-08-19T20:42:39+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-08-19T22:08:18+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@ahostingdotnet\" \/>\n\t\t<meta name=\"twitter:title\" content=\"LiteSpeed Cache and Cloudflare \u2014 Fix Double Caching 2026\" \/>\n\t\t<meta name=\"twitter:description\" content=\"LiteSpeed Cache and Cloudflare only double-cache when you enable edge HTML. See which layer owns what, and the two headers that prove your setup is clean.\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@ahostingdotnet\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/08\/litespeed-cache-and-cloudflare-ahosting.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/litespeed-cache-and-cloudflare\\\/#article\",\"name\":\"LiteSpeed Cache and Cloudflare \\u2014 Fix Double Caching 2026\",\"headline\":\"LiteSpeed Cache and Cloudflare: Fixing Double Caching Without Breaking Either (2026)\",\"author\":{\"@type\":\"Person\",\"name\":\"Matt Chrust\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/author\\\/matt-chrust\\\/\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/litespeed-cache-and-cloudflare-ahosting.jpg\",\"width\":1200,\"height\":675,\"caption\":\"The three header states that tell you whether LiteSpeed Cache and Cloudflare are cooperating or duplicating. By Matt Chrust, Director of Business Development, AHosting.\"},\"datePublished\":\"2026-08-19T20:42:39+00:00\",\"dateModified\":\"2026-08-19T22:08:18+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/litespeed-cache-and-cloudflare\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/litespeed-cache-and-cloudflare\\\/#webpage\"},\"articleSection\":\"Hosting Guides, APO, CDN, Cloudflare, litespeed cache, page cache, wordpress caching, WordPress Hosting\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/litespeed-cache-and-cloudflare\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.ahosting.net\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/category\\\/hosting-guides\\\/#listItem\",\"name\":\"Hosting Guides\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/category\\\/hosting-guides\\\/#listItem\",\"position\":2,\"name\":\"Hosting Guides\",\"item\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/category\\\/hosting-guides\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/litespeed-cache-and-cloudflare\\\/#listItem\",\"name\":\"LiteSpeed Cache and Cloudflare: Fixing Double Caching Without Breaking Either (2026)\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/litespeed-cache-and-cloudflare\\\/#listItem\",\"position\":3,\"name\":\"LiteSpeed Cache and Cloudflare: Fixing Double Caching Without Breaking Either (2026)\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/category\\\/hosting-guides\\\/#listItem\",\"name\":\"Hosting Guides\"},\"item\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/litespeed-cache-and-cloudflare\\\/\"}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/#organization\",\"name\":\"AHosting\",\"description\":\"AHosting Blog\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/assets\\\/img\\\/ahosting-logo.svg\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/litespeed-cache-and-cloudflare\\\/#organizationLogo\"},\"image\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/litespeed-cache-and-cloudflare\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/ahostingdotnet\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/author\\\/matt-chrust\\\/#author\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/author\\\/matt-chrust\\\/\",\"name\":\"Matt Chrust\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/litespeed-cache-and-cloudflare\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/795895edac1c44589f6c7f5e6bb79df405fbbaac15817bdd387ec57da61731ec?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Matt Chrust\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/litespeed-cache-and-cloudflare\\\/#webpage\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/litespeed-cache-and-cloudflare\\\/\",\"name\":\"LiteSpeed Cache and Cloudflare \\u2014 Fix Double Caching 2026\",\"description\":\"LiteSpeed Cache and Cloudflare only double-cache when you enable edge HTML. See which layer owns what, and the two headers that prove your setup is clean.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/litespeed-cache-and-cloudflare\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/author\\\/matt-chrust\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/author\\\/matt-chrust\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/litespeed-cache-and-cloudflare-ahosting.jpg\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/litespeed-cache-and-cloudflare\\\/#mainImage\",\"width\":1200,\"height\":675,\"caption\":\"The three header states that tell you whether LiteSpeed Cache and Cloudflare are cooperating or duplicating. By Matt Chrust, Director of Business Development, AHosting.\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/blog\\\/litespeed-cache-and-cloudflare\\\/#mainImage\"},\"datePublished\":\"2026-08-19T20:42:39+00:00\",\"dateModified\":\"2026-08-19T22:08:18+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/#website\",\"url\":\"https:\\\/\\\/www.ahosting.net\\\/\",\"name\":\"AHosting\",\"description\":\"AHosting Blog\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.ahosting.net\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"LiteSpeed Cache and Cloudflare \u2014 Fix Double Caching 2026","description":"LiteSpeed Cache and Cloudflare only double-cache when you enable edge HTML. See which layer owns what, and the two headers that prove your setup is clean.","canonical_url":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/","robots":"max-snippet:-1, max-image-preview:large, max-video-preview:-1","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/#article","name":"LiteSpeed Cache and Cloudflare \u2014 Fix Double Caching 2026","headline":"LiteSpeed Cache and Cloudflare: Fixing Double Caching Without Breaking Either (2026)","author":{"@type":"Person","name":"Matt Chrust","url":"https:\/\/www.ahosting.net\/blog\/author\/matt-chrust\/"},"publisher":{"@id":"https:\/\/www.ahosting.net\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/08\/litespeed-cache-and-cloudflare-ahosting.jpg","width":1200,"height":675,"caption":"The three header states that tell you whether LiteSpeed Cache and Cloudflare are cooperating or duplicating. By Matt Chrust, Director of Business Development, AHosting."},"datePublished":"2026-08-19T20:42:39+00:00","dateModified":"2026-08-19T22:08:18+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/#webpage"},"isPartOf":{"@id":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/#webpage"},"articleSection":"Hosting Guides, APO, CDN, Cloudflare, litespeed cache, page cache, wordpress caching, WordPress Hosting"},{"@type":"BreadcrumbList","@id":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.ahosting.net\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog\/category\/hosting-guides\/#listItem","name":"Hosting Guides"}},{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog\/category\/hosting-guides\/#listItem","position":2,"name":"Hosting Guides","item":"https:\/\/www.ahosting.net\/blog\/category\/hosting-guides\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/#listItem","name":"LiteSpeed Cache and Cloudflare: Fixing Double Caching Without Breaking Either (2026)"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/#listItem","position":3,"name":"LiteSpeed Cache and Cloudflare: Fixing Double Caching Without Breaking Either (2026)","previousItem":{"@type":"ListItem","@id":"https:\/\/www.ahosting.net\/blog\/category\/hosting-guides\/#listItem","name":"Hosting Guides"},"item":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/"}]},{"@type":"Organization","@id":"https:\/\/www.ahosting.net\/#organization","name":"AHosting","description":"AHosting Blog","url":"https:\/\/www.ahosting.net\/","logo":{"@type":"ImageObject","url":"https:\/\/www.ahosting.net\/assets\/img\/ahosting-logo.svg","@id":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/#organizationLogo"},"image":{"@id":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/#organizationLogo"},"sameAs":["https:\/\/x.com\/ahostingdotnet"]},{"@type":"Person","@id":"https:\/\/www.ahosting.net\/blog\/author\/matt-chrust\/#author","url":"https:\/\/www.ahosting.net\/blog\/author\/matt-chrust\/","name":"Matt Chrust","image":{"@type":"ImageObject","@id":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/795895edac1c44589f6c7f5e6bb79df405fbbaac15817bdd387ec57da61731ec?s=96&d=mm&r=g","width":96,"height":96,"caption":"Matt Chrust"}},{"@type":"WebPage","@id":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/#webpage","url":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/","name":"LiteSpeed Cache and Cloudflare \u2014 Fix Double Caching 2026","description":"LiteSpeed Cache and Cloudflare only double-cache when you enable edge HTML. See which layer owns what, and the two headers that prove your setup is clean.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.ahosting.net\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/#breadcrumblist"},"author":{"@id":"https:\/\/www.ahosting.net\/blog\/author\/matt-chrust\/#author"},"creator":{"@id":"https:\/\/www.ahosting.net\/blog\/author\/matt-chrust\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/08\/litespeed-cache-and-cloudflare-ahosting.jpg","@id":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/#mainImage","width":1200,"height":675,"caption":"The three header states that tell you whether LiteSpeed Cache and Cloudflare are cooperating or duplicating. By Matt Chrust, Director of Business Development, AHosting."},"primaryImageOfPage":{"@id":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/#mainImage"},"datePublished":"2026-08-19T20:42:39+00:00","dateModified":"2026-08-19T22:08:18+00:00"},{"@type":"WebSite","@id":"https:\/\/www.ahosting.net\/#website","url":"https:\/\/www.ahosting.net\/","name":"AHosting","description":"AHosting Blog","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.ahosting.net\/#organization"}}]},"og:locale":"en_US","og:site_name":"Blog Home | AHosting Blog","og:type":"article","og:title":"LiteSpeed Cache and Cloudflare \u2014 Fix Double Caching 2026","og:description":"LiteSpeed Cache and Cloudflare only double-cache when you enable edge HTML. See which layer owns what, and the two headers that prove your setup is clean.","og:url":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/","og:image":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/08\/litespeed-cache-and-cloudflare-ahosting.jpg","og:image:secure_url":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/08\/litespeed-cache-and-cloudflare-ahosting.jpg","og:image:width":1200,"og:image:height":675,"article:published_time":"2026-08-19T20:42:39+00:00","article:modified_time":"2026-08-19T22:08:18+00:00","twitter:card":"summary_large_image","twitter:site":"@ahostingdotnet","twitter:title":"LiteSpeed Cache and Cloudflare \u2014 Fix Double Caching 2026","twitter:description":"LiteSpeed Cache and Cloudflare only double-cache when you enable edge HTML. See which layer owns what, and the two headers that prove your setup is clean.","twitter:creator":"@ahostingdotnet","twitter:image":"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/08\/litespeed-cache-and-cloudflare-ahosting.jpg"},"aioseo_meta_data":{"post_id":"1148","title":"LiteSpeed Cache and Cloudflare \u2014 Fix Double Caching 2026","description":"LiteSpeed Cache and Cloudflare only double-cache when you enable edge HTML. See which layer owns what, and the two headers that prove your setup is clean.","keywords":null,"keyphrases":{"focus":{"keyphrase":"litespeed cache and cloudflare","score":0,"analysis":[]},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-08-19 20:38:18","updated":"2026-08-19 22:10:02","seo_analyzer_scan_date":null,"focus_keyword":"litespeed cache and cloudflare","additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.ahosting.net\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.ahosting.net\/blog\/category\/hosting-guides\/\" title=\"Hosting Guides\">Hosting Guides<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tLiteSpeed Cache and Cloudflare: Fixing Double Caching Without Breaking Either (2026)\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.ahosting.net\/blog"},{"label":"Hosting Guides","link":"https:\/\/www.ahosting.net\/blog\/category\/hosting-guides\/"},{"label":"LiteSpeed Cache and Cloudflare: Fixing Double Caching Without Breaking Either (2026)","link":"https:\/\/www.ahosting.net\/blog\/litespeed-cache-and-cloudflare\/"}],"_links":{"self":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts\/1148","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/comments?post=1148"}],"version-history":[{"count":2,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts\/1148\/revisions"}],"predecessor-version":[{"id":1153,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts\/1148\/revisions\/1153"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/media\/1149"}],"wp:attachment":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/media?parent=1148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/categories?post=1148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/tags?post=1148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}