Microsoft UET Tag Not Working? Fix Tags and Conversion Goals

Quick fix: Run UET Tag Helper on your site. If no UET requests appear, the tag is missing, blocked or held by consent. If requests appear but a goal shows no conversions, the goal's URL rule or event conditions don't match what your site sends. For EEA, UK and Swiss traffic, check that your site sends UET consent signals, because Google Consent Mode alone doesn't cover Microsoft.

Microsoft Advertising tracks conversions with the Universal Event Tracking (UET) tag. One base tag loads on every page, and conversion goals in your account decide which visits or events count. Problems show up as a tag status of "Unverified" or "Tag inactive," or as a goal that never records conversions.

This guide works through the causes from most to least common, and ends with how to confirm the fix.

What the tag and goal statuses mean

Start by reading the status in your Microsoft Advertising account. It tells you which half of the setup is broken.

StatusWhat it means
UnverifiedMicrosoft hasn't received any data from the tag yet. Verification can take up to 24 hours after the tag first fires.
Tag inactiveThe tag worked before, but no data has arrived in the last 24 hours.
No recent conversionsThe tag is active, but the goal recorded no conversions in the last 7 days.
Recording conversionsThe goal is working.

For most goals, the goal status mirrors the tag status until the tag is active. So "Unverified" or "Tag inactive" on a goal means you should fix the tag first (Steps 1 to 4). "No recent conversions" points to the goal itself (Step 5).

Step 1: Check that the UET tag is on every page

The UET base tag loads bat.js from bat.bing.com and creates the uetq queue. Inside the snippet is a settings object with your tag ID:

var o = { ti: "YOUR_TAG_ID", enableAutoSpaTracking: true };

Copy the snippet from your account rather than writing it yourself. Then check:

  • The tag ID matches. The ti value must be the UET tag your conversion goals use. Accounts that changed agencies often have an old tag on the site and a new one in the account.
  • It's on every page. Microsoft's guidance is that the UET tag must be on every page of your site. A tag on the homepage only can't see a thank-you page.
  • It runs without errors. Look for syntax errors in the browser console. A bad paste, curly quotes or a cut-off snippet stops the tag.
  • The tag manager is published. If you use Google Tag Manager, confirm the UET tag fires on all pages in Preview, and that the container is published.

"Tag inactive" after a period of working almost always means a site change removed the tag. Common causes are a theme update, a new checkout, a migrated platform, or a new consent tool that started blocking it.

UET has its own consent mode, controlled by the ad_storage setting. Set a default right after the UET tag, then update it when the visitor makes a choice:

window.uetq = window.uetq || [];
window.uetq.push('consent', 'default', { 'ad_storage': 'denied' });

// After the visitor accepts:
window.uetq.push('consent', 'update', { 'ad_storage': 'granted' });

With ad_storage set to denied, UET doesn't read or write first-party cookies and doesn't write third-party cookies. That limits conversion tracking for that visitor. If no default is set, UET treats consent as granted in most countries.

Consent problems are now a leading cause of missing conversions, especially for European traffic:

  • Google Consent Mode doesn't cover UET. Sending consent to Google tags does nothing for Microsoft. Your consent tool must send UET consent signals too. Many consent platforms have a UET option that you need to switch on.
  • The update never fires. If the default is denied and the update call is missing, every visitor stays denied even after accepting. Accept cookies on a test visit and check that the update is pushed.
  • The update fires only once. Consent needs to be applied on every page view, not only on the page where the visitor clicked accept. Make sure your consent tool sets the stored choice on each page load.
  • Regional requirements. Microsoft has told advertisers that UET consent signals are required for traffic from the EEA, the UK and Switzerland. In those regions it treats missing consent as denied. If your conversions from those regions dropped sharply, check this first.

The concept is close to Google's. If you manage both, our Google Consent Mode v2 check covers the Google side.

Step 3: Rule out ad blockers and CSP

Many ad blockers block bat.bing.com. Test with extensions off in a private window. If your site sends a Content Security Policy header, the console shows "Refused to load" or "Refused to connect" for the blocked Microsoft domain. Add it to script-src and connect-src as the error indicates.

Step 4: Check single-page apps

On single-page apps, content changes without a full page load, so a destination URL goal may never see the thank-you page. Recent UET snippets include enableAutoSpaTracking: true, which tracks route changes that use the browser's history state. If your snippet lacks it, get a fresh snippet from your account. If you already send SPA page views by hand, Microsoft suggests setting it to false to avoid double counting. Our guide to SPA route change tracking explains the wider problem.

Step 5: Fix conversion goals that record nothing

If the tag is active but a goal shows "No recent conversions," the goal's rules don't match what the site sends, or no one converted.

Destination URL goals

These count a conversion when a URL matching your rule loads. Compare the rule with the real confirmation URL. Common mismatches are a different path, a trailing slash, an order number in the URL with an "equals" rule, or a hosted checkout on another domain where your UET tag doesn't run. "Contains" with a stable part of the path is usually safer than "equals."

Event goals

Event goals match custom events your code sends with uetq.push. A purchase event with revenue looks like this:

window.uetq = window.uetq || [];
window.uetq.push('event', 'purchase', {
  'revenue_value': 84.50,
  'currency': 'USD'
});

The goal only counts the event if its conditions match. If the goal expects the action purchase and your site sends Purchase or order_complete, nothing is recorded. Check the action, category, label and value conditions in the goal against the exact values in the request. Microsoft's help article on tracking custom events with UET lists the parameters.

Revenue is missing or wrong

  • Send revenue_value as a number and currency as a three-letter code. A formatted string like "$84.50" isn't read as revenue.
  • Check that the goal is set to use the variable revenue from the tag, not a fixed value.
  • Make sure the event fires after the order total is known, not before the data loads.

Conversion window and reporting delay

If your goal's conversion window is longer than 7 days and you filter on the last 7 days, you can see "No recent conversions" even when the Conversions column shows data. Also allow some time after a test conversion before you judge a goal, because conversion reporting isn't real-time.

Turn on Microsoft Click ID (MSCLKID) auto-tagging in your account settings. It adds a click ID to your landing page URLs, which helps UET connect conversions to ad clicks.

Step 6: Look for duplicate tags

Two UET tags on one page, or one tag loaded both by hand and by a tag manager or platform app, can double-count conversions. Check how many times bat.js loads and how many events go out for a single test order. Keep one install. The same thinking applies to Google tags; see duplicate gtag and GTM tags.

How to verify the fix

  1. UET Tag Helper. Install Microsoft's UET Tag Helper extension (for Edge or Chrome), open your page, turn the extension on and reload. A green badge means the tags work, yellow means they work but could be improved, and red means something is broken. The number on the badge is how many UET requests the page sent. It checks one page at a time, so run it on your landing page and your confirmation page. See Microsoft's UET Tag Helper article.
  2. Network tab. Filter for bat.bing.com. Each page view and event should send a request containing your tag ID, plus your event action and revenue for conversions.
  3. Consent test. In a private window, decline cookies and confirm the consent state is denied. Then accept and confirm the update is sent.
  4. Account status. Within 24 hours, the tag should show as active. After real conversions, the goal should move to "Recording conversions."

Other tools work too. The Pixel Helper extension is another way to see which pixels and events fire on a page. If you also run Google Ads, the checks in Google Ads conversion not recording follow the same logic.

FAQ

Why does my UET tag still say Unverified?

Either no visit to a tagged page has happened since you installed it, or the tag never reached Microsoft. Allow up to 24 hours after a visit. If it's still Unverified, use UET Tag Helper and the Network tab to see whether requests leave the page.

Do I need UET consent mode if I already use Google Consent Mode?

Yes. They are separate systems. Microsoft reads its own ad_storage signal from the uetq queue, so your consent tool must send it separately.

Can one UET tag track several conversion goals?

Yes. One UET tag on every page is enough. Each goal defines what counts as a conversion, such as a URL rule or event conditions, using data from that tag.

Why do my UET conversions not match my store's orders?

UET only counts conversions it can link to a Microsoft ad click within your conversion window. Visitors who decline consent or block the tag also go uncounted. Check for duplicate tags if UET reports more conversions than you have orders.