Skip to content

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.

  1. In Banner Designer → Consent, turn on Enable Microsoft UET Consent Mode.
  2. Install the UET tag normally, in the <head> — no changes to it.
  3. 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_storage signal 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 the cw_consent cookie 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.

CookieWave consent management