The link has more than one question mark

A second question mark in a link turns the next UTM tag into part of another value, so it never reaches reports. How to join parameters with & instead.

SymptomSome UTM tags are missing in reports, or a value shows up with ?utm_ stuck to the end of it.
Likely causeTags were added with a ? to a link that already had one, instead of with an &.
FixKeep the first ? and join every later parameter with & instead.

Short answer: In a web address, the first ? starts the query string and each parameter after it is joined with &. If a link has a second ?, everything after it is read as part of the previous value, so the next UTM tag is lost. Replace the second ? with &.

What is a query string?

Query string: the part of a link after the first ? and before any #, made of name=value pairs joined by &, where UTM tags and other parameters live.

The web address standard, RFC 3986, says the query is "indicated by the first question mark" and ends at a # or at the end of the link. A second ? doesn't start anything new. It's just a character inside a value.

What happens when a link has two question marks?

The parameter straight after the second ? is swallowed by the one before it. Analytics tools see one long, odd value and no separate tag.

Take ?id=42?utm_source=newsletter. The tool reads one parameter, id, with the value 42?utm_source=newsletter. There is no utm_source at all, so the source shows as missing.

Why does this happen?

  • Adding tags to a link that already has parameters: the page address is example.com/product?id=42, and someone adds ?utm_source=... to the end.
  • Spreadsheet formulas: a formula always joins the base link and tags with ?, even when the base link already has one.
  • Ad and email tools: a tool appends its own ? parameters to a link that already carries yours.
  • Copy and paste: a full tagged link gets pasted onto the end of another one.

Example

A product link with tags added using a second ?:

https://example.com/product?id=42?utm_source=newsletter&utm_medium=email&utm_campaign=oct

The fixed link, with & before the first UTM tag:

https://example.com/product?id=42&utm_source=newsletter&utm_medium=email&utm_campaign=oct

In the broken version, utm_medium and utm_campaign still come through, but utm_source is lost inside the id value. That's why this problem can be hard to spot: reports aren't empty, just missing one field.

How to fix it

  1. Paste the link into the link checker. It flags any link with more than one ? and lists what each parameter actually contains.
  2. Keep the first ?. Change every later ? that starts a new parameter into &.
  3. If a tool adds its own parameters, check the link after the tool has changed it, not before.
  4. In spreadsheets, check whether the base link already contains ? and join with & if it does.
  5. Use the UTM builder, which reads the existing link and adds tags with the right separator.
  6. Watch for a # too. Parameters after a # have their own problem, covered in parameters after the #.
FAQ

Common questions

Can a link have two question marks?

It can, but only the first one starts the query string. Any later `?` is treated as part of a value, so it doesn't start a new parameter.

Why is only one of my UTM tags missing?

Usually because the tag right after the second `?` was absorbed into the previous value. The tags after it, joined with `&`, still come through.

Do I need to encode a ? that's meant to be inside a value?

Inside a value, such as a link passed as a parameter, `?` should be percent-encoded as `%3F`. That keeps it from being confused with the start of a query.

Does this affect App Store and Play Store links?

Yes. Store links have their own parameters, such as `id=` on Google Play, so campaign details must be joined with `&`. See [Play Store link problems](/problems/play-store-link-problems/).

What are UTM parameters?

UTM parameters are tags added to the end of a link, such as utm_source and utm_campaign, that tell analytics tools where a visit came from. They let you see which campaign, channel and ad brought each visitor.

Which UTM parameters are required?

Use utm_source, utm_medium and utm_campaign on every campaign link. utm_term and utm_content are optional and help you compare keywords or ad variants.