# Oktavia Campaign UTM Policy

Canonical URL: https://oktavia.app/docs/oktavia-campaign-utm-policy.md

## Purpose

This document defines how Oktavia campaign URLs must be tagged.

The goal is to keep SEO, SEM, paid social, partner campaigns, lead magnets and agency reporting comparable over time.

## Mandatory Parameters

Every campaign URL must include:

- `utm_source`
- `utm_medium`
- `utm_campaign`

Use optional parameters only when they add real reporting value:

- `utm_term`
- `utm_content`

## Naming Rules

Use lowercase values.

Use hyphens instead of spaces.

Do not include:

- personal names,
- emails,
- phone numbers,
- company names,
- free-text notes,
- internal comments.

Good:

```text
utm_source=google
utm_medium=cpc
utm_campaign=registro-horario-hosteleria
utm_content=hero-cta
```

Bad:

```text
utm_source=Google Ads
utm_medium=Paid Search
utm_campaign=Campana Dani junio cliente restaurante
```

## Allowed `utm_source` Values

Primary values:

- `google`
- `bing`
- `linkedin`
- `meta`
- `instagram`
- `facebook`
- `newsletter`
- `partner`
- `direct-sales`
- `qr`
- `event`
- `organic-social`

If a new source is needed, document it before launching the campaign.

## Allowed `utm_medium` Values

Primary values:

- `cpc`
- `paid-social`
- `organic-social`
- `email`
- `partner`
- `referral`
- `qr`
- `offline`
- `retargeting`

Do not mix channel names and platforms. The platform belongs in `utm_source`; the traffic type belongs in `utm_medium`.

## Campaign Naming

Recommended format:

```text
{intent}-{audience-or-segment}
```

Examples:

- `registro-horario-hosteleria`
- `cuadrantes-restaurantes`
- `documentacion-laboral-hosteleria`
- `inspeccion-laboral-checklist`
- `gestorias-laborales-partner`
- `multisede-restauracion`

## Content Naming

Use `utm_content` to distinguish the message or placement.

Examples:

- `hero-cta`
- `pricing-cta`
- `footer-cta`
- `checklist-card`
- `video-01`
- `carousel-02`
- `search-ad-a`

## Term Naming

Use `utm_term` mainly for paid search keyword groups.

Examples:

- `control-horario-restaurante`
- `software-turnos-hosteleria`
- `registro-horario-hosteleria`

## Example URLs

Google Ads search campaign:

```text
https://oktavia.app/producto/control-horario?utm_source=google&utm_medium=cpc&utm_campaign=registro-horario-hosteleria&utm_term=control-horario-restaurante&utm_content=search-ad-a
```

Meta retargeting campaign:

```text
https://oktavia.app/pricing?utm_source=meta&utm_medium=retargeting&utm_campaign=pricing-warm-visitors&utm_content=pricing-card-a
```

LinkedIn partner campaign:

```text
https://oktavia.app/hosteleria/gestorias-laborales?utm_source=linkedin&utm_medium=paid-social&utm_campaign=gestorias-laborales-partner&utm_content=single-image-a
```

QR at a hospitality event:

```text
https://oktavia.app/onboarding?utm_source=event&utm_medium=qr&utm_campaign=feria-hosteleria-valencia&utm_content=rollup-qr
```

## Click Ids

Oktavia also captures advertising click ids when present:

- `gclid`
- `fbclid`
- `msclkid`

Do not generate these values manually. Advertising platforms add them automatically.

## How Oktavia Uses Attribution

When a visitor arrives with campaign parameters, Oktavia stores them locally under:

- `oktavia.public_attribution`

After analytics consent is accepted, these fields are attached to public funnel events.

This allows reports by:

- source,
- medium,
- campaign,
- landing page,
- CTA,
- lead magnet,
- pricing calculator usage,
- registration intent.

## Agency Rules

Agencies must:

- use this naming policy,
- share the final URL before launch,
- keep Oktavia-owned ad accounts and tags,
- report campaign performance using these same parameters,
- document every new campaign name in the monthly report.

Agencies must not:

- create private naming conventions,
- use personal data in URL parameters,
- launch campaigns without conversion tracking,
- send paid traffic to generic pages when an intent-specific page exists.

## Review Cadence

Review UTM performance weekly during active campaigns.

Review the naming policy monthly when new channels or campaign types are added.
