Works with your stack
Cookie banner for an online shop
the checkout never waits
A shop has two kinds of cookies. Some keep the cart, the account and the payment working: they need no consent. Others record where each order comes from or feed ad pixels: they wait for a yes. The banner has to hold the second kind without ever standing between a customer and the checkout.

Cookie Rocks Pro The complete plugin, every feature, free for 30 days. Here is what matters most for this kind of site. An optional setting lets payment and anti-fraud scripts load without consent only on cart, checkout and account pages, and holds them everywhere else. Some plugins load several tools from one script, like PixelYourSite or Pixel Manager for WooCommerce. Each tool waits for its own consent: allowing the Meta Pixel does not start Google or Microsoft. When consent is withdrawn, their cookies are removed, from the first visit. Default and update set at the very top of the page, on every page view. Basic or advanced mode, with a recommendation for your site. Kept in sync on every page view, so Site Kit, WooCommerce and other plugins never read a stale choice. The visitor accepts, and the held tools start right there, on the same page, without a reload: the video plays, the map appears, the visit is counted. Allowing only Google reCAPTCHA or hCaptcha from a form reloads the page once, and what the visitor typed stays in the form. After consent, held scripts download together, then run in the order of the page. Some cookies appear only after a click, a sign-in or a payment. Cookie Rocks reads the code of your theme and plugins to find their names, and in Cookie Rocks Pro, Record a visit notes the cookies and keys your site writes while you use it.What Cookie Rocks Pro does for online shops
Strict payments
One plugin, several tools
Google Consent Mode v2
WP Consent API
Back at once after consent
Cookies a scan cannot see
Plugins that online shops often use
Each one is tested with Cookie Rocks: what it loads in the browser, and what waits for the visitor’s choice. Open a card for the details.
What matters for consent with online shops
Cart, account and checkout
The cookies that keep the cart, the customer account and the order are necessary. They need no consent, and nothing should hold them.
Order attribution
WooCommerce notes where each visit comes from, such as a search, an ad or a newsletter, and attaches it to the order. That is marketing, and it needs consent.
Payment scripts beyond the checkout
Stripe and PayPal scripts load on product and cart pages too, for express buttons and pay-later messages, and fraud checks come with them. Under EU law, on other pages, they should wait for consent: the strict payments setting holds them there.
Protected pages
On the cart, the checkout and the customer account, payment and anti-fraud scripts load untouched. The rule depends on the page, not on the visitor, so every visitor gets the same cached page.
Pixels for shops
Meta, TikTok and Google extensions for shops add tags of their own on top of WooCommerce. Cookie Rocks holds the pixel plugins it knows until the visitor accepts marketing.
What our tests found on online shops
Set before the choice · Google for WooCommerceGoogle for WooCommerce's badge waits only with WP Consent API
With WP Consent API it waits for marketing consent. Without it, the script loads at once on every page.
Seen in our tests, 5 November 2026, Google for WooCommerce 3.10.0.
Full detail
Google for WooCommerce 3.10.0 creates its reviews badge script www.gstatic.com/shopping/merchant/merchantwidget.js in JavaScript. With the WP Consent API plugin active, the script waits for marketing consent and loads after Accept without a reload, and nothing loads after Refuse. Without that plugin it loads at once on every page.
Depends on a setting · Google for WooCommerceGoogle for WooCommerce adds its own consent default after the banner's
Once a Google Ads conversion exists, its tag loads on every page with its own default consent for 32 European countries, set after the consent banner's default.
What to do: Return an empty string from woocommerce_gla_gtag_consent so only the consent plugin sets the defaults.
Read in its code, 5 November 2026, Google for WooCommerce 3.10.0.
Full detail
Google for WooCommerce adds gtag.js with its AW- ID to every page once a Google Ads conversion action exists, at wp_head priority 999999, with its own gtag('consent','default'): ad_storage, analytics_storage, ad_user_data and ad_personalization denied for 32 European countries (EU, IS, LI, NO, GB, CH), wait_for_update 500. It arrives after a banner's default; the filter woocommerce_gla_gtag_consent replaces or removes it, and woocommerce_gla_disable_gtag_tracking removes the whole tag. The filter woocommerce_gla_gtag_consent changes or empties that default.
Good to know · WooCommerceThe wc key of WooCommerce is a storage test
WooCommerce: wc is written then deleted at once (storage test), nothing stays.
Name Kept in Category What it is for wclocalStorage Necessary Checks that browser storage works, deleted at once wcsessionStorage Necessary Checks that browser storage works, deleted at once Read in its code, 4 November 2026, WooCommerce.
Full detail
WooCommerce cart fragments write wc = test in local and session storage and delete it in the same statement, to check that storage works. Nothing stays. The Audit 2.9.11 lists wc as an unknown key; a key written and deleted at once should not be listed.
Set before the choice · Pixel Manager for WooCommerceCookie Rocks lets Pixel Manager follow the choice when it waits itself
Explicit Consent on and both Consent Modes off: Pixel Manager follows the choice itself; otherwise Cookie Rocks holds it and names the setting.
Seen in our tests, 4 November 2026, Pixel Manager for WooCommerce 1.72.0.
Full detail
With the WP Consent API on, Cookie Rocks 2.9.14 no longer holds Pixel Manager for WooCommerce when Explicit Consent is on and its Google and Microsoft UET Consent Modes are off: on an EU site nothing was sent before the choice or after Reject all, and all ten pixels started on Accept all without a reload. With a Consent Mode on, it keeps holding Pixel Manager and the dashboard names the setting to change. On a site that targets only Switzerland, Pixel Manager runs and Google and UET start in denied mode.
Set before the choice · Pixel Manager for WooCommerceWith the WP Consent API on, Cookie Rocks holds Pixel Manager until consent
Nothing before the choice or after a refusal; all ten pixels start at once on Accept all.
Seen in our tests, 4 November 2026, Pixel Manager for WooCommerce 1.71.0.
Full detail
With the WP Consent API on, Cookie Rocks 2.9.12 held Pixel Manager for WooCommerce 1.71.0: before the choice and after Reject all, none of its ten pixels sent anything and no tracking cookie was set, _uetmsdns included. After Accept all, all ten started at once, without a reload.
Set before the choice · Pixel Manager for WooCommercePixel Manager with Explicit Consent and both Consent Modes off waits
Explicit Consent on, both Consent Modes off: nothing before the choice or after a refusal; all ten pixels on Accept all.
Seen in our tests, 4 November 2026, Pixel Manager for WooCommerce 1.72.0.
Full detail
In Pixel Manager for WooCommerce 1.72.0 (free) with Explicit Consent on and its Google Consent Mode and Microsoft UET Consent Mode settings off, nothing was sent and no cookie was set before the choice, with the WP Consent API in opt-in and the plugin not held by the banner. After Reject all nothing was sent; after Accept all its ten pixels started at once, without a reload.
See the 58 other findings
Set before the choice · Pixel Manager for WooCommerceExplicit Consent alone does not stop Pixel Manager's Google and UET
The Consent Mode settings, on by default, start Google and UET before the choice even with Explicit Consent.
Seen in our tests, 4 November 2026, Pixel Manager for WooCommerce 1.72.0.
Full detail
With Explicit Consent on but its Google and Microsoft UET Consent Mode settings left on (the default), Pixel Manager for WooCommerce 1.72.0 still loaded the Google tag and Microsoft UET before the choice, sent a GA4 page view with gcs=G100 and UET hits, and set _uetmsdns with an empty value. The other pixels waited.
Set before the choice · Pixel Manager for WooCommercePixel Manager starts Google and UET before the choice, even with opt-in
Google and UET start with denied signals before the choice (page view, client ID, _uetmsdns empty); the eight other pixels wait.
Seen in our tests, 4 November 2026, Pixel Manager for WooCommerce 1.71.0.
Full detail
With the WP Consent API on, consent type optin and no choice made yet, Pixel Manager for WooCommerce 1.71.0 still loaded the Google tag for GA4 and Google Ads and sent a GA4 page view with gcs=G100, a client ID and the page address. It also loaded Microsoft UET and sent hits with asc=D, and set _uetmsdns with an empty value. Meta, TikTok, Pinterest, Snapchat, Reddit, OpenAI and Hotjar waited. After a refusal nothing more was sent; after an acceptance all ten pixels started without a reload.
Good to know · WooCommerceWhat WooCommerce stores in visitors' browsers
WooCommerce: 11 cookie(s) or browser key(s) for visitors, recognised by Cookie Rocks from 2.9.8.
Name Kept in Category What it is for WOOCOMMERCE_CHECKOUT_IS_CUSTOMER_DATA_DIRTYlocalStorage Necessary Keeps the shopping cart and the checkout working storeApiCartHashlocalStorage Necessary Keeps the shopping cart and the checkout working storeApiNoncelocalStorage Necessary Keeps the shopping cart and the checkout working wc_cart_createdsessionStorage Necessary Keeps the shopping cart and the checkout working woocommerce_geo_hashcookie Necessary Serves the cached page that matches the visitor's country (taxes, shipping) woo-sharecookie Necessary Lets a visitor with a share link see a store that is not launched yet tk_aicookie Statistics Anonymous identifier for WooCommerce usage statistics (Automattic Tracks) tk_lrcookie Statistics Automattic Tracks usage statistics (referrer) tk_orcookie Statistics Automattic Tracks usage statistics (original referrer) tk_r3dcookie Statistics Automattic Tracks usage statistics tk_tccookie Statistics Automattic Tracks usage statistics (session) Read in its code, 2 November 2026, WooCommerce.
Full detail
WooCommerce can store 11 cookies or browser keys for visitors: WOOCOMMERCE_CHECKOUT_IS_CUSTOMER_DATA_DIRTY, storeApiCartHash, storeApiNonce, wc_cart_created, woocommerce_geo_hash, woo-share, tk_ai, tk_lr, tk_or, tk_r3d, tk_tc. Cookie Rocks recognises them from 2.9.8 and lists them in the cookie policy, each with its category and purpose, when it sees them.
Good to know · WooPaymentsWhat WooPayments stores in visitors' browsers
WooPayments: 2 cookie(s) or browser key(s) for visitors, recognised by Cookie Rocks from 2.9.8.
Name Kept in Category What it is for wcpay_express_checkout_redirect_urlcookie Necessary Keeps an express payment going skip_woopaycookie Necessary Keeps an express payment going Read in its code, 2 November 2026, WooPayments.
Full detail
WooPayments can store these in a visitor's browser: wcpay_express_checkout_redirect_url (cookie, necessary: Keeps an express payment going); skip_woopay (cookie, necessary: Keeps an express payment going). 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 · WooCommerce Stripe Payment GatewayWhat WooCommerce Stripe Payment Gateway stores in visitors' browsers
WooCommerce Stripe Payment Gateway: 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 wc_stripe_express_checkout_redirect_urlcookie Necessary Keeps an express payment (Apple Pay, Google Pay) going Read in its code, 2 November 2026, WooCommerce Stripe Payment Gateway.
Full detail
WooCommerce Stripe Payment Gateway can store these in a visitor's browser: wc_stripe_express_checkout_redirect_url (cookie, necessary: Keeps an express payment (Apple Pay, Google Pay) going). 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 · WooCommerce PayPal PaymentsWhat WooCommerce PayPal Payments stores in visitors' browsers
WooCommerce PayPal Payments: 2 cookie(s) or browser key(s) for visitors, recognised by Cookie Rocks from 2.9.8.
Name Kept in Category What it is for axoEnvlocalStorage Necessary Keeps the PayPal fast checkout (Fastlane) going axoOriginalCheckoutFieldslocalStorage Necessary Keeps the PayPal fast checkout (Fastlane) going Read in its code, 2 November 2026, WooCommerce PayPal Payments.
Full detail
WooCommerce PayPal Payments can store these in a visitor's browser: axoEnv (localStorage, necessary: Keeps the PayPal fast checkout (Fastlane) going); axoOriginalCheckoutFields (localStorage, necessary: Keeps the PayPal fast checkout (Fastlane) going). 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 · Facebook for WooCommerceWhat Facebook for WooCommerce stores in visitors' browsers
Facebook for WooCommerce: 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 wc_facebook_signals_seen_event_idssessionStorage Marketing Avoids sending the same event twice to Meta Read in its code, 2 November 2026, Facebook for WooCommerce.
Full detail
Facebook for WooCommerce can store these in a visitor's browser: wc_facebook_signals_seen_event_ids (session, marketing: Avoids sending the same event twice to Meta). 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 2.9.5 tested on PHP, WooCommerce and multisite
- No PHP error on PHP 7.4 and 8.3.
- WooCommerce cart and checkout work before and after the choice.
- Multisite: settings, choice cookie and tables per site.
- Uninstall removes options, tables, task and files.
Seen in our tests, 1 November 2026, Cookie Rocks.
Full detail
Cookie Rocks 2.9.5 with the Audit and Pro showed no PHP error on PHP 7.4 and 8.3. On WooCommerce, cart and checkout work before and after the choice, and strict payments keep Stripe out of other pages only. On a multisite network, settings, the choice cookie (cr_consent_2) and tables are per site, including sites created later. Uninstall removes options, tables, the scheduled task and files.
Set before the choiceCookie Rocks Pro holds both Meta plugins, server cookies included
No _fbp or _fbc cookie is set and nothing goes to Meta before the choice. After consent, the held events are released once, without a reload.
Seen in our tests, 18 October 2026.
Full detail
With Cookie Rocks Pro, Meta Pixel for WordPress and Meta for WooCommerce set no _fbp or _fbc cookie from the server for a new visitor, even with fbclid in the address, and the page makes no request to facebook.com or connect.facebook.net before the choice, fbevents.js included. After Accept all or allowing the Meta Pixel service alone, the held events were released without a reload: one fbq('init'), a PageView, and _fbp, _fbc and wc_facebook_signals_state=active set by the page.
Set before the choiceCookie Rocks releases held Meta events on the same page after consent
The queued page view is sent, _fbp (and _fbc with fbclid) is set and the pixel starts once, without a reload. On next pages the server still sets no Meta cookie.
Seen in our tests, 18 October 2026.
Full detail
After Accept all, or after allowing the Meta Pixel alone, Cookie Rocks releases the held events of Meta Pixel for WordPress and Meta for WooCommerce on the same page, without a reload: the queued PageView is sent, _fbp (and _fbc with fbclid) is set, and fbq('init') runs once. On the next pages the server still sets no _fbp or _fbc cookie.
Set before the choiceWithdrawing consent removes Meta cookies set by both Meta plugins
With both Meta plugins, CookieRocks.rejectAll() after Accept all reloaded the page, removed _fbp and _fbc, and no request went to Meta afterwards.
Seen in our tests, 18 October 2026.
Good to knowWithdrawing consent removes Meta cookies and the signal state cookie
After Reject all, the page reloaded and removed _fbp, _fbc and wc_facebook_signals_state. Only the consent cookie stayed, and nothing went to Meta afterwards.
Seen in our tests, 18 October 2026.
Full detail
With Meta Pixel for WordPress or Meta for WooCommerce, CookieRocks.rejectAll() after Accept all reloaded the page and removed _fbp, _fbc and wc_facebook_signals_state; only the consent cookie stayed on the site and no request went to Meta afterwards. On a plain page without a Meta plugin, the purge list of the page (crConfig.pg) is absent.
Sent from your server · Facebook for WooCommerceFacebook for WooCommerce sets _fbp and _fbc from the server unless held
Holding comes from a filter or a cookie. While held, events wait and no cookie is set; a release sends them and the page then sets _fbp and _fbc.
Read in its code, 18 October 2026, Facebook for WooCommerce 3.7.8. Source
Full detail
Facebook for WooCommerce sets _fbp and _fbc from the server with setcookie() when they are missing, before any choice, unless its signals are held. The held state comes from the PHP filter facebook_signals_held (since 3.6.0) or the cookie wc_facebook_signals_state. While held, events are queued and no cookie is set; window.fbwcsignal.release() then sends the queue, and the page sets _fbp and _fbc from the values returned by the server.
Depends on a setting · Meta for WooCommerceMeta for WooCommerce releases held events with matching event IDs
The server and browser page views share one event ID. Without an access token, the release fails and nothing is released.
Seen in our tests, 18 October 2026, Meta for WooCommerce 3.7.8.
Full detail
When Meta for WooCommerce releases held events (POST to admin-ajax, action facebook_release_signals), the PageView it sends to its server carries the same event ID as the PageView the browser sends to facebook.com/tr. Without an access token, the release request fails with 'Plugin not configured.' and nothing is released.
Good to know · Meta for WooCommerceMeta for WooCommerce release can delay the pixel by several seconds
Without an access token nothing is released. With one, the pixel started 7 to 19 seconds after the click in our tests.
Seen in our tests, 18 October 2026, Meta for WooCommerce 3.7.8.
Full detail
Meta for WooCommerce releases held events only when it has an access token: without one, the release request answers 'Plugin not configured.' and nothing is released. With a token, its admin-ajax release waits for Meta's Conversions API before answering, so the pixel started 7 to 19 seconds after the click in our tests.
Good to know · Meta for WooCommerceMeta for WooCommerce release can fail on pages cached too long
It sends a WordPress security code that expires after 12 to 24 hours, so the release is refused on a page cached longer than that.
Read in its code, 18 October 2026, Meta for WooCommerce 3.7.8.
Full detail
window.fbwcsignal.release() sends a WordPress nonce printed in the page (security parameter, checked with check_ajax_referer). A WordPress nonce expires after 12 to 24 hours, so on a page served from a cache older than that the release request is refused: this public release API is fragile with page caches.
Good to knowCookie Rocks reloads the page only on withdrawal or captcha-only consent
- Accepting does not reload: held tools start at once.
- Withdrawing a consent reloads, because a script that has run can only stop that way.
- Allowing only reCAPTCHA or hCaptcha reloads, since a form needs it from page load.
- Tools that read consent on page load get the signal on the same page.
Seen in our tests, 18 October 2026.
Full detail
When a visitor accepts, Cookie Rocks does not reload the page: held tools start at once. The page reloads in two cases only: when the visitor withdraws a consent already given, because a script that has already run can only be stopped by a reload; and when the visitor allows only reCAPTCHA or hCaptcha, which a form needs from page load. Tools that read consent on page load, such as Pixel Manager for WooCommerce without WP Consent API, get the consent signal on the same page instead.
Set before the choice · Pixel Manager for WooCommerceCookie Rocks holds all of Pixel Manager for WooCommerce until marketing consent
In the test, none of its ten pixels loaded before the choice. Allowing Meta Pixel alone loaded none of them, Meta included.
Seen in our tests, 18 October 2026, Pixel Manager for WooCommerce 1.70.0.
Full detail
Cookie Rocks holds the script of Pixel Manager for WooCommerce (pmw-public.p1.min.js) and its pmwDataLayer settings under one service, pixel-manager-for-woocommerce, in the marketing category. In the test, nothing from the ten pixels set up in Pixel Manager loaded before the choice, and allowing the Meta Pixel service alone loaded none of them, Meta included.
Depends on a setting · Pixel Manager for WooCommerceCookie Rocks passes the choice to Pixel Manager without a reload
In the test, Accept all started all ten pixels without a reload, with or without the WP Consent API plugin, and again on the next page.
Seen in our tests, 18 October 2026, Pixel Manager for WooCommerce 1.70.0.
Full detail
Without the WP Consent API plugin, Cookie Rocks adds a relay to the inline script pmw-js-before that sends its choice to Pixel Manager for WooCommerce through the wp_listen_for_consent_change event. In the test, Accept all started all ten pixels set up in Pixel Manager without a reload, and all ten started again on the next page view. With the WP Consent API plugin installed, the relay was not added and Accept all also started all ten without a reload.
Depends on a setting · Pixel Manager for WooCommerceWithdrawing marketing stops Pixel Manager's pixels at once
Cookie Rocks sent deny right away: Pixel Manager set its consent to false and Google got denied signals. On the next page none of the ten pixels loaded.
Seen in our tests, 18 October 2026, Pixel Manager for WooCommerce 1.70.0.
Full detail
When the visitor withdrew marketing after Accept all, Cookie Rocks sent deny to Pixel Manager for WooCommerce at once: Pixel Manager set its statistics, marketing and preferences consent to false, and Google Consent Mode updates with ad_storage and analytics_storage denied were pushed to dataLayer. On the next page none of the ten pixels loaded.
Depends on a setting · Pixel Manager for WooCommerceStatistics-only consent starts GA4 but keeps Pixel Manager held
The hard-coded GA4 tag loaded without a reload. Pixel Manager stayed held as marketing, so its own GA4 and pixels did not load.
Seen in our tests, 18 October 2026, Pixel Manager for WooCommerce 1.70.0.
Full detail
On a page with Pixel Manager for WooCommerce and a hard-coded GA4 tag, a visitor who saved statistics only got the hard-coded GA4 tag without a reload: gtag.js, a /g/collect hit and the _ga cookies. Pixel Manager stayed held as a marketing service, so its own GA4 and its marketing pixels did not load, and it received statistics allow, marketing deny through the relay.
Set before the choice · Pixel Manager for WooCommerceWithdrawing marketing erases Pixel Manager's cookies on the site
The page reloaded and every first-party cookie of the ten pixels was removed, even on a first visit. Cookies on the providers' own domains are out of reach of a site script.
Seen in our tests, 18 October 2026, Pixel Manager for WooCommerce 1.70.0.
Full detail
Withdrawing marketing after Accept all reloaded the page and removed every first-party cookie set by the ten pixels of Pixel Manager for WooCommerce, including _rdt_uuid, __oaiq_consent and __obref, even on the very first page view of a new site. Only the consent cookie of Cookie Rocks stayed on the site; cookies on the providers' own domains are out of reach of a site script.
Depends on a setting · Pixel Manager for WooCommercePixel Manager acts on consent events even without WP Consent API
It keeps its own consent state by category. On a deny for all, it sent Google every storage type denied except security.
Seen in our tests, 18 October 2026, Pixel Manager for WooCommerce 1.70.0.
Full detail
Pixel Manager for WooCommerce keeps its consent state in window.pmw.consent (categories statistics, marketing, preferences, necessary) and acts on the wp_listen_for_consent_change event even when the WP Consent API plugin is not installed. On a deny for all three categories, it pushed Google Consent Mode updates with every storage type denied except security_storage.
Set before the choice · Pixel Manager for WooCommercePixel Manager starts Google and Microsoft UET while its own consent is denied
It relies on Consent Mode: hits are sent with denied signals and UET writes the _uetmsdns cookie. Its other pixels wait for its consent state.
Seen in our tests, 18 October 2026, Pixel Manager for WooCommerce 1.70.0.
Full detail
Pixel Manager for WooCommerce starts the Google tag (GA4 and Google Ads) and Microsoft UET as soon as its script runs, even while its own marketing and statistics consent is denied. It relies on Consent Mode: the GA4 hit is sent with gcs=G100, the UET hits with asc=D, and UET writes the _uetmsdns cookie. The other pixels (Meta, TikTok, Pinterest, Snapchat, Reddit, OpenAI, Hotjar) wait for its consent state.
Good to know · Pixel Manager for WooCommercePixel Manager for WooCommerce starts all its pixels from two scripts
One inline script holds every pixel ID and one local script loads a part per pixel. In a test, ten pixels started this way, with no separate tag per service.
Seen in our tests, 18 October 2026, Pixel Manager for WooCommerce 1.70.0.
Full detail
Pixel Manager for WooCommerce (free) prints one inline script, window.pmwDataLayer, that holds the IDs of every pixel set up in the plugin, and one local script, pmw-public.p1.min.js, that loads a chunk per pixel. In a test with ten pixels set up (GA4, Google Ads, Meta, Microsoft UET, TikTok, Pinterest, Snapchat, Reddit, OpenAI, Hotjar), all ten started from these two scripts. The page has no separate script tag per service.
Good to know · Pixel Manager for WooCommercePixel Manager loads no pixel for automated browsers and known bots
A default headless scan therefore sees none of its pixels, although real visitors get them.
Seen in our tests, 18 October 2026, Pixel Manager for WooCommerce 1.70.0.
Full detail
Pixel Manager for WooCommerce loads no browser pixel when navigator.webdriver is true or when the user agent matches its bot list (Googlebot, bingbot and others). An automated scan with a default headless browser therefore sees none of its pixels, although real visitors get them.
Depends on a setting · Pixel Manager for WooCommercePixel Manager for WooCommerce reads consent through WP Consent API
With the WP Consent API plugin, consent started all its pixels without a reload. Without that plugin, only Google and Microsoft UET started; the other pixels stayed off.
Seen in our tests, 18 October 2026, Pixel Manager for WooCommerce 1.70.0.
Full detail
Pixel Manager for WooCommerce reads consent through the WP Consent API (wp_consent_type and the wp_listen_for_consent_change event). With the WP Consent API plugin installed, a consent given on the page started all its pixels without a reload. Without that plugin and with wp_consent_type set to optin, only Google and Microsoft UET started after consent; the other pixels stayed off.
Depends on a setting · Microsoft ClarityClarity's Brand Agents loads a Microsoft script and sets a cookie on stores
setting “Brand Agents” · by default: not connected
With Brand Agents connected and front-end injection on, a script loads from an Azure address on every front page for visitors not logged in. On WooCommerce stores, brandagent_attrs is set for 2 hours.
Read in its code, 16 October 2026, Microsoft Clarity 0.10.35.
Full detail
With Brand Agents connected and front-end injection on, the Microsoft Clarity plugin loads a script module from adsagentclientafd-b7hqhjdrf3fpeqh2.b01.azurefd.net on every front page for visitors who are not logged in. On WooCommerce stores, a REST endpoint called by that script sets the brandagent_attrs cookie for 2 hours (session, customer and conversation IDs, Clarity data, language, currency, country).
Good to know · JetpackWooCommerce Analytics assumes consent when WP Consent API is missing
It checks for statistics consent before each event. Without WP Consent API, its requests to pixel.wp.com and stats.wp.com are sent for every visitor.
Read in its code, 16 October 2026, Jetpack 16.3.1.
Full detail
WooCommerce Analytics (Jetpack module, on with WooCommerce) checks wp_has_consent('statistics') before each event, on the server and in the browser. Without WP Consent API, consent is assumed and pixel.wp.com/t.gif and stats.wp.com/s-*.js are sent for every visitor.
Set before the choice · KlaviyoKlaviyo sends checkout details to Klaviyo even when its addresses are held
On the WooCommerce checkout, scripts served by the site set __kla_id (email and name, 2 years) and send profile data when the email or name is typed, or on load for logged-in customers.
Read in its code, 16 October 2026, Klaviyo 3.8.3.
Full detail
On the WooCommerce checkout, wck-started-checkout.js (classic) and includes/blocks/build/events.js (block checkout), both served by the site, set the __kla_id cookie (base64 of email, first and last name, 2 years) and POST profile and Started Checkout data to a.klaviyo.com/client/profiles/ and client/events/ without klaviyo.js: on load for a logged-in customer, otherwise when the email or name is typed. Holding Klaviyo's own addresses does not stop them.
Sent from your server · KlaviyoKlaviyo's server sends Added to Cart events while __kla_id exists
Without the cookie nothing is sent, so removing __kla_id on withdrawal stops it.
Read in its code, 16 October 2026, Klaviyo 3.8.3.
Full detail
When a product is added to the cart and the __kla_id cookie is present, the Klaviyo plugin's server sends an Added to Cart event to a.klaviyo.com/client/events/ (wp_remote_post). Without the cookie nothing is sent, so removing __kla_id on withdrawal stops it.
Sent from your server · Matomo for WordPressMatomo for WordPress sends WooCommerce carts and orders from the server
setting “Track ecommerce” · by default: on
With Track ecommerce on (default), carts and orders are sent from PHP in some cases, with no consent check. A browser-side consent signal does not hold these hits. The server tracker sets no cookie.
Read in its code, 16 October 2026, Matomo for WordPress 5.13.1.
Full detail
With Track ecommerce on (default), Matomo for WordPress sends WooCommerce carts and orders from PHP during AJAX or REST requests, in Tag Manager mode, or with MATOMO_TRACK_ECOMMERCE_SERVER_SIDE, with no consent check in that code; the PHP tracker sets no cookie but reads _pk_id. A browser-side consent signal does not hold these hits. Use server generated Visitor ID (off by default) starts the WooCommerce session for visitors without _pk_id.
Sent from your server · Mailchimp for WooCommerceMailchimp for WooCommerce sends the typed email to the site before any order
setting “Cart tracking” · by default: all
With cart tracking on (the default), leaving the email field sets mailchimp.cart.current_email and sends the address to the site. The server then passes cart data to Mailchimp.
Read in its code, 16 October 2026, Mailchimp for WooCommerce 6.3.
Full detail
With cart tracking on (all, by default), Mailchimp for WooCommerce's site script sets the session cookie mailchimp.cart.current_email when the visitor leaves the email field at checkout, login or registration, then sends the address to admin-ajax.php?action=mailchimp_set_user_by_email, before any order. The server then passes cart data to Mailchimp's API.
Sent from your server · Mailchimp for WooCommerceMailchimp for WooCommerce sets 28-day cookies that banners cannot hold
- mailchimp_campaign_id and mailchimp_email_id when the visitor arrives with ?mc_cid= or ?mc_eid=.
- mailchimp_user_email, mailchimp_user_previous_email and mailchimp_cart_token for cart recovery.
- mailchimp_landing_site on the first page, only if landing page tracking is on (off by default).
- All go through the mailchimp_allowed_to_use_cookie filter.
Read in its code, 16 October 2026, Mailchimp for WooCommerce 6.3.
Full detail
Mailchimp for WooCommerce sets its cookies from PHP for 28 days (2 419 200 s, Secure, SameSite=Strict): mailchimp_campaign_id and mailchimp_email_id when a visitor arrives with ?mc_cid= or ?mc_eid=, mailchimp_user_email, mailchimp_user_previous_email and mailchimp_cart_token (HttpOnly) for cart recovery, and mailchimp_landing_site on the first page only if landing page tracking is on (off by default). A consent plugin cannot hold them; all go through the mailchimp_allowed_to_use_cookie filter.
Sent from your server · OptinMonsterOptinMonster sends order revenue from the server using the _omra cookie
setting “Revenue Attribution”
With Revenue Attribution on, OptinMonster's server reads the _omra cookie at a WooCommerce or EDD order and sends the revenue to the OptinMonster API (v2/revenue). If _omra survives a refusal, sending continues.
Read in its code, 16 October 2026, OptinMonster 2.17.1.
Good to know · WooCommerceWooCommerce writes one visitor's marketing consent into cached pages
With WP Consent API, the attribution consent value is in the page, so a cached page carries it for everyone until a footer script corrects it. Session and cart storage do not depend on consent.
Read in its code, 16 October 2026, WooCommerce 11.2.1.
Full detail
With WP Consent API, WooCommerce writes the result of wp_has_consent('marketing'), read from the request's cookies, into the page as the attribution allowTracking value, so a cached page carries the value of the visitor who generated it. Its footer script wp-consent-api-integration corrects it only at the wp_consent_type_defined event and on each consent change. Only order attribution reads consent; the session cookie wp_woocommerce_session_<hash> (HttpOnly, 2 days, 7 when logged in) and the cart fragments storage (wc_cart_hash_<md5> in localStorage, wc_fragments_<md5> in sessionStorage) do not depend on it.
Sent from your server · WooCommerceWooCommerce geolocation can send the visitor's IP to an outside lookup site
setting “Default customer location”
When it needs the country and no MaxMind key or CDN header gives it, the server asks ipinfo.io or api.country.is. With page caching support, woocommerce_geo_hash is set for 1 hour.
Read in its code, 16 October 2026, WooCommerce 11.2.1.
Full detail
When WooCommerce needs the visitor's country (default customer location set to Geolocate, or taxes by geolocation) and neither a MaxMind key nor a CDN country header gives it, its server looks the country up at ipinfo.io or api.country.is, sending the visitor's IP address. With Geolocate (with page caching support), it sets woocommerce_geo_hash for 1 hour from the first page and adds a v= parameter to addresses.
Good to know · WooCommerceWooCommerce attribution cookies are session cookies, except sbjs_session
sbjs_session lasts 30 minutes. The cookies are set on the domain without www., while WooCommerce's removal on withdrawal uses the full host name.
Read in its code, 16 October 2026, WooCommerce 11.2.1.
Full detail
WooCommerce passes a lifetime of 0.00001 month to its sourcebuster library, which converts and truncates it to 0 minutes: the sbjs_ attribution cookies are session cookies, except sbjs_session (30 minutes). sourcebuster sets them on the host name without www. (domain=.<domain>), while WooCommerce's own removal on withdrawal uses domain=.<hostname>.
Good to know · WooPaymentsWooPayments checkout computes a device ID and uses cookies and browser storage
- A FingerprintJS device ID is sent with the payment for fraud checks.
- Sets skip_woopay (1 day) and keeps wcpay_appearance_<context> in local storage.
- With Sift in the fraud setup, it creates cdn.sift.com/s.js itself, outside the page HTML.
- Block checkout keeps woopay_preferred_card (card brand, last 4 digits) in local storage.
Read in its code, 16 October 2026, WooPayments 11.2.0.
Full detail
WooPayments' checkout bundle (served by the site) computes a FingerprintJS device ID sent with the payment for fraud checks, with monitoring off (no call to openfpcdn.io); it sets and deletes a cookietest cookie, keeps wcpay_appearance_<context> in localStorage and reads or sets skip_woopay (1 day). When the account's fraud configuration includes Sift, the same bundle creates <script src="https://cdn.sift.com/s.js"> itself, so it is not in the page HTML. The block checkout also stores woopay_preferred_card (card brand and last 4 digits) in localStorage; multi-currency keeps wcpay_mc_async_config in sessionStorage for 5 minutes. It does not read WP Consent API.
Sent from your server · WooPaymentsWooPayments sends shopper events from the server for US stores
setting “wcpay_shopper_tracking_enabled (filter) ; WooCommerce usage tracking” · by default: off
Only with WooCommerce usage tracking allowed, mostly when WooPay is on. The anonymous ID is a tk_ai session cookie set by the server. No banner can hold a server-side call.
Read in its code, 16 October 2026, WooPayments 11.2.0.
Full detail
WooPayments sends shopper Tracks events from the server to pixel.wp.com (wp_remote_get), only for stores in the United States with WooCommerce usage tracking allowed, mostly when WooPay is on; it respects a tk_opt-out cookie. The anonymous ID is a tk_ai session cookie set in PHP. No banner can hold a server-side call.
Set before the choice · WooPaymentsWooPayments loads Stripe.js on product, cart and checkout pages by default
setting “Express checkout locations” · by default: product, cart, checkout
Its default Apple Pay, Google Pay, WooPay and Amazon Pay buttons show on those pages, so Stripe.js runs there, but not on the home page or posts.
Read in its code, 16 October 2026, WooPayments 11.2.0.
Full detail
WooPayments loads Stripe.js (js.stripe.com/v3) at checkout and pay-for-order, and on product and cart pages when express buttons or pay-later messages (Affirm, Afterpay, Klarna) are shown there. Its defaults offer Apple Pay and Google Pay, WooPay and Amazon Pay buttons on product, cart and checkout pages, so Stripe.js runs on those pages; not on the home page or posts. It uses the same script handle as the Stripe extension to avoid loading it twice.
Set before the choice · WooCommerce Stripe Payment GatewayWooCommerce Stripe loads Stripe.js on product, cart and checkout by default
- Not on the home page, posts or shop.
- On product and cart pages it loads even when express buttons are off there.
- With express buttons, it adds early connections to four Stripe hosts.
- An express redirect sets wc_stripe_express_checkout_redirect_url (10 minutes).
Read in its code, 16 October 2026, WooCommerce Stripe Payment Gateway 11.1.1.
Full detail
The Stripe extension for WooCommerce loads Stripe.js (js.stripe.com) on product, cart, checkout, pay-for-order and add-payment-method pages by default, not only at checkout, and never on the home page, posts or shop. On product and cart pages it still loads when express buttons are off there, because two filters (wc_stripe_load_scripts_on_product_page_when_prbs_disabled and the cart one) default to true. When express buttons show, it adds preconnect hints to js.stripe.com, m.stripe.network, q.stripe.com and b.stripecdn.com in the head, and sets wc_stripe_express_checkout_redirect_url (10 minutes) on an express redirect. Its shop bundles write no cookie or localStorage.
Good to know · WooCommerce Stripe Payment GatewayWooCommerce Stripe has no consent setting and needs Stripe.js at its address
It does not read WP Consent API or set Consent Mode. Its checkout checks that Stripe.js came from js.stripe.com, so the script must run normally for card payments to work.
Read in its code, 16 October 2026, WooCommerce Stripe Payment Gateway 11.1.1.
Full detail
The Stripe extension for WooCommerce has no consent setting, does not read WP Consent API and sets no Consent Mode. Before charging, its checkout code checks that Stripe.js was loaded from https://js.stripe.com, so the script must stay on Stripe's address and run normally for card payments to work.
Set before the choice · WooCommerce PayPal PaymentsPayPal Payments always loads PayPal's FraudNet script where its buttons are
In 4.1.3 a site script creates c.paypal.com/da/r/fb.js at checkout and on product, cart and pay pages with buttons. Optional reCAPTCHA (off by default) loads Google there. No consent setting.
Read in its code, 16 October 2026, WooCommerce PayPal Payments 4.1.3.
Full detail
PayPal Payments always loads FraudNet in version 4.1.3 (the enabled check returns true): fraudnet.js, served by the site, creates a JSON config tag and <script src="https://c.paypal.com/da/r/fb.js"> at the page load event, at checkout whenever a PayPal method is active and on product, cart and pay pages where buttons are; its session ID is kept in the WooCommerce session. Its optional reCAPTCHA protection (off by default) loads www.google.com/recaptcha/api.js where buttons are. It has no consent setting and does not read WP Consent API.
Set before the choice · WooCommerce PayPal PaymentsPayPal Payments loads the PayPal SDK by script on product, cart and checkout
setting “Button and Pay Later locations” · by default: product, cart, checkout
The SDK is not a tag in the HTML. Pay Later messages load it in 8 countries, and on home and shop pages only if turned on. Mini-cart buttons (off by default) load it on every page.
Read in its code, 16 October 2026, WooCommerce PayPal Payments 4.1.3.
Full detail
WooCommerce PayPal Payments does not print the PayPal SDK as a tag: its own button.js (served by the site) creates www.paypal.com/sdk/js from an address in its localized data. After setup, buttons are on product, cart and checkout pages, so the SDK loads there; Pay Later messages load it on product, cart and checkout pages in 8 countries (US, DE, GB, FR, AU, IT, ES, CA), and on home and shop pages only if turned on. Mini-cart buttons (off by default) load it on every page.
Depends on a setting · Meta for WooCommerceMeta for WooCommerce can hold Pixel events, but fbevents.js still loads
setting “facebook_signals_held (filter)” · by default: active
A consent plugin can hold the Pixel and Conversions API events, then release them. While held, no _fbp or _fbc is written and events are queued. It does not read WP Consent API.
Read in its code, 16 October 2026, Meta for WooCommerce 3.7.8.
Full detail
Meta for WooCommerce can hold Pixel and Conversions API events until consent: signals are active by default (no wc_facebook_signals_state cookie), and a consent plugin holds them with the PHP filter facebook_signals_held or window.fbwcsignal.hold(), then window.fbwcsignal.release(). While held, PHP writes no _fbp or _fbc, fbq('consent','revoke') is sent and events are queued, but fbevents.js still loads. The state cookie lasts 1 year. It does not read WP Consent API.
Good to know · Meta for WooCommerceMeta for WooCommerce prints the Pixel code directly in the page head
Nothing loads without a Meta connection and pixel ID. It keeps sent event IDs in sessionStorage and adds a facebook.com/tr image for browsers without JavaScript.
Read in its code, 16 October 2026, Meta for WooCommerce 3.7.8.
Full detail
Meta for WooCommerce prints the Pixel as an inline snippet in wp_head that starts with if(f.fbq)return;, so a fbq function defined before it stops fbevents.js from loading. It keeps sent event IDs in sessionStorage wc_facebook_signals_seen_event_ids, adds a facebook.com/tr noscript image, and lets the filter wc_facebook_pixel_script_attributes change the script tag attributes. Nothing loads without a Meta connection and pixel ID.
Sent from your server · Meta for WooCommerceMeta for WooCommerce sets _fbp from the server; blocking scripts cannot stop it
On a visitor's first page it sets _fbp (90 days), and _fbc when the visitor arrives with ?fbclid=. It also loads Meta's Param Builder on every page, which writes both unless signals are held.
Read in its code, 16 October 2026, Meta for WooCommerce 3.7.8.
Full detail
When the shop is connected to Meta and signals are not held, Meta for WooCommerce sends Set-Cookie _fbp (90 days) from PHP on a visitor's first page, and _fbc when the visitor arrives with ?fbclid=. A consent plugin that only blocks scripts cannot stop it. It also loads Meta's Param Builder from cdn.jsdelivr.net (fallback unpkg.com) on every page, which writes _fbp and _fbc on the root domain unless wc_facebook_signals_state=held.
Depends on a setting · Google for WooCommerceGoogle for WooCommerce enhanced conversions print the address in clear text
setting “Enhanced conversions” · by default: off
Off by default. When on, each page of a known customer prints the email, names and phone hashed, but the street, city, postal code and country in clear text.
Read in its code, 16 October 2026, Google for WooCommerce 3.9.6.
Full detail
With Google for WooCommerce's enhanced conversions on (off by default), every page of a known customer's session prints gtag('set','user_data') with the email, first name, last name and phone hashed (SHA-256), but the street, city, region, postal code and country in clear text in the HTML.
Good to know · Google for WooCommerceGoogle for WooCommerce passes WP Consent API choices to Google
When WP Consent API is present, its script reads the statistics and marketing choices, sends Google's consent update and follows later changes. It does not register with WP Consent API.
Read in its code, 16 October 2026, Google for WooCommerce 3.9.6.
Full detail
When WP Consent API is present and Google Analytics for WooCommerce is not, Google for WooCommerce loads wp-consent-api.js, which reads the WP Consent API statistics and marketing cookies and sends gtag('consent','update') at DOMContentLoaded (statistics to analytics_storage; marketing to ad_storage, ad_user_data, ad_personalization), and listens for wp_listen_for_consent_change. It sets wp_consent_type to optin if empty and does not register with WP Consent API.
Set before the choice · Mailchimp for WooCommerceMailchimp for WooCommerce loads Mailchimp scripts on every page by default
setting “Mailchimp script” · by default: on
Mailchimp's site snippet and pixel load on every page, and a logged-in customer's email is written into the page for identification. No WP Consent API or Google consent code.
Read in its code, 16 October 2026, Mailchimp for WooCommerce 6.3.
Full detail
Mailchimp for WooCommerce prints Mailchimp's connected-site snippet (chimpstatic.com/mcjs-connected) inline in wp_footer on every page by default (option mailchimp-woocommerce-code-snippet, filter mailchimp_add_inline_footer_script). The Mailchimp pixel scripts are enqueued on every page unless MAILCHIMP_PIXEL_ENABLED is false, and the logged-in customer's email is written into window.mcPixel for identification. No WP Consent API or Consent Mode code.
Good to know · WooCommerceWooCommerce order attribution starts on the page where the visitor accepts
A visitor who lands from a campaign link and accepts on a later page is recorded as a direct visit.
Seen in our tests, 15 October 2026, WooCommerce 11.2.1.
Full detail
When order attribution waits for consent, it starts on the page where the visitor accepts. A visitor who lands from a campaign link and accepts on a later page is recorded as a direct visit. This respects the choice, but shops that follow their campaigns should know it.
Good to know · WooCommerceWooCommerce block cart and checkout use the browser's local storage
They keep storeApiNonce, storeApiCartData and storeApiCartHash, plus one more key on the checkout page. The classic checkout keeps nothing there.
Seen in our tests, 15 October 2026, WooCommerce 11.2.1.
Full detail
The WooCommerce block cart and block checkout keep storeApiNonce, storeApiCartData and storeApiCartHash in the browser's local storage, plus WOOCOMMERCE_CHECKOUT_IS_CUSTOMER_DATA_DIRTY on the checkout page. The classic checkout keeps nothing in local storage.
Set before the choice · WooCommerceWooCommerce cart cookies are necessary and never held
by default: Default settings
Browsing sets no cookie. Adding a product sets woocommerce_items_in_cart, woocommerce_cart_hash and wp_woocommerce_session_* before any choice; they keep the cart.
Seen in our tests, 15 October 2026, WooCommerce 11.2.1.
Full detail
Browsing a WooCommerce shop sets no cookie. Adding a product to the cart sets woocommerce_items_in_cart, woocommerce_cart_hash and wp_woocommerce_session_* before any choice. They keep the cart, so they are necessary cookies and Cookie Rocks never holds them.
Good to know · WooCommerceWooCommerce checkout works after Reject all or Accept all
With Cookie Rocks, orders go through with the WooCommerce block checkout and the classic checkout alike, after Reject all or Accept all, with no error and no request to another site.
Seen in our tests, 15 October 2026, WooCommerce 11.2.1.
Good to know · WooCommerceWith Cookie Rocks, WooCommerce order attribution waits for marketing consent
After Reject all, an order goes through with no origin data; after Accept all, it has it. Withdrawing marketing consent deletes the sbjs_ cookies at once.
Seen in our tests, 15 October 2026, WooCommerce 11.2.1.
Full detail
With Cookie Rocks, WooCommerce order attribution (the sbjs_ cookies) waits for consent to marketing, with or without WP Consent API. After Reject all, a cash on delivery order goes through and carries no origin data; after Accept all, it does. Withdrawing marketing consent deletes the sbjs_ cookies at once.
Good to know · WooCommerceCookie Rocks is not flagged as incompatible with WooCommerce order storage
setting “HPOS”
With WooCommerce's order storage (HPOS) on, WooCommerce only judges extensions that declare they target WooCommerce: Cookie Rocks, which declares nothing, is not listed as incompatible, and no declaration is needed.
Seen in our tests, 10 October 2026, WooCommerce.
Set before the choice · WooCommerceWooCommerce order attribution sets seven cookies on arrival, before any choice
setting “Order attribution” · by default: on
Without a consent integration, the sbjs_ cookies are set as soon as the visitor arrives and stay after a refusal.
Seen in our tests, 9 October 2026, WooCommerce 11.2.
Full detail
Without a consent integration, WooCommerce order attribution sets seven sbjs_ cookies (sbjs_migrations, sbjs_current_add, sbjs_first_add, sbjs_current, sbjs_first, sbjs_udata, sbjs_session) as soon as the visitor arrives, before any choice, and they stay after a refusal.
Kinds of sites
Other kinds of sites, each with its own page.
Questions
Does refusing cookies stop a customer from buying?
No. The cart, the checkout and the payment work with necessary cookies only. A visitor who refuses everything can still place an order.
Do express buttons still show?
With strict payments on, one-click buy buttons on product pages may not show to visitors who refuse cookies. At checkout, payment always works.
What happens to pixel cookies when a customer changes their mind?
Cookie Rocks erases the marketing cookies of the pixel plugins it knows from your site and stops their pixels at once.
Which shop plugins have their own page?
See WooCommerce, payment plugins and ad pixel plugins.
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 online shops
Consent that never stands between a customer and the checkout.
the checkout never waits
Every feature of the complete plugin 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.