Webclat / Tealium Practice

How do I map Tealium's Universal Data Object fields into a Google Analytics tag correctly?

Answer

Inside iQ, a Google Analytics (GA4) tag's fields are populated by mapping each GA parameter to a UDO key using the tag's own mapping UI - not by hardcoding values inside the tag or naming your data layer keys after GA's parameter names and hoping iQ matches them automatically. Confirm the UDO key is populated (via utag.data in console) before touching the tag's mapping - a mapping pointed at an empty or misspelled key fails silently, with no error anywhere in iQ.

Why this happens

Tealium's UDO is intentionally vendor-agnostic - your data layer should describe your business (product_id, cart_value, user_tier), not any specific analytics tool's parameter names. The GA4 tag template then translates your UDO keys into GA's expected event/parameter names through an explicit mapping step.

When teams skip that step - either by pasting raw gtag-style code into a Custom Container tag instead of using the native GA4 tag template, or by assuming a UDO key called ga_event_name gets picked up automatically - the tag either doesn't send the data GA expects, or duplicates logic the native tag template already handles.

Fix it

  1. Confirm your data layer key exists and holds the right value at the moment the tag fires: run utag.data in the console on the page in question and locate the exact key (product_id, order_total) before touching the tag config.
  2. In iQ, open the GA4 tag's settings and use its native mapping table to map each UDO key to the correct GA4 event parameter - you're telling the GA4 tag where to look, not renaming your data layer.
  3. For ecommerce items arrays, confirm the UDO key holds an actual array of item objects in GA4's expected shape (item_id, item_name, price, quantity). A flat string where GA4 expects an array is the most common silent failure in this mapping.
  4. Don't duplicate: if the native GA4 tag template already exists in your account, don't also hand-write a gtag() call inside a Custom Container tag for the same event. Pick one - running both produces double-counted hits with no error to warn you.
  5. Set the load rule for the GA4 tag to the same condition as the event you're mapping (a "purchase" load rule tied to your order-confirmation data layer trigger), rather than firing it on "All Pages" and relying on empty-value guards inside the mapping.

How to verify it worked

  • Open GA4's DebugView with the Tealium profile in debug/trace mode simultaneously, and confirm the event appears with every mapped parameter populated - not just the event name.
  • In Tealium's Trace tool, click into the specific tag firing and inspect the exact payload it sent. This shows you what left Tealium independent of what GA4 chose to do with it, which separates a mapping problem from a GA4-side problem.
  • Check the Network tab for the outbound request to the GA4 collection endpoint and confirm the mapped parameters appear as query parameters with the values you expect - not blank, and not literally the string "undefined".
  • Wait for the event to land in GA4's standard reports (Realtime first, then the relevant report) with the parameter values intact. DebugView confirms structure; standard reporting confirms nothing downstream - a GA4-side filter, a mismatched event name - is dropping it afterward.

Get your GA4 mapping audited end to end.

We trace the UDO through the tag mapping to the live GA4 payload, so nothing silently drops between the two.

Audit My GA4 Mapping