Skip to content

Usage

  1. First visit. The banner appears with three equal buttons: Reject all, Customize and Accept all, plus a link to your privacy policy. Nothing from the blocked services has loaded yet.
  2. Customize opens the preference center: Necessary (always on), Preferences, Analytics and Marketing, each with a switch, a short description and the services in that category. Save my choices, Reject all and Accept all are at the bottom.
  3. After the choice the banner closes. Allowed scripts start immediately in their original order and allowed videos load. The choice is remembered for the configured period.
  4. Changing the choice. The floating cookie button, the footer Cookie settings link or any link to #cookie-settings opens the preference center again. When a category is switched off, its known cookies (for example _ga, _fbp, _hj…) are deleted and the page reloads, so the scripts stop.
  5. Blocked videos show a placeholder: Load once plays that video only; Always allow marketing cookies saves the category for the whole store.

Keyboard and screen readers: the banner and the preference center are dialogs with labels, the switches are role="switch", focus stays inside the open preference center, and Esc closes it.

  • Consent log (Administration → Cookie consent log): totals, acceptance rate per category, filters and CSV export for audits. Each row: consent ID, UTC time, policy version, granted categories, action (accept all, reject all, custom, placeholder, script), IP with the last part removed, language and page path.
  • Finding a visitor’s entries. The consent ID is the second part of the visitor’s kv_consent cookie (1.<id>.<version>.<time>.<flags>). Search for it in the log.
  • Asking everyone again. Raise Cookie policy version. The log shows the version of each choice.

Use manual tagging for scripts the automatic rules do not know, or turn automatic blocking off and tag everything yourself.

Script:

<script type="text/plain" data-kv-consent="analytics">
/* runs only after analytics consent */
</script>
<script type="text/plain" data-kv-consent="marketing" src="https://example.com/pixel.js"></script>

Iframe:

<iframe data-kv-consent="marketing" data-kv-src="https://www.youtube.com/embed/VIDEO_ID" width="560" height="315"></iframe>

Categories: preferences, analytics, marketing. A script with type="module" keeps its type when you add data-kv-type="module".

To exclude a script from automatic blocking, add data-kv-consent-skip to its tag.

Links that open the preference center:

<a href="#cookie-settings" data-kv-consent-open>Cookie settings</a>
Add-on Behavior
GDPR (core) Keep it for agreement checkboxes and data requests. Turn off its cookie notice from the Status block so only one banner shows.
Google Analytics (core), Facebook Pixel (core) Their scripts are blocked until consent when the matching service is selected.
Ecommerce Tracking Pro (Kavio Labs) Follows this banner automatically: its own Consent Mode defaults and GDPR dialog integration are replaced by ours, its tag loads after analytics consent in basic mode (or with denied signals in advanced mode), and every choice is passed to it, including server-side purchase consent. No setting is needed.
Meta Conversions API (Kavio Labs) Reads window.kvConsent and the consent events, so the pixel and server events follow the marketing category.
Google Tag Manager containers The consent default is pushed before the container loads. Configure your tags with built-in consent checks. Our kv_consent_update dataLayer event can trigger tags after a choice.
  1. Open the storefront in a private window with the developer tools open (Network tab).
  2. Before clicking: no requests to google-analytics.com, googletagmanager.com (in basic mode), facebook.net, hotjar.com, clarity.ms or youtube.com.
  3. In the console, dataLayer[0] is ["consent", "default", {...}].
  4. Click Accept all: the tags load and dataLayer contains ["consent", "update", {...granted}].
  5. In the admin panel, the choice appears in the consent log.