Skip to content

Works with your stack

Cookie consent that works with your page cache

same page for everyone

← Cookie Rocks for your stack

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.

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.

    NameKept inCategoryWhat it is for
    wpo_commented_postcookieNecessaryShows 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.

    NameKept inCategoryWhat it is for
    nitroCachedPagecookieNecessaryTells 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.

  • 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.

  • 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 · 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 · 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.

  • 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 · 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.

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

How the trial works, in detail

Get your trial key

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

One trial per domain. Local and staging sites never use up your key.

We keep your e-mail address to send your key and help you with it, as explained in our privacy policy. No newsletter, nothing else.