Appearance
Microsoft UET
Microsoft Universal Event Tracking (UET) is the tag behind Microsoft (Bing) Ads conversion tracking. CookieWave sends it a Consent Mode signal so it only stores advertising cookies when the visitor has agreed.
The recommended way: Consent Mode
- In Banner Designer → Consent, turn on Enable Microsoft UET Consent Mode.
- Install the UET tag normally, in the
<head>— no changes to it. - In the Microsoft Ads UI, enable consent mode on the UET tag itself.
That last step is required and easy to miss: without it, UET ignores the signal CookieWave sends.
Once set up, the banner pushes UET's single consent key, ad_storage:
js
// on load, from your region default
window.uetq.push('consent', 'default', { ad_storage: 'denied' })
// when the visitor accepts (or declines) marketing
window.uetq.push('consent', 'update', { ad_storage: 'granted' })The default goes out in the banner's first moments on the page, before it has fetched anything — the same head start Google Consent Mode gets, and for the same reason: a tag that loads quickly should not find the question unanswered.
ad_storage follows the marketing category. When granted, UET reads and writes its cookies as normal; when denied, it runs cookieless (first-party cookies are neither read nor written; third-party only for fraud prevention).
You write none of the above — the toggle does it.
window.uetq is a queue, and CookieWave creates it if the UET tag has not yet. That is what makes the order between the two irrelevant: whichever arrives first, the tag drains whatever is waiting when it loads. It is also why the default matters even on a page where UET loads late — the update on its own would have nothing to append to.
If you prefer to gate the tag
If you would rather UET not load at all until consent, skip the toggle and mark the UET script instead:
html
<script type="text/plain" data-category="marketing">
// your UET tag code
</script>The banner runs it only after the visitor accepts marketing. This is simpler conceptually, but you lose UET's cookieless conversion modelling — Consent Mode is generally the better choice.
With Google Tag Manager
If UET is deployed through GTM, you have two options:
- Consent Mode (recommended): keep the toggle on. GTM honours the
ad_storagesignal natively, gating the UET tag's storage without a custom trigger. - Custom trigger: fire the UET tag on a GTM Custom Event trigger bound to
cc:onChange, or read thecw_consentcookie with a GTM 1st-party cookie variable. See Consent cookie & events.
Verify
With the tag installed and the toggle on, load a page and check the console:
js
window.uetq
// → [ 'consent', 'default', { ad_storage: 'denied' } ]Accept or decline marketing and a second event is appended:
js
window.uetq
// → [ 'consent', 'default', { ad_storage: 'denied' },
// 'consent', 'update', { ad_storage: 'granted' } ]Note the shape: push('consent', 'default', {…}) is three arguments, not one array, so each event occupies three slots in a row rather than nesting. That is Microsoft's documented form and what the UET tag reads — it just looks flatter in the console than you might expect.