> ## Documentation Index
> Fetch the complete documentation index at: https://docs.terminus.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Build a UTM-tagged campaign URL

> Use a Tagged URL field to append UTM parameters to a base URL from other fields, then optionally shorten it.

A Tagged URL field builds a campaign destination automatically: it takes a base URL and appends query parameters whose values come from other fields on the same record. Use it for UTM tagging so `utm_source`, `utm_medium`, and `utm_campaign` are governed by your model instead of typed by hand.

<Info>
  A Tagged URL field is computed. Submitters do not type into it. They fill in the source fields, and the tagged URL updates live in a preview as they go.
</Info>

## What you'll build

A Campaign URL Builder taxonomy with a base URL field, fields that supply each UTM value, a Tagged URL field that joins them, and (optionally) a Short URL field that shortens the result.

## Steps

<Steps>
  <Step title="Create the base URL field">
    In your governance model's fields, create a field named `destination_url` of type **URL**. This is the landing page the campaign points at. To reject `http://`, set its **Allowed protocols** to `https` only.
  </Step>

  <Step title="Create the fields that supply each UTM value">
    Create one field per parameter value. A typical setup:

    * `utm_source`: **Dropdown** backed by a `Sources` picklist.
    * `utm_medium`: **Dropdown** backed by a `Mediums` picklist.
    * `utm_campaign`: a [Concatenation](/reference/fields/concatenation) field that joins parts like goal, country, and date into one campaign string.
  </Step>

  <Step title="Create the Tagged URL field">
    Create a field of type **Tagged URL**. In its settings:

    * Set **Base URL field** to `destination_url`.
    * Under parameters, add one row per UTM key. In each row, type the parameter **key** (for example `utm_source`) and select the **field** that supplies its value.

    Add three rows: `utm_source` from `utm_source`, `utm_medium` from `utm_medium`, and `utm_campaign` from `utm_campaign`.
  </Step>

  <Step title="Add the fields to a taxonomy">
    Add the base URL field, the three value fields, and the Tagged URL field to the taxonomy that builds your campaign links. Publish a revision so submitters get them. See [Publish a revision](/guides/publish-revision).
  </Step>

  <Step title="Optionally shorten it">
    To hand out a short link instead of the long tagged URL, add a **Short URL** field and set its **Destination URL field** to your Tagged URL field. The short link redirects to the fully tagged URL. See the [Short URL field reference](/reference/fields/short-url).
  </Step>
</Steps>

## Worked example: Campaign URL Builder

A submitter fills in the source fields:

* `destination_url` = `https://shop.acme.example/deals`
* `utm_source` = `newsletter`
* `utm_medium` = `email`
* `utm_campaign` = `awareness-us-black_friday_2026`

The Tagged URL preview shows:

```text theme={null}
https://shop.acme.example/deals?utm_source=newsletter&utm_medium=email&utm_campaign=awareness-us-black_friday_2026
```

If the submitter leaves `utm_source` blank, that key is dropped entirely. The output is just `?utm_medium=email&utm_campaign=...`, never `utm_source=` with an empty value. If `destination_url` already carries a query string such as `?ref=partner`, it is preserved and the UTM keys are appended after it.

## Encoding

Parameter values are URL-encoded for you when the link is built. A `utm_campaign` value of `black friday 2026` is written into the URL as `black+friday+2026`, and other reserved characters are escaped the same way. There is no per-parameter "encode" setting to turn this on or off: encoding always happens. Put plain, human-readable values into the source fields and let the Tagged URL field handle escaping. Do not pre-encode values yourself, or they will be double-encoded.

## Gotchas

* **Blank values are dropped, not rendered empty.** A parameter whose source field is empty is left out of the URL. If a key must always appear, mark its source field as required in the taxonomy.
* **Encoding is automatic and always on.** Values are URL-encoded every time the link is built. There is no toggle, so never enter already-encoded values into the source fields.
* **A parameter key must be unique within the field.** The editor flags a duplicate key. Each key maps to exactly one source field.
* **Multi-select dropdown values join into one parameter.** If a parameter's source is a multi-select dropdown, all selected codes are joined with that dropdown's separator into a single value. One parameter cannot expand into several `key=` pairs.
* **Tagged URLs can chain.** A Tagged URL field's **Base URL field** can be a URL field, another Tagged URL field, or a Short URL field, so you can layer them. If an upstream field has no value, the tagged URL renders empty rather than raising an error.
* **The field is computed.** Submitters cannot edit the tagged URL directly. They change the inputs; the URL recomputes. To change the output, change a source field or the field's configuration.

## Related

* [Tagged URL field reference](/reference/fields/tagged-url)
* [Short URL field reference](/reference/fields/short-url)
* [Analytics](/guides/analytics)
