Kukie's banner script includes a built-in debug mode that prints a detailed Consent Mode report to the browser console. It shows which Google tags were detected on the page, whether gtag('consent', 'default', ...) was set before those tags read consent, whether anything granted consent before the visitor chose, the current runtime consent state, and a pass/fail verdict with actionable next steps. This article walks through how to activate the debug mode and how to interpret each section of its output, including the common "late consent" FAIL verdict.
How to activate
Add ?kukie_debug=1 to the address of any page on a site where Kukie is installed. For example, https://example.com/?kukie_debug=1 or https://example.com/pricing?kukie_debug=1. If the address already has a query string, add &kukie_debug=1 to the end of it instead.
Open the browser console (F12 on Windows/Linux, Cmd+Option+I on macOS) and reload the page. Approximately 1.5 seconds after initialisation, the debug report is printed under a collapsible group titled [Kukie] Consent Mode Debug Report.
Tip: The 1.5-second delay gives Google tags time to push their first events into the
dataLayer. If you open DevTools after the report has already printed, reload the page with DevTools open to capture it.
The URL parameter is the only switch. Setting
window.__KUKIE_CONFIG__.debug = truebefore the banner script loads has no effect: the script setswindow.__KUKIE_CONFIG__itself and replaces anything already there. Setting it in the console after the page has loaded does not start the report or the other[Kukie]messages either. It turns on only 2 warnings the banner can print later: one when a region lookup that is still running fails, and one when a visitor's choice is too large for the consent cookie to keep each service's setting.
What the debug report shows
The report is divided into five sections:
- Detected Google tags and their DOM position. Kukie walks
document.scriptsand reports every Google tag it finds, flagging each tag that sits before the Kukie script in the HTML source with an amber warning icon. A tag served from your own domain with a Google tag ID in its address is marked[GTG]: it is likely served through Google tag gateway. - Timing check verdict. One of
PASS,FAIL,no defaultorunknown. Kukie reads it from Google's own consent state (google_tag_data.ics), which records whether the consent default arrived after a Google tag had already read consent. Before any Google tag has loaded, it reads the order of the commands waiting inwindow.dataLayerinstead. - Consent updates before a choice. Shown when the banner was on screen on this page load. It fails when a consent update granted any of the four required consent types before the visitor chose. See A consent update before a choice.
- Current runtime consent state. Read directly from Google's internal consent store (
google_tag_data.ics.entries). Shows all four required Consent Mode v2 types plus any secondary types in use. Each type shows its current value: the latest update after a visitor has chosen, otherwise the default. - Summary with actionable next steps. A plain-language verdict and, where relevant, links to the section of this article that explains it.
Interpreting the late-consent verdict
If the debug report shows ✗ FAIL - Google tags fired BEFORE Kukie set consent defaults., a Google tag read the consent state before gtag('consent', 'default', ...) was set, so it ran without it. When Data Transmission Controls or Global Consent Defaults are turned on for your Google tag, measurement data from those page views is dropped or modelled incorrectly.
Before you move any script, first check whether the late Google tag is served through Google tag gateway (GTG). Google tag gateway changes where the tag loads from, and often who controls where it sits on the page. The fix depends on the answer.
The report prints the same three steps, in this order:
Step 1: Check whether the late tag is served through Google tag gateway
The console says: Step 1: First check whether the late Google tag is served through Google tag gateway, from your own domain. How to check: open the Network tab, reload the page and find the gtag/js or gtm.js request. Your own domain means Google tag gateway. www.googletagmanager.com means a standard install.
To check:
- The Network tab (the quickest check). Open DevTools, go to the Network tab and reload the page. Filter for your tag ID (for example
G-,AW-orGTM-) and look at the host of thegtag/jsorgtm.jsrequest.www.googletagmanager.commeans a standard install. A host on your own domain, for exampleexample.com/metrics/?id=G-XXXXXXXXXXorcdn.example.com/gtag/js?id=G-XXXXXXXXXX, means Google tag gateway. - The debug report's tag list. A tag served from your own domain is marked
[GTG]. The report can miss a gateway whose address carries no tag ID, so a tag list without[GTG]does not rule it out. - Your CDN or Google tag settings. If you use Cloudflare, the Google tag gateway setting in the Cloudflare dashboard shows whether it is on. Other providers show an equivalent setting, and the Google tag gateway section of your Google tag settings lists the measurement path.
- Tag Assistant. Connect Tag Assistant to the page and open Summary > Output > Hits Sent. Hits sent to a path on your own domain come through Google tag gateway.
The Google tag gateway guide explains each check in more detail.
Step 2: If it is, follow the Google tag gateway guide
When the late tag is served through Google tag gateway, moving the Kukie.io script is often not possible: a one-click CDN integration decides where the tag sits on the page. Follow the Google tag gateway guide. It recommends advanced consent mode (U+C) for tags served through Google tag gateway, and covers the two alternatives: moving your tags into a Google Tag Manager container served through Google tag gateway, or setting up Google tag gateway manually so that you control the script order.
Step 3: If it is not, set the consent default first
When the late tag loads from www.googletagmanager.com, the consent default has to be set before it. How depends on how you installed Kukie.io:
- The script in your page. Move the Kukie.io script above every Google tag in the
<head>of your page. The console says:Step 3: If it is not, move the Kukie.io script above every Google tag in the <head> of your page.See the example below. - The WordPress plugin. Keep Script position on In the page head in the plugin's Settings. If another plugin or your theme adds the Google tag earlier in the head, set it to add the tag later, or let Google Tag Manager load it.
- The Kukie CMP template in Google Tag Manager. The template sets the consent default itself. Check that the Kukie CMP tag fires on the Consent Initialization - All Pages trigger, and that no Google tag is added to the page above the Google Tag Manager snippet. The console says so in its Step 3 when it finds the template.
- Google Tag Manager loaded by Kukie.io (Banner Editor > Integrations). Kukie.io sets the default before it loads the container, so the container's own tags are never late. A late tag here is one added to the page outside the container.
<head>
<!-- Kukie.io CMP FIRST -->
<script src="https://cdn.kukie.io/s/{your-site-key}/c.js" async></script>
<!-- Google tags AFTER Kukie -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX');
</script>
</head>
Replace {your-site-key} with the site key from the Kukie dashboard, and G-XXXXXXXXXX with your Google tag ID.
After the change, reload the page with ?kukie_debug=1 and check that the timing check shows ✓ PASS.
A consent update before a choice
If the debug report shows ✗ FAIL - A consent update granted ... before the visitor chose, while the banner was on screen., something on the page sent gtag('consent', 'update', ...) with a granted value while the visitor was still looking at the banner. Google expects an update that grants consent only after the visitor chooses.
Kukie.io sends no consent update while its banner is on screen. In regions where your rules let data flow before a choice, it tells Google through region-specific consent defaults instead, and sends the update when the visitor chooses or the notice closes. So the update came from somewhere else:
- page code that calls
gtag('consent', 'update', ...)at page load; - a Google Tag Manager tag that updates consent on page view;
- another consent tool still installed on the page.
Find the call and remove it. If your own code needs to react to the visitor's choice, listen for Kukie.io's cc:consent-updated event instead. The check runs only when the banner was on screen: with no banner, for example in a region where your rules hide it, a granted update at page load is expected. Compliance Tools reports the same finding as an early update when it checks your site.
When nothing granted consent early, the report shows ✓ PASS - No consent update granted anything before the visitor chose.
Other common debug report outcomes
The report does not appear
Debug mode loads the report as a small separate file from app.kukie.io. A Content-Security-Policy header that lists where scripts can load from can block that file. The console then shows "Couldn't load the Consent Mode debug report" with the address it tried. Add https://app.kukie.io to script-src while you debug, then reload the page.
? Unable to determine timing
Either no Google tags are installed on the page, or no Google tag has read consent yet. This is not a failure: there is nothing to evaluate yet. If you expected Google tags on the page, check that they are installed and that the page has finished loading. Tags added later by a script, including some served through Google tag gateway, can take a few seconds: reload, wait, then read the report again.
✗ FAIL - No consent default command detected
Kukie did not issue a gtag('consent', 'default', ...) command. This almost always means Google Consent Mode v2 is disabled for the site in the Kukie dashboard. Open Banner Editor > Integrations, enable the Google Consent Mode v2 toggle, and save. For CDN bundles, the bundle must be regenerated for the change to take effect; this happens automatically on save.
If you install Kukie.io with the Kukie CMP template in Google Tag Manager, the template sets the default, not the banner script. Check that the Kukie CMP tag fires on the Consent Initialization - All Pages trigger and that the container version with it is published.
✓ PASS - Kukie set consent defaults BEFORE Google tags fired
Your setup is working correctly. Consent Mode v2 signals are being delivered to Google tags in the correct order. You may also see a note saying a Google tag is positioned before the Kukie script in the HTML source: this is shown as a recommended optimisation, not a failure, because the runtime timing check is authoritative. A tag marked [GTG] gets the note without that advice: a tag served through Google tag gateway by a one-click integration is not one you can reorder, so see the Google tag gateway guide instead. A GTM container that Kukie loads for you is labelled [loaded by Kukie] and never gets this note: Kukie places it after setting the defaults, so there is nothing for you to move.
Dedicated support
If Google tags are not getting Consent Mode signals, or you run into another Consent Mode setup, timing or measurement problem, email Kukie.io's Google client support at google-support@kukie.io first, before you contact Google. We answer within 1 business day.
If the debug report does not resolve your issue, send us your debug mode console output. Include:
- The URL where the debug report was captured
- A screenshot or paste of the full console output (with the Consent Mode Debug Report header)
- Whether the affected Google tag is served through Google tag gateway (see Step 1)
To copy Google's Consent Mode support team, add cmp-support-helper@google.com to your email, or choose the Google Consent Mode topic in the contact form and select the box.
Related guides
- Google Consent Mode v2 overview
- Basic vs Advanced Consent Mode
- Google Tag Gateway (GTG) integration
- Google's Banner Requirements for Consent Mode
