utm.new
guide ·

A UTM convention for the AI search era (GEO/AEO)

A concrete, copy-ready UTM taxonomy for traffic from ChatGPT, Perplexity, Gemini, Copilot, and Claude — and the casing trap that splits it across buckets.

Generative engine optimization, answer engine optimization — pick your acronym. The point is the same: people are finding you through AI assistants, not just blue links. The trouble is that nobody set a convention for tagging that traffic, so it scatters. One link says utm_source=ChatGPT, another says utm_source=chatgpt, a third uses openai, and your “AI” traffic is three rows in a report that should be one.

Here’s a convention you can adopt today. It’s deliberately boring — boring is what survives contact with a marketing team.

The core decision: utm_medium=ai-assistant

Treat AI assistants as their own channel. Set utm_medium=ai-assistant on every link you tag for this purpose, and let utm_source name the specific assistant.

Why a new medium instead of reusing referral or organic? Because AI traffic behaves differently from both. It often arrives with no clean referrer (see Why your AI traffic shows up as Direct / None), and you’ll want to slice it as its own group when you report. A dedicated medium makes that one filter instead of a hunt across rows.

Use ai-assistant, not the bare ai — the exact value matters. As of ~May 2026 GA4 ships a native AI Assistants default channel, and it recognizes utm_medium=ai-assistant exactly. Tag with it and your links classify into that channel automatically, no custom channel group needed. The shorter utm_medium=ai is not recognized and still lands in Unassigned, which is precisely why the value to standardize on is ai-assistant. (GA4 also auto-detects ChatGPT, Gemini, Copilot, Grok, and Deepseek by referrer; the tag is what catches referrer-less clicks and the assistants it doesn’t auto-detect, like Claude and Perplexity — more in Should AI referral traffic get its own channel in GA4?.)

The source values, one per assistant

Use a short, stable, lowercase token per assistant. Don’t use the parent company — tag the surface the user actually clicked from.

Assistantutm_sourceTypical referrer (when present)
ChatGPTchatgptchatgpt.com
Perplexityperplexityperplexity.ai
Google Geminigeminigemini.google.com
Microsoft Copilotcopilotcopilot.microsoft.com
Claudeclaudeclaude.ai

A note on Google: Gemini lives at gemini.google.com and gets utm_source=gemini. Google’s AI Overviews are a different thing — they render inside the regular search results page, so a click from an Overview surfaces as ordinary google.com organic traffic with no distinct referrer. There’s nothing to tag there unless the Overview happens to cite a link you already tagged. Don’t invent a source for it.

The full convention

utm_source   = chatgpt | perplexity | gemini | copilot | claude
utm_medium   = ai-assistant
utm_campaign = lowercase-hyphen-separated-campaign-name
utm_content  = lowercase-page-or-link-identifier
utm_term     = optional-topic-or-query-theme

A finished link looks like this:

https://example.com/guide?utm_source=perplexity&utm_medium=ai-assistant&utm_campaign=2026-product-launch&utm_content=pricing-faq

Readable in a spreadsheet, consistent across the team, and unambiguous six months later. That’s the whole goal.

The casing trap (the one that actually bites)

UTM values are case-sensitive in GA4 and basically everywhere else. utm_source=Perplexity, utm_source=perplexity, and utm_source=PERPLEXITY are three different sources. They produce three different rows, split your session counts, and make a real channel look smaller than it is.

This is the single most common way an AI-traffic convention falls apart, because AI surface names are branded with capitals — ChatGPT, Perplexity, Copilot. The instinct is to type them the way the logo reads. Resist it. Every value is lowercase, every time:

  • chatgpt, not ChatGPT or chat-gpt
  • copilot, not Copilot or microsoft-copilot
  • perplexity, not Perplexity or perplexity-ai

The same hyphen rule from UTM parameters best practices applies: hyphens between words, never spaces or underscores. utm_campaign=spring-launch, not spring_launch or spring%20launch.

The reliable way to never break this is to not hand-type URLs at all. Generate them from one source so the casing is enforced for you — that’s the whole reason the chatgpt and perplexity platform pages exist, with the convention pre-applied.

Where you actually apply these tags

You can’t set a UTM inside an assistant — there’s no campaign manager in ChatGPT. What you tag is the links you control that an assistant might surface, read, or cite:

  • Canonical links in your own content and docs that AI crawlers read.
  • Links in syndicated posts, guest articles, and partner pages.
  • Profile and bio links on platforms an assistant scrapes.
  • Any URL you’d be happy to see quoted verbatim in an AI answer.

The mechanic is simple: if the assistant repeats a link you tagged, the parameters ride along in the URL and the visit lands attributed, even when the referrer is missing. If the model paraphrases you and writes its own link — or cites you with no link at all — there’s nothing in the URL and nothing to capture. You’re tagging the links that flow through, not claiming every mention.

For more on getting an LLM to draft and police this taxonomy at scale (and the limits of letting it), see Use AI to generate and govern your UTM taxonomy. For the upstream question of which canonical links you expose to AI crawlers in the first place, see llms.txt and UTMs.

A one-paragraph version to paste into your team doc

AI-assistant traffic uses utm_medium=ai-assistant (the value GA4’s native AI Assistants channel recognizes — not the bare ai). The source is the assistant, lowercase: chatgpt, perplexity, gemini, copilot, claude. Campaign, content, and term follow our standard lowercase-hyphen rules. Build these links in the shared builder — never hand-type them — and don’t tag Google AI Overviews (no distinct referrer; they ride organic).

Adopt that, enforce it from one builder, and your AI channel stays a single clean line in every report instead of a smear of near-duplicates.

More in this series