Works with your stack
Cookie consent that works with your page cache
same page for everyone
A page cache serves the same file to every visitor. A consent banner that decides on the server breaks it, or shows one visitor’s choice to another. Cookie Rocks reads the choice in the browser, so the cached page stays the same for everyone.

Caching plugins, one by one
What matters for consent with Caching plugins
The choice lives in the browser
The visitor’s choice is read in the browser, never on the server. Every visitor of a given language gets the same cached page.
Consent runs first
Optimisation plugins delay, defer, combine and minify scripts. A consent script has to run first and unchanged, or trackers get through before it.
A cache that knows when to clear
When you change the banner, cached pages keep the old one until the cache is cleared.
Preloading
Many caches build pages in advance. The page holds no visitor’s choice, so a page built in advance is right for everyone.
Video previews
Some optimisation plugins replace YouTube videos with a preview image until the click. That image still comes from YouTube’s servers, so it is part of the YouTube question.
What our tests found on Caching plugins
Good to know · WP-OptimizeWhat WP-Optimize stores in visitors' browsers
WP-Optimize: 1 cookie(s) or browser key(s) for visitors, recognised by Cookie Rocks from 2.9.8.
Name Kept in Category What it is for wpo_commented_postcookie Necessary Shows a commenter the page with their comment, outside the cache Read in its code, 2 November 2026, WP-Optimize.
Full detail
WP-Optimize can store these in a visitor's browser: wpo_commented_post (cookie, necessary: Shows a commenter the page with their comment, outside the cache). Cookie Rocks recognises them from 2.9.8, with this category and purpose, and lists them in the cookie policy when it sees them.
Good to know · NitroPackWhat NitroPack stores in visitors' browsers
NitroPack: 1 cookie(s) or browser key(s) for visitors, recognised by Cookie Rocks from 2.9.8.
Name Kept in Category What it is for nitroCachedPagecookie Necessary Tells the site the page came from the NitroPack cache Seen in our tests, 2 November 2026, NitroPack.
Full detail
NitroPack can store these in a visitor's browser: nitroCachedPage (cookie, necessary: Tells the site the page came from the NitroPack cache). Cookie Rocks recognises them from 2.9.8, with this category and purpose, and lists them in the cookie policy when it sees them.
Good to know · Cookie RocksCookie Rocks works with four page caches on a real site
With WP Super Cache, W3 Total Cache, WP Fastest Cache or Breeze serving cached pages, each visitor still gets their own banner and choice.
Seen in our tests, 23 October 2026, Cookie Rocks 3.1.4 / 2.11.0 / 1.5.3 / 2.6.3.
Full detail
On a real site with the page cache of each plugin on and serving (cache marker in the page), the cached page keeps the Cookie Rocks head script and a single Google consent default, each visitor gets their own banner, one visitor's choice is never served to another, and the country rules endpoints answer 404 while the rules are off: WP Super Cache 3.1.4 (PHP mode, preload), W3 Total Cache 2.11.0 (Disk: Enhanced), WP Fastest Cache 1.5.3, Breeze 2.6.3. Three checks of three for each.
Depends on a setting · BreezeDeactivating Breeze turns WP_CACHE off in wp-config.php
Breeze sets WP_CACHE to false in wp-config.php when it is deactivated. Check it before turning on another page cache.
What to do: After deactivating Breeze, check WP_CACHE in wp-config.php before enabling another page cache, or restore wp-config.php from a copy made before.
Seen in our tests, 23 October 2026, Breeze 2.6.3.
Full detail
When Breeze 2.6.3 is deactivated, it rewrites wp-config.php: it sets WP_CACHE to false and strips the file's blank lines. Another page cache plugin activated afterwards (WP Super Cache in our test) finds WP_CACHE off until its own setup runs again.
Depends on a setting · W3 Total Cache, BreezeW3 Total Cache and Breeze can remove WP Super Cache's .htaccess block
Trying W3 Total Cache or Breeze can remove WP Super Cache's block from .htaccess. Keep a copy of .htaccess before testing page caches.
What to do: Keep a copy of .htaccess before testing page caches and compare it afterwards.
Seen in our tests, 23 October 2026, W3 Total Cache, Breeze 2.11.0 / 2.6.3.
Full detail
On a real site, after W3 Total Cache 2.11.0 then Breeze 2.6.3 were each installed, enabled and removed, the '# BEGIN WPSuperCache ... # END WPSuperCache' block of an inactive WP Super Cache was gone from .htaccess: both plugins rewrite .htaccess. WP Super Cache in simple (PHP) mode keeps working without the block.
Good to know · CloudflareCloudflare and the country database can disagree on one address
Cloudflare and the DB-IP country database can give different countries for the same address. A mismatch can only make the rules stricter for a US visitor seen in Europe.
Seen in our tests, 23 October 2026, Cloudflare DB-IP lite country, edition 2026-10-20.
Full detail
For the same visitor address, Cloudflare's CF-IPCountry said IT while the DB-IP lite country database (edition 2026-10-20) said NO. Both gave the strict profile here, but two sources can disagree on the country of one address: a US visitor seen in Europe by one source would get the strict rules rather than the US profile.
See the 42 other findings
Depends on a setting · CloudflareCloudflare Free can send the visitor's US state to the site
Turn on 'Add visitor location headers' in Cloudflare so that rules by country can read a US visitor's state (CF-Region-Code). It is off by default.
What to do: Enable 'Add visitor location headers' so that country rules can read the US state (CF-Region-Code).
Seen in our tests, 23 October 2026, Cloudflare. Source
Full detail
On a Cloudflare Free zone, the Managed Transform 'Add visitor location headers' (Rules, Settings, Managed Transforms) is available, off by default. Turned on, it adds cf-ipcountry, cf-region-code, cf-ipcity and coordinates to requests sent to the site. Without it, only CF-IPCountry is sent (IP Geolocation setting), so a US visitor's state is unknown.
Good to know · Cookie RocksThe country database works end to end on a real site
On a real site behind Cloudflare, the country database downloaded, verified and answered correctly, never cached, and forged Cloudflare headers got the strict rules.
Seen in our tests, 23 October 2026, Cookie Rocks country database edition 2026-10-20.
Full detail
On a real site behind Cloudflare, the 'country database on this server' source of Cookie Rocks 2.7.0 worked end to end: signed manifest and signature read, 8,300,093-byte file downloaded in 0.5 s, checksum verified, source trusted. Test addresses got the right country and a private address got the strict rules. geo.php and the REST route answered with Cache-Control private, no-store and were never cached by Cloudflare (cf-cache-status DYNAMIC). A direct request to the site with forged Cloudflare headers got the strict rules.
Depends on a setting · Cookie RocksBehind Cloudflare on some hosts, choose the country database
If your host rewrites the visitor's address behind Cloudflare (mod_cloudflare, mod_remoteip), choose 'country database on this server' as the source in Rules by country.
What to do: In Rules by country, choose 'country database on this server' as the source, then Update now.
Seen in our tests, 23 October 2026, Cookie Rocks.
Full detail
Some hosts rewrite REMOTE_ADDR with the visitor's address behind Cloudflare (mod_cloudflare or mod_remoteip). There, Cookie Rocks 2.7.0 with the Cloudflare source gives every visitor the strict rules, because the request no longer seems to come from Cloudflare. The 'country database on this server' source reads that visitor address and gives the right profile.
Depends on a setting · Jetpack BoostJetpack Boost Concatenate JS can run held trackers before the choice
setting “Concatenate JS” · by default: off
With Concatenate JS on, Jetpack Boost merges enqueued scripts into one /_jb_static/ file, so a held tracker can run before the choice. Cookie Rocks 2.5.1 keeps held scripts out of the merge.
Seen in our tests, 17 October 2026, Jetpack Boost 4.8.1.
Depends on a setting · WP Fastest CacheWP Fastest Cache Combine JS can run held trackers before the choice
setting “Combine JS” · by default: off
With Combine JS on, the site's head scripts are merged into one file, so a held tracker can run from it. Cookie Rocks 2.5.1 keeps held scripts out of the merged file.
Seen in our tests, 17 October 2026, WP Fastest Cache 1.5.3.
Full detail
With Combine JS on, WP Fastest Cache merges the site's own scripts in the page head into one file, whatever their type, so a tracker held by a banner can run from the merged file before the choice. Cookie Rocks 2.5.1 keeps held scripts out of the merged file.
Depends on a setting · WP-OptimizeWP-Optimize Delay JS can stop the consent banner from showing
setting “Delay JS” · by default: off
Delay JS holds every script until the first interaction, banners included, unless they carry its exclusion mark. Cookie Rocks 2.5.1 marks its scripts so they are never delayed.
Seen in our tests, 17 October 2026, WP-Optimize 4.7.0.
Full detail
With Delay JS on, WP-Optimize delays every script until the first interaction, consent banners included, unless they carry its exclusion attribute: a banner without it may not be shown or clickable. Cookie Rocks 2.5.1 marks its scripts so they are never delayed.
Depends on a setting · WP-OptimizeWP-Optimize preloading downloads held trackers before the choice
setting “Preload JavaScript files” · by default: off
With Preload JavaScript files on, the browser downloads held scripts such as Google's gtag.js early, without running them. Cookie Rocks 2.5.1 hides their address from it.
Seen in our tests, 17 October 2026, WP-Optimize 4.7.0.
Full detail
With Preload JavaScript files on, WP-Optimize adds a preload link for every script, so the browser downloads a held tracker (for example Google's gtag.js) before the choice, without running it. Cookie Rocks 2.5.1 hides the address of held scripts from it.
Good to know · W3 Total Cache, WP Super Cache, WP Fastest Cache, BreezeFour cache plugins keep the banner, and each visitor gets their own
setting “Page cache”
With W3 Total Cache, WP Super Cache, WP Fastest Cache or Breeze, the cached page keeps the Cookie Rocks banner. One visitor's choice is never served to another from the cache.
Seen in our tests, 17 October 2026, W3 Total Cache, WP Super Cache, WP Fastest Cache, Breeze 2.10.7, 3.1.4, 1.5.3, 2.6.2. Source
Full detail
With the page cache of W3 Total Cache (Disk: Enhanced), WP Super Cache (Simple mode), WP Fastest Cache or Breeze turned on, the page served from the cache keeps the Cookie Rocks banner, and each visitor gets their own banner: a choice made by one visitor is never served to another from the cache.
Depends on a setting · BreezeBreeze iframe lazy loading can stop held Vimeo videos from starting
setting “Lazy load iframes” · by default: off
With lazy loading of iframes on, Breeze rewrites embedded videos when its page cache serves them, which can stop a held Vimeo video from ever starting after consent. Cookie Rocks 2.5.1 keeps known embeds out of Breeze's list.
Seen in our tests, 17 October 2026, Breeze 2.6.2.
Good to know · AutoptimizeCookie Rocks excludes its scripts from Autoptimize automatically
Cookie Rocks marks its own scripts with data-noptimize (since 0.2.0) and adds them to Autoptimize's exclusions automatically (since 0.4.0), so Autoptimize neither aggregates nor defers them.
Read in its code, 16 October 2026, Autoptimize 3.1.16.
Good to know · AutoptimizeAutoptimize defers scripts by default but leaves held scripts alone
By default it defers scripts instead of merging them. A script held as text/plain by a consent plugin is left as it is, and tags marked to be skipped are not moved.
Read in its code, 16 October 2026, Autoptimize 3.1.16.
Full detail
With its default settings, Autoptimize does not aggregate scripts: it defers them ('Do not aggregate but defer' and 'Also defer inline JS' on), turning inline scripts into <script defer src="data:text/javascript;base64,...">. Only scripts with no type or a JavaScript type are aggregated or deferred, so a script held as text/plain by a consent plugin is left as it is. Tags carrying data-noptimize, data-cfasync or data-pagespeed-no-defer, or listed through autoptimize_filter_js_exclude, are not moved.
Good to know · BreezeBreeze serves the same cached page to visitors, whatever their consent
No consent cookie creates a variant or skips the cache. Breeze sets cookies only for logged-in users and after a comment (7 days). It has no consent signals.
Read in its code, 16 October 2026, Breeze 2.6.2.
Full detail
Breeze's page cache wraps the whole page from advanced-cache.php, so it stores the page after a consent plugin has rewritten it, the same for every visitor who is not logged in; no consent cookie creates a variant or bypasses the cache. Breeze sets cookies only for logged-in users (breeze_folder_name) and after a comment (breeze_commented_posts, 7 days). It has no WP Consent API or Consent Mode code.
Good to know · BreezeBreeze's Delay All JavaScript kept trackers held with Cookie Rocks
In a test with 2.5.0, the tracker stayed held, the banner showed and the tracker ran after Accept all. The inline variant was not tested. Since 2.5.1 Cookie Rocks is on Breeze's never-delay list.
Seen in our tests, 16 October 2026, Breeze 2.6.2.
Full detail
In a test with Breeze's Delay All JavaScript (Expert preset) and Cookie Rocks 2.5.0, the held tracker stayed held, the banner appeared and the tracker ran after Accept all. The Delay JS inline scripts variant was not tested. Since 2.5.1 Cookie Rocks also adds its own scripts to Breeze's never-delay list (filter default_scripts_gnore_from_delay).
Good to know · BreezeBreeze leaves held scripts untouched and never delays Google tags
Breeze only minifies, groups and delays normal scripts, so a script held as text/plain is left alone. Delay All JavaScript never delays scripts that contain Google tag code.
Read in its code, 16 October 2026, Breeze 2.6.2.
Full detail
Breeze minifies, groups and delays only scripts with no type or a JavaScript type: a script held as text/plain is left untouched. Delay All JavaScript recreates delayed scripts at DOMContentLoaded and never delays scripts containing gtag(, ga( or googletagmanager.com. Breeze reads no no-optimize attribute, and the default list of 'Delay JS inline scripts' (off by default) contains data-noptimize and gtag.
Depends on a setting · DebloatDebloat's Delay All Scripts can delay the banner until the first gesture
setting “Delay All Scripts” · by default: off
Its defer and delay options are off by default. Exclusions match the script text in its Exclude Scripts lists. With Delay All Scripts, add the banner's scripts to these exclusions.
What to do: With Delay All Scripts, add the consent banner's scripts to the delay exclusions, or the banner appears only after the first gesture.
Read in its code, 16 October 2026, Debloat 1.4.0.
Full detail
Debloat's Defer JS, Delay JS and Delay All Scripts are off by default. It reads no standard no-optimize attribute: exclusions match the tag text (or id:, url:) in its Exclude Scripts lists and the filters debloat/delay_js_excludes and debloat/defer_js_excludes. Delayed scripts run on mousemove, mousedown, keydown, touchstart or wheel, or after the maximum delay; Defer Inline JS turns inline scripts into data: scripts with defer.
Good to know · DebloatDebloat leaves scripts held by a consent plugin untouched
Debloat works on the page after the consent plugin and only delays ordinary scripts, so a held script stays held. It sets no cookie or browser storage on visitor pages.
Read in its code, 16 October 2026, Debloat 1.4.0.
Full detail
Debloat's output buffer starts on template_redirect at priority -999, outside a consent plugin's buffer at a higher priority, so it receives the rewritten page; it delays or defers only scripts with no type or a type containing javascript, so a script held as text/plain stays held. It does not merge scripts, has no iframe lazy loading in 1.4.0, and sets no cookie or browser storage on visitor pages.
Good to know · Jetpack BoostCookie Rocks Pro empties Jetpack Boost's page cache on save
Cookie Rocks Pro empties Jetpack Boost's page cache (action jetpack_boost_clear_page_cache_all) when its settings are saved, as it does for other page caches.
Read in its code, 16 October 2026, Jetpack Boost 4.8.1.
Good to know · Jetpack BoostJetpack Boost's Defer JavaScript keeps held scripts held
setting “Defer Non-Essential JavaScript”
It moves scripts to the end of the page but does not change their type or wait for a gesture. It works outside the consent plugin, so held scripts stay held.
Read in its code, 16 October 2026, Jetpack Boost 4.8.1.
Full detail
Jetpack Boost's Defer Non-Essential JavaScript moves every script tag without data-jetpack-boost="ignore" to just before </body>, whatever its type, but does not change type or attributes and does not wait for a user gesture. Its output buffer opens at template_redirect priority -999999, outside the consent plugin's buffer, so scripts held as text/plain stay held.
Good to know · Jetpack BoostJetpack Boost's page cache makes one copy per visitor with a consent cookie
Its cache key includes most visitor cookies, so a per-visitor consent cookie creates one cache file per visitor and page. The filter jetpack_boost_ignore_cookies goes in wp-content/boost-cache-extra.php.
Read in its code, 16 October 2026, Jetpack Boost 4.8.1.
Full detail
Jetpack Boost's page cache key includes the URL, GET parameters and all visitor cookies except a fixed list (Cloudflare, sbjs_*, _ga*, tk_ai, tk_qs...). A consent cookie with a per-visitor value therefore creates one cache file per visitor and page after the choice. The cookie filter jetpack_boost_ignore_cookies must be added in wp-content/boost-cache-extra.php, because the cache is served before plugins load. The first view without a cookie stays cached.
Good to know · LiteSpeed CacheLiteSpeed's Load JS Delayed can delay Google's consent default
setting “Load JS Deferred”
Its delay exclusions do not include gtag, so another plugin's consent default runs only at the first gesture unless excluded. Trackers held by a consent plugin stay untouched.
Read in its code, 16 October 2026, LiteSpeed Cache 7.9.1.
Full detail
LiteSpeed Cache's built-in exclusion list for combining (data/js_excludes.txt) contains gtag, gtm and dataLayer, but its list for deferred and delayed loading (js_defer_excludes.txt) does not. An inline gtag('consent','default',...) added by another plugin is therefore turned into type=litespeed/javascript under Load JS Delayed and runs only at the first gesture unless excluded. Only scripts with no type or text/javascript are processed, so trackers held as text/plain stay untouched.
Good to know · LiteSpeed CacheLiteSpeed Cache lazy loading skips held frames
Frames with no address or with data-src are left alone. Load Google Fonts Asynchronously only changes timing: the browser still contacts fonts.googleapis.com.
Read in its code, 16 October 2026, LiteSpeed Cache 7.9.1.
Full detail
LiteSpeed Cache's iframe lazy load skips an iframe with no src, or with data-src, data-no-lazy, data-skip-lazy or data-lazyloaded, and adds a noscript copy to the others. Under Load JS Delayed, iframes it processes get data-litespeed-src until the first gesture. Load Google Fonts Asynchronously only changes when Google Fonts load: the browser still contacts fonts.googleapis.com.
Good to know · NitroPackNitroPack caches the page rewritten by the consent plugin, with nobody's choice
NitroPack builds its page from a normal WordPress request. Cache is bypassed by default only for logged-in users and a few cookies, such as the cart's. It has no WP Consent API or Consent Mode code.
Read in its code, 16 October 2026, NitroPack 1.20.3.
Full detail
NitroPack builds its optimized page from a normal WordPress request made by its optimizer (X-Nitropack-Request header, Nitro-Optimizer-Agent), so the consent plugin's output buffer has already rewritten the HTML; with alwaysBuffer, NitroPack's buffer opens in advanced-cache.php and is outer. The cached page carries nobody's choice. Cache is bypassed by default only for logged-in users, comment_author, wp-postpass_ and woocommerce_items_in_cart. NitroPack has no WP Consent API or gtag('consent') code.
Good to know · SiteGround OptimizerSiteGround Optimizer serves one cached page to everyone, whatever the choice
Its file cache skips only a fixed cookie list (logged-in, carts, comment author) and never stores a response that sets a cookie. A consent cookie is not on that list.
Read in its code, 16 October 2026, SiteGround Optimizer 7.8.4.
Full detail
SiteGround Optimizer's Defer Render-blocking JavaScript adds defer, not async, to enqueued scripts, except handles excluded with sgo_js_async_exclude. Its page rewriting (combination, minification, fonts) and deferral are skipped for logged-in users. Its file cache skips requests carrying a fixed cookie list (sgo_bypass_cookies: logged-in, carts, comment author, wpSGCacheBypass) and never stores a response with Set-Cookie; a consent cookie set in the browser is not on the list, so cached pages stay the same for everyone.
Depends on a setting · Swift Performance LiteA Swift Performance Lite setting has no effect because of a misspelled name
setting “Exclude 3rd Party Scripts (Merge Scripts)”
The option that keeps third-party scripts out of Merge Scripts is never read. External scripts are served from the merged file, so a tracker a banner does not recognise loses its address.
Read in its code, 16 October 2026, Swift Performance Lite 2.3.7.3.
Full detail
In Swift Performance Lite, the setting that keeps third-party scripts out of Merge Scripts is saved as merge-scripts-exlude-3rd-party but read as merge-scripts-exclude-3rd-party, so it has no effect: external scripts are downloaded by the server and served from the site's merged file, and a tracker a banner does not recognise loses its original address in the page. Its page cache key ignores cookies and Set-Cookie headers are not cached.
Good to know · Swift Performance LiteSwift Performance Lite can merge a banner's scripts; Cookie Rocks 2.5.1 opts out
Held scripts stay in place, but a banner's own scripts are merged and may run only at the first gesture. Cookie Rocks 2.5.1 marks its tags data-dont-merge and clears Swift's cache on save.
Read in its code, 16 October 2026, Swift Performance Lite 2.3.7.3.
Full detail
Swift Performance Lite opens its output buffer when plugins load, before a banner's template_redirect buffer, so it receives the page already rewritten. Merge Scripts only merges scripts with no type or a JavaScript type, so scripts held as text/plain stay in place; the only exclusion it reads is data-dont-merge. Without it, a banner's own scripts are merged into the footer file and, with Delay Async Scripts, run only at the first gesture. Cookie Rocks 2.5.1 puts data-dont-merge on its tags and clears Swift's cache when its settings are saved.
Good to know · WP Fastest CacheWP Fastest Cache serves one cached page to every visitor, whatever the choice
It stores the page already rewritten by the consent plugin, and no consent cookie bypasses its cache by default. The free version sets no cookie and adds no third-party request.
Read in its code, 16 October 2026, WP Fastest Cache 1.5.3.
Full detail
WP Fastest Cache opens its output buffer when the plugin loads, outside a consent plugin's buffer opened at template_redirect, so it stores the page already rewritten by the consent plugin and serves the same file to every anonymous visitor (via .htaccess or PHP). No consent cookie bypasses its cache by default; a $consent_cookie variable in its rules is always empty. The free version sets no cookie and adds no third-party request on visitor pages, and it does not use WP Consent API or Consent Mode. It refuses to enable its cache while one specific consent plugin is active.
Depends on a setting · WP Fastest CacheWP Fastest Cache's CDN option also rewrites addresses in data attributes
setting “CDN” · by default: off
A local address in data-src or a consent plugin's attribute (such as data-cr-src) is moved to the CDN host too. YouTube or Vimeo embeds are not affected.
Read in its code, 16 October 2026, WP Fastest Cache 1.5.3.
Full detail
With a CDN set in WP Fastest Cache, its cdn_rewrite looks for src= without a word boundary, so a local address kept in data-src or in a consent plugin's data attribute (such as data-cr-src) is rewritten to the CDN host too. External embeds such as YouTube or Vimeo are not affected.
Depends on a setting · WP-OptimizeWP-Optimize Delay JS waits for scroll or mouse movement, not click or key
setting “Delay JS” · by default: off
There is no timeout, and scripts run one by one in page order. Its exclusion list checks script addresses only; a script written in the page needs the data-no-delay-js attribute.
Read in its code, 16 October 2026, WP-Optimize 4.7.0.
Full detail
WP-Optimize's Delay JS releases scripts only on the first scroll, mousemove, mouseover, resize, touchstart or touchmove, with no timeout and not on click or keydown; it moves each src to data-src, runs scripts one by one in document order, then dispatches fake DOMContentLoaded and load events. Its exclusion list compares src only, so an inline script can be kept out only with the data-no-delay-js attribute.
Good to know · WP-OptimizeWP-Optimize serves one cached file to every visitor
A consent cookie creates no separate version unless a developer adds it. Its only cookie, wpo_commented_post (1 week), follows a comment. Cookie Rocks 2.5.1 empties its cache on save.
Read in its code, 16 October 2026, WP-Optimize 4.7.0.
Full detail
WP-Optimize serves one cached file to every visitor; a consent cookie does not create a separate version unless a developer adds it with the wpo_cache_cookies filter. Its only cookie is wpo_commented_post (1 week, path of the post) after a visitor posts a comment, to skip the cache there. The free version adds no request to another site and has no WP Consent API or Consent Mode code. Cookie Rocks 2.5.1 empties WP-Optimize's page cache when its settings are saved.
Depends on a setting · Jetpack BoostJetpack Boost's Image CDN loads images from Automattic's servers
setting “Image CDN” · by default: off
Off by default. When on, images come from i0.wp.com on every page. Boost sets no visitor cookie; its Tracks script loads only for logged-in administrators.
Read in its code, 16 October 2026, Jetpack Boost 4.8.1.
Full detail
With Image CDN on (off by default), Jetpack Boost rewrites img tags to i0.wp.com (and i1, i2), so visitors' browsers load images from Automattic's servers on every page. Iframes are not touched. Boost itself sets no visitor cookie; the Tracks script is loaded only for logged-in administrators (Image Guide).
Set before the choice · NitroPackNitroPack sets its cookies on every page before any choice
- nitroCachedPage (session) on every page.
- nitroImpactGroup (24 hours) with the impact test on.
- np_cache_variation (session) with the 304 option.
- cje (395 days, affiliate) on cached pages if cjevent is in its ignored parameters.
Read in its code, 16 October 2026, NitroPack 1.20.3.
Full detail
NitroPack's footer script sets the session cookie nitroCachedPage (1 or 0, SameSite=Lax) on every page before any choice. With the impact test on it sets nitroImpactGroup (24 hours); with the 304 option, np_cache_variation (session). If cjevent is in its ignored parameters, it copies it into a 395-day affiliate cookie cje on cached pages. Its footer also sends a sendBeacon and a periodic heartbeat to the site itself.
Good to know · HummingbirdHummingbird can combine a tracker or the banner into its own files
A tracker combined into a Hummingbird file has an address a banner does not recognise, and the banner's script can be combined, deferred or moved. Filters such as wphb_dont_combine_handles exclude it.
Read in its code, 16 October 2026, Hummingbird 3.21.2.
Full detail
Hummingbird's free Asset Optimization works on WordPress script handles (print_scripts_array, priority 5) before any output buffer: a locally enqueued tracker can be combined into a Hummingbird file, whose address a banner does not recognise, and a banner's own handle can be combined, deferred or moved to the footer. Filters such as wphb_dont_combine_handles exclude a handle. With the WPMU DEV CDN, files come from hb.wpmucdn.com.
Depends on a setting · HummingbirdHummingbird's Delay JavaScript makes the banner wait unless excluded
setting “Delay JS” · by default: off
Off by default. Held scripts stay held, but the banner's own scripts wait for the first key, mouse, wheel or touch event, or 20 seconds, unless excluded (wphb_delay_js_exclusions).
Read in its code, 16 October 2026, Hummingbird 3.21.2.
Full detail
Hummingbird's Delay JavaScript (off by default, WPMU DEV members) rewrites each script to type="wphb-delay-type" in a buffer opened at template_redirect priority 2, so it runs after a banner's later buffer and leaves held type="text/plain" scripts untouched. It reads no common no-delay attribute, so a banner's own scripts wait for the first key, mouse, wheel or touch event or 20 seconds unless excluded (wphb_delay_js_exclusions, wphb_should_delay_js, WPHBDONOTDELAYJS).
Good to know · HummingbirdHummingbird serves the same cached page whatever the consent cookie
It sets no cookie and stores nothing in the browser. Its page cache is written after the banner's processing, and a consent cookie does not create a separate version.
Read in its code, 16 October 2026, Hummingbird 3.21.2.
Full detail
Hummingbird sets no cookie and stores nothing in the browser on visitor pages. Its page cache serves the same page to every anonymous visitor, written after the banner's processing; only wp-postpass_, comment_author_, wordpress_logged_in_ and wphb_cache_* cookies create variants, so a consent cookie does not. It has no iframe lazy loading (only comments).
Depends on a setting · Flying ScriptsFlying Scripts' gtag keyword can also delay the banner's consent script
setting “Include keywords (flying_scripts_include_list)” · by default: empty
The keyword also matches the consent plugin's own head script, so Google's default consent would wait for the first interaction, and delayed scripts run in no set order.
What to do: Use a precise address such as googletagmanager.com/gtag/js as the keyword.
Read in its code, 16 October 2026, Flying Scripts 1.2.5.
Full detail
The keyword "gtag" suggested in Flying Scripts' FAQ also matches any inline script containing that word, such as a consent plugin's head script that sets Google's default consent: it would wait for the first interaction, and delayed scripts run with no guaranteed order. Flying Scripts has no exclusion attribute or filter.
Good to know · Flying ScriptsFlying Scripts never touches scripts held by a consent plugin
setting “Include keywords (flying_scripts_include_list)” · by default: empty
By default it delays nothing. It only delays ordinary scripts matching its keywords, until the first interaction or 5 seconds. It sets no cookie and adds no third-party request.
Read in its code, 16 October 2026, Flying Scripts 1.2.5.
Full detail
Flying Scripts only delays scripts whose tag matches one of its keywords (empty list by default, so nothing is delayed), and only scripts with no type or type text/javascript: a script held by a consent plugin as type="text/plain" is never touched. Its output buffer opens at plugin load, so it rewrites the page after a banner's later buffer. Delayed scripts run on the first click, mouse move, key, touch or wheel, or after 5 seconds. It sets no cookie and adds no third-party request.
Good to know · CloudflareThe Cloudflare plugin adds nothing to visitor pages
It adds no script, style or cookie and does not use WP Consent API. It clears the APO cache on content changes, not when another plugin saves its settings.
Read in its code, 16 October 2026, Cloudflare 4.14.5.
Full detail
The Cloudflare plugin adds no script, style or cookie to visitor pages and does not use WP Consent API; it only sends a cf-edge-cache header telling APO whether the page may be cached. It purges APO on content publication or change, comments, theme switch and Customizer save, not when another plugin saves its settings. Its purge filters (cloudflare_purge_everything_actions, cloudflare_purge_url_actions) are read when the plugin loads; a public method, Hooks::purgeCacheEverything(), purges the whole zone.
Good to know · Cookie Rocks ProCookie Rocks Pro clears page caches when an update changes banner values
It clears the caches of seven known plugins, such as WP Rocket and LiteSpeed Cache, at the first request after the update. Host and CDN caches keep the old pages until they expire.
What to do: After an update that changes banner defaults, clear the host or CDN cache by hand.
Read in its code, 15 October 2026, Cookie Rocks Pro.
Full detail
When an update of Cookie Rocks Pro changes or removes a value it sends to visitors (for example the default accent colour), Pro clears the known page caches (WP Rocket, LiteSpeed Cache, W3 Total Cache, WP Super Cache, SiteGround Optimizer, WP Fastest Cache, Breeze) at the first request after the update, with no extra database query and nothing more for visitors. An added value clears nothing. Host and CDN caches are not cleared and keep the old pages until they expire.
Good to know · WP Fastest Cache, BreezeCookie Rocks Pro clears WP Fastest Cache and Breeze page caches on save
Also when an update changes a default sent to visitors. Breeze's purge also clears its minified files and object cache, and Varnish or Cloudflare only if set up in Breeze.
Seen in our tests, 15 October 2026, WP Fastest Cache, Breeze 1.5.3 (WP Fastest Cache), 2.6.2 (Breeze).
Full detail
Cookie Rocks Pro clears the page caches of WP Fastest Cache (wpfc_clear_all_cache, pages only) and Breeze (action breeze_clear_all_cache) when its settings are saved and when an update changes a default sent to visitors. Breeze's purge also clears its minified files and its object cache; it purges Varnish and Cloudflare only if they are set up in Breeze, with no extra network request otherwise.
Good to know · LiteSpeed Cache, W3 Total Cache, SiteGround Optimizer, AutoptimizeCache plugins' JavaScript options keep the Cookie Rocks banner first
With LiteSpeed Cache, W3 Total Cache, SiteGround Optimizer or Autoptimize combining or delaying scripts, the banner script stays first and untouched, and trackers are held until Accept all.
Seen in our tests, 15 October 2026, LiteSpeed Cache, W3 Total Cache, SiteGround Optimizer, Autoptimize 7.9.1, 2.10.7, 7.8.4, 3.1.16.
Full detail
With JavaScript combined, minified or delayed (LiteSpeed Cache including Guest Mode and Load JS Delayed, W3 Total Cache minify in auto mode, SiteGround Optimizer combine and async, Autoptimize aggregate including inline JS), the Cookie Rocks head script stays first and untouched, its engine stays a separate file, and trackers are held until Accept all. Without a LiteSpeed web server, LiteSpeed Cache sets no cookie.
Good to know · BreezeBreeze does not cache pages for non-browser visitors
Breeze does not cache pages requested with a non-browser user agent (for example node) or with the header Accept-Language: *. A cache test that does not send a real browser user agent sees no cached page at all.
Seen in our tests, 15 October 2026, Breeze 2.6.2.
Depends on a setting · WP Super CacheWP Super Cache skips its cache for visits with ad and campaign parameters
setting “Ignore tracking parameters” · by default: off
By default, pages with gclid, fbclid or utm_ parameters are built again on every visit. Its option to ignore them serves the cached page, but server-filled form fields lose them.
Seen in our tests, 9 October 2026, WP Super Cache.
Full detail
By default, WP Super Cache does not serve a cached page when the address carries ad or campaign parameters (gclid, fbclid, utm_...): WordPress builds the page again on every such visit (its rewrite rules require an empty query string). Its option to ignore tracking parameters makes these visits get the cached page; its list can be extended with gad_source, gbraid, wbraid, msclkid and srsltid. A form field filled on the server with the page address then loses these parameters, while values read in the browser (a cookie set by a tag, a field filled by script) keep them.
Light as a pebble
11.43 kB once, 1.00 kB per page. Measured, not promised.
lighter than the font on this page*
Every kilobyte costs your visitors time and costs you Core Web Vitals. Cookie Rocks adds 11.43 kB to the first page a visitor opens, then 1.00 kB to each page after that, because its files stay in the browser cache. It calls no outside server and never shifts your layout.

11.43 kB First visit, in total
1.00 kB Each next page
7.74 kB JavaScript, first visit
3.48 kB Stylesheet, first visit
0 Requests to other servers
0 Layout shift caused
* The font on this page is Inter, compressed and cut down to the Latin alphabet. It still weighs 26.23 kB.
Page cache
Other plugins of the same kind.
Questions
What about my host’s cache or a CDN?
A cache in front of WordPress, at your host or on a CDN, is outside any plugin’s reach. Clear it by hand after changing what visitors see.
Does the free Audit add anything to cached pages?
No. The Audit adds no script and no style to your visitors’ pages, so there is nothing to exclude and nothing to clear.
What happens after the 30-day trial?
The banner, your visitors’ choices and your proofs of consent keep working. Without a key, most settings lock, updates and support stop. Take a key at any time and everything opens again.
For cached sites
Keep your cache, add consent.
same page for everyone
Every feature of the complete plugin on your cached site for 30 days, no card.
- During the trial: everything, including the full settings and the scans
- After 30 days without a key: the banner, your visitors’ choices and your proofs of consent keep working
- What waits for a key: most settings, updates and support

Get your trial key
Your e-mail and your site. Your key arrives as soon as you confirm your e-mail.