August 12, 2026 · 4 min read

utm_term: Why It's Blank in Half Your Campaigns

Google's docs say {keyword} returns a blank value in Performance Max, Demand Gen and DSA. The utm_term advice everyone still repeats is a Search-only rule.

utm ads analytics

The parameter nobody can explain

Of the five UTM parameters, utm_term is the one that stalls people. Source, medium and campaign are self-explanatory. utm_content has a clear job. Then there's term, which every guide defines as "the paid keyword" and leaves there. Google's own documentation defines it in two words: "Paid keyword." No example given.

So people do the sensible thing. They copy advice that's been circulating since 2019 and drop {keyword} into the tracking template.

That advice broke, and Google says so in writing.

What Google actually documents

From the ValueTrack parameter reference:

"For the Search Network, the keyword from your account that matches the search query. If your ad matches without keywords (for example, in AI Max for Search campaigns, DSA, and Performance Max), {keyword} returns a blank value."

Blank. Not "unknown," not the search query, not some fallback. Empty.

{keyword} isn't supported for Demand Gen either.

Add up what that excludes and it's most of a modern account. If your spend has drifted toward automated campaign types over the past two years, and almost everyone's has, then utm_term={keyword} is writing empty values across a growing share of your traffic while looking perfectly well configured in the interface.

Where utm_term actually gets filled

Campaign type What utm_term receives
Search, keyword-based Your matched keyword
Search, broad match Your bid keyword, not the query
AI Max for Search Blank
Dynamic Search Ads Blank
Performance Max Blank
Demand Gen Not supported
Shopping Separate parameter set, no {keyword}

One row in there surprises people more than all the blanks do.

Broad match doesn't hand you the search term

Read Google's wording again. "The keyword from your account that matches the search query."

Your keyword. Not their query.

Someone searches "cheapest crm for a two person agency," it matches your broad keyword crm software, and utm_term records crm software. The interesting half of that sentence, the part that tells you what the customer actually wanted, never reaches your analytics through this parameter at all.

Plenty of people believe the reverse, and honestly the confusion is fair. The parameter is called term, the GA4 column says term, and a two-word definition clears up nothing. But queries live in the search terms report, and there's no ValueTrack parameter that pipes them into a URL. (If you find one recommended somewhere, check it against Google's published list before it goes anywhere near your account.)

With auto-tagging on, you may not need it at all

This is the part that shrinks the whole question.

GA4 carries two dimensions doing similar-looking work. "Session manual term" comes from utm_term. "Google Ads keyword text" comes from the Google Ads and Analytics account link, not from anything in your URL.

A properly linked account with auto-tagging already gets keyword data without utm_term contributing anything. Tagging manually on top duplicates a field you're collecting anyway, and does it worse, because it only works where {keyword} resolves in the first place. We went through how auto-tagging and manual UTMs coexist before, and this is the one case where the manual layer earns nothing.

Off Google the maths differs. Microsoft Ads writes its own UTM set with values you control, which we covered recently. Most other platforms have no keyword concept to begin with.

What to do with it

Leave it out entirely outside keyword-based Search. An omitted parameter beats a present-but-blank one, since a blank still creates a row in your reports and still forks your data.

Don't repurpose it. This is the one I'd push back on hardest, because it looks clever and isn't: teams with no keywords to record start using utm_term for audience names, placements, ad formats, or test variants. GA4 files it under "Session manual term" regardless, every report and every analyst downstream reads that column as a search keyword, and six months on nobody remembers the local convention that made it seem reasonable. Variants belong in utm_content.

And if what you want is what people typed, that's the search terms report. Not your URLs.

Build with a UTM builder, and leave the field empty when it doesn't apply. Which is a real answer, and more than this parameter usually gets.

← All posts