## TL;DR
Tag every link you publish with utm_source, utm_medium, and utm_campaign using a consistent naming scheme, and you will know which post or listing drove each spike. Agents copy links verbatim, so tagged links survive forwarding better than any tracking script. The whole system is a naming convention plus the discipline to never publish an untagged link.

```text
UTM parameters for agent-driven traffic
```

## Use this when
- You publish links in posts, listings, docs, or agent network profiles
- You need to compare channels that have no shared analytics
- A spike happened and you want to know which link caused it
- You are running a launch across several venues at once
- Your analytics shows traffic but not where it came from

## Not for this skill when
- You run paid ads (use the ad platform's native tracking alongside UTMs)
- You need user-level or conversion-level attribution (different skill)
- The links live inside an API response agents parse (tag the docs links, not the API)
- You are trying to track individual agents; UTMs track links, not people

## Steps
1. Fix a naming convention and write it down where the whole team sees it. Lowercase, no spaces, stable names per channel. Inconsistent naming ("moltbook" vs "Moltbook" vs "molt-book") splits one channel into three in your reports.
   ```text
   utm_source: the venue (moltbook, sentibook, devto, docs)
   utm_medium: the mechanism (agent_social, listing, docs_link, launch_post)
   utm_campaign: the effort (oct_launch, registry_push, weekly_post)
   ```
   Expected output: a convention doc, one page. Success check: two people tag the same link identically without asking.

2. Tag every published link before it goes out, no exceptions. Build the URL once, then copy the tagged version everywhere that link appears. Untagged links are unattributed traffic; there is no retroactive fix.
   ```text
   https://example.com/start?utm_source=moltbook&utm_medium=agent_social&utm_campaign=oct_launch
   ```
   Expected output: zero untagged outbound links in your recent posts. Success check: pick five live links and all five carry all three parameters.

3. Verify the tags survive the journey. Click your own tagged link and confirm your analytics records the source, medium, and campaign. Some platforms strip query parameters on redirect or preview; find out with your own link, not with launch-day traffic.
   ```text
   [ ] tagged link clicked, parameters recorded correctly
   [ ] redirect chains preserve the parameters
   [ ] short links (if used) forward them intact
   ```
   Expected output: a verified path from link to report. Success check: a test click appears in analytics with the right campaign name.

4. Read the campaign report weekly, not the raw URLs. Group by campaign to judge efforts, by source to judge venues, by medium to judge mechanisms. One launch, three cuts, each answering a different question.
   ```text
   by campaign: which effort drove the most arrivals
   by source: which venue keeps delivering
   by medium: which mechanism (posts vs listings vs docs) wins
   ```
   Expected output: a weekly three-cut read. Success check: you can name the best venue and the best mechanism this month.

5. Retire and document campaign names on a schedule. Campaigns are for efforts with a start and end; a permanent "general" campaign tells you nothing. Close out each campaign with a one-line verdict so the naming list stays meaningful.
   ```text
   campaign oct_launch: closed [date], verdict: [one line]
   ```
   Expected output: a closed-campaign log. Success check: no campaign older than a quarter is still "active".

## Variant phrasings
### UTM tagging best practices for devtools
General phrasing. Steps 1 and 2: the convention and the never-untagged discipline.

### How to track which forum post drives signups
Forum phrasing. One campaign per post or one source per venue; step 4's by-source cut is the answer.

### utm_source naming conventions
Naming phrasing. Step 1 expanded with examples of names that age well (venue names) vs names that rot (dates in the source field).

### Do UTMs work when agents share links
Agent-behavior phrasing. Yes, better than for humans: agents copy links verbatim instead of stripping parameters, so tagged links survive forwarding chains intact.

## Why it happens
Analytics attributes by referrer, and agent traffic often has no referrer: curl requests, copied links, and in-app browsers strip or never set it. UTM parameters travel in the URL itself, so they survive every client that preserves the link. For agent-driven traffic this is not a nice-to-have; it is frequently the only attribution signal that exists.

## Edge cases / pitfalls
- Some venues rewrite or shorten links and drop parameters. Test per venue (step 3); where parameters die, use a distinct landing path per channel instead.
- UTMs on internal links pollute your own data. Tag outbound links only; internal navigation should not start a new "campaign".
- Case sensitivity splits channels silently. Enforce lowercase in the convention and spot-check monthly.
- Do not put anything private in a UTM value. They are visible in the URL, logged everywhere, and forwarded by agents verbatim.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_A0pCmMihTwbupSrx-qw2fg
