UTM Hygiene for Instagram DM Links (Comment-to-DM)
UTM Instagram DM attribution is boring and it is how you stop arguing with ads. Put clean tags on the destination so comment-to-DM traffic is visible in analytics — without turning the message into a tracking novel. Use a shortener or a button if the query string looks ugly in the bubble. Do not claim CommentLink rewrites every click into GA4 for you unless you configured the destination.
This is hygiene for links you send after a keyword comment. ROI still needs a formula: Instagram automation ROI. Coupon codes are a second ledger: coupon attribution. How to send the link at all: send a link when someone comments.
A convention that survives a team
- utm_source=instagram — the surface they came from.
- utm_medium=dm or comment_to_dm — the job: a keyword comment, then a private reply with this URL.
- utm_campaign=the post or drop name — the specific Reel, not a vague “instagram” bucket.
- utm_content=the keyword — LINK versus PRICE versus GUIDE when two keywords share a campaign.
When two Reels teach LINK, campaign is how you tell them apart. Keep names boring: lowercase, hyphens, the media nickname your team already uses. Do not put personal data, prices, or the whole caption into a UTM.
A pattern you can paste
Example: https://example.com/lookbook?utm_source=instagram&utm_medium=comment_to_dm&utm_campaign=reel-lookbook-12-sep&utm_content=link
Apply it to the destination the button or raw URL actually opens. A pretty shortener that drops the query string is not tagged. CommentLink does not invent Google Analytics events for you. If the destination is tagged, your analytics tool can see those parameters. If it is not tagged, you will not get a clean source.
Jaipur jewellery. Tuesday Reel campaign: reel-polki-tue. Caption keyword LINK. Destination keeps those four parameters. Thursday Reel of earrings gets reel-ear-thu. Same keyword, different campaign. Finance can finally stop merging them into “social.”
Buttons versus raw URLs
A button can hide the mess. The destination should still carry the tags. Disclose affiliates in the DM text. If the button opens a short link, unwrap it once and confirm the query string survives the redirect. A shortener that strips UTMs is a pretty lie.
Requests previews are short. Do not paste a 300-character tracking novel as the only line. Put a human sentence first, then the button. The tags live on the destination, not in the bubble poetry.
What UTMs prove — and what they do not
UTMs describe the click on that URL, and only if the person reaches a page that keeps the tags. They are not proof that someone opened the Instagram DM. They are not proof of a purchase unless your shop attributes the session. They are not an Instagram Ads dashboard.
- Screenshot of a PDF: no click, no UTM. Say so in the ROI sheet.
- In-app browser stripping query strings: test on iOS Instagram. If tags die, use a first-party redirect you control.
- Bio link with the same campaign name: you will double-count. Use utm_medium=bio versus comment_to_dm.
- WhatsApp hop: a new click needs its own tags if you send a second URL there. The Instagram comment did not tag WhatsApp for you.
Implementing hygiene without a tracking novel
- Write the four-parameter convention in a shared doc. One person owns campaign names.
- Build the destination URL. Click it yourself. Confirm GA4 or your shop shows the params.
- Put that URL on the send_buttons destination or the raw link in send_message.
- Test from a second account: comment, tap, confirm the landing page query string.
- Do not add utm_term as a dumping ground for the full caption.
- Review collisions monthly: two Reels, one campaign name, is how weeks go opaque.
Mistakes that make the tags useless
- utm_campaign=instagram on every Reel. Instead: the post nickname.
- Putting INR prices in utm_content. Instead: the keyword only.
- A shortener that 302s to a naked domain. Instead: keep the query string.
- Claiming CommentLink “syncs to GA4.” Instead: we send the URL you saved. You instrument the site.
- Using the same URL for GUIDE and CHECKOUT. Instead: two destinations, two content values — or two campaigns.
- Treating UTM clicks as DM opens. Instead: clicks are clicks. Opens are not a number we have.
Copyable campaign names
reel-{topic}-{dd-mon} — reel-thali-04-oct
carousel-{drop} — carousel-ss26-look
story-{date} if the URL is from a Story reply path — story-04-oct-menu
Never: utm_campaign=final-final-v3. Never: a customer phone number. Never: the UPI id.
How do I track Instagram DM clicks? Tag the destination URL. Confirm clicks in your analytics, not in an invented open rate.
What CommentLink cannot do with attribution
We do not rewrite every click into GA4, Meta Ads Manager, or Shopify unless you built that on the destination. We do not offer Click-to-Direct ad attribution. We do not read Broadcast Channel analytics. We do not turn a comment into a WhatsApp click with Instagram UTMs attached automatically.
Link-click tracking in the product, when you use it, is still not a full attribution suite. Keep UTMs on the page you actually own. If the page is a third-party marketplace that strips tags, pick a different landing page or accept the gap in writing.
Story, comment, and bio — keep the medium honest
A Story reply that sends the same lookbook still needs utm_medium that is not comment_to_dm if you want to see Story versus Reel. Use utm_medium=story_dm or keep comment_to_dm only for keyword comments. Mixing them is how a “viral Story” gets credit for a Reel you taught last week.
Bio clicks are the usual argument. If the bio button is the same lookbook, it must not reuse utm_medium=comment_to_dm. Finance will claim the DM automation “is not working” because bio ate the sessions. Split: utm_medium=bio versus comment_to_dm versus story_dm. Same source=instagram is fine.
Two people on a team shipping Reels: one uses reel-lookbook-12-sep, the other uses Lookbook_Sep. Analytics fragments. Own the nickname in a sheet. Lowercase hyphens. When a Reel is resused next month, bump the campaign or you will merge September into October.
A walkthrough for one keyword on two Reels
Reel A, denim. Keyword LINK. URL: /lookbook with campaign=reel-denim-04-oct and content=link. Reel B, belts. Same keyword LINK. URL: /belts with campaign=reel-belts-04-oct and content=link. If both pointed at /lookbook with the same campaign, you cannot tell which clip paid for the click.
PRICE on Reel A should not share content=link. Use content=price and a /pricing destination. GUIDE gets content=guide and a PDF page. The keyword in utm_content is how you debug a caption that accidentally taught two jobs.
Test: comment LINK from a second account, tap, paste the landing URL into a note. If the query string is gone, fix the shortener before you argue with ads. Then comment PRICE and confirm a different content value. That is hygiene. It is not a CommentLink feature toggle.
FAQ
How do I track Instagram DM clicks?
Tag the destination URL. Confirm clicks in your analytics, not in an invented open rate. UTMs do not prove the DM was opened.
What UTM medium should I use?
comment_to_dm or dm. Keep it stable. Do not reuse bio.
Does CommentLink send events to GA4 for me?
Not unless you configured the destination. We send the URL you saved. The site has to keep the query string.
Should the tracking string sit in the DM text?
Prefer a button that hides it. The destination must still carry the tags. Do not make the bubble a novel.
What if people screenshot and never click?
You will undercount. Say so on the ROI sheet. A coupon in the PDF is a different ledger.
Can I put the customer’s name in a UTM?
No. No personal data in query strings. Campaign and keyword only.
Can Story DMs use the same UTM as comment-to-DM?
Only if you are willing to merge those sessions. Prefer a distinct utm_medium so Story versus Reel is visible.
Related reading
Send the link in a private DM
Connect Instagram with Meta login and send a private DM when someone comments a keyword.
See comment-to-DM