Set Up GA4 Tracking for Your Guides
Every recommended product link in your Guide carries campaign parameters — utm_source=roccai, utm_medium=roccai_guide, the campaign name, its ID and the visitor's top three preferences. Four one-time settings in GA4 turn those into a named guide channel, a campaign report and revenue per preference profile.
Updated
Every recommended product link in your Guide arrives in GA4 already tagged as roccai / roccai_guide, carrying the campaign, the Guide it came from and the visitor's top preferences. Four one-time settings on the property turn that into guide sessions, conversions and revenue you can read.
When someone finishes a Guide and clicks one of the recommended products, that click carries campaign parameters into your analytics. GA4 reads them on its own — but until you add a channel group it files the traffic under Unassigned, because none of the default channel rules match a source and medium it has never seen. The setup below takes about ten minutes and applies to your existing history too.
Two routes, and which one you need
- Campaign parameters on links — on every recommended product link. Works for embedded and standalone Guides alike, and across domains: this is the only route that can tell a different site's GA4 that the visit came from a Guide. That is this article.
- Data layer events through Google Tag Manager — the live, per-card detail: which question was asked, what was answered, the running preference profile, which products were shown. It needs a parent page, so it covers embedded Guides only. See Track Guide Events in Your Data Layer.
- Your Roccai account — every session is stored and exportable to your CRM via integrations, with no consent dependency. The two routes above put that data where your marketing team already looks; they don't replace it.
The two GA4 routes answer different questions and will never fully agree — one counts sessions that reached your site, the other counts interactions inside the Guide. That is expected, not a discrepancy to reconcile.
What every product link carries
Campaign Source and Campaign Medium are pre-filled for you when you create a campaign link; the other three are generated per link. The last column is the dimension to use in GA4 reports.
| Parameter | What it holds | Example | GA4 dimension |
|---|---|---|---|
| utm_source | Always roccai. The channel does not go here — see “Naming your campaigns” below. | roccai | Session source |
| utm_medium | Always roccai_guide. This is the value that identifies guide traffic, and the one the channel group is keyed on. | roccai_guide | Session medium |
| utm_campaign | Your campaign name from the dashboard, lowercased and hyphenated. Sends the fixed value test when no campaign is set, or when the campaign is deliberately test — see “Naming your campaigns” below. | spring-instagram | Session campaign |
| utm_id | The campaign's ID, built as <guide>_<number>. Carries the Guide and the campaign in one value, so every campaign of one Guide shares a prefix. | tripfinder_7 | Session campaign ID |
| utm_term | The visitor's top three positive preference tags, strongest first — the same tag names you see in your Roccai dashboard. | nature_adrenaline_islands | Session manual term (Explorations only) |
A finished link looks like this:
https://yourshop.com/trips/costa-rica?utm_source=roccai&utm_medium=roccai_guide&utm_campaign=spring-instagram&utm_id=jdjkhjdhjks_djwjdlw&utm_term=nature_adrenaline_islands
How a guide session will look in your reports
Worth knowing before you compare guide revenue with ad spend. A campaign parameter arriving part-way through a visit does not start a new session in GA4 — that was Universal Analytics — but it does update source, medium and campaign for every event that follows. So a visitor who arrived from a Meta ad, used your Guide and then bought will have that purchase credited to roccai / roccai_guide in Traffic acquisition.
The original source is not lost. First user source / medium still says Meta, and any non-last-click attribution model still credits it — only the session-scoped dimensions move. This is ordinary behaviour for an on-site tool that tags its own links, and the same thing your on-site search or recommendation widget would do if it tagged links.
Set it up in GA4
Four one-time settings, walked through step by step below. You need Editor access on the GA4 property for the first one; the rest only need Analyst.
Keep the values consistent
GA4 is case-sensitive and does not normalise these strings: Roccai and roccai become two rows that never merge, and a channel group keyed on one will silently miss the other. Leave Campaign Source and Campaign Medium at their pre-filled roccai and roccai_guide — everything on this page depends on them. The campaign name is yours to change freely; that is what it is for.
Naming your campaigns
Because the source is always roccai, the channel a Guide ran in, travels in the campaign name. Name campaigns after where the link is used — spring-instagram, newsletter-week-12, paid-social-black-friday — and your GA4 report reads as a channel breakdown with no extra setup. campaign-2 cannot be recovered later, because GA4 keeps only the name it was sent. See Share your Guide and Create a Campaign for creating the links themselves.
One value to recognise: utm_campaign=test. It arrives in two cases — a Guide reached without any campaign set, and a link whose campaign is deliberately test, which is what demo and internal testing links use. Either way it is a fixed value shared across every Guide, so a test row in your report means “this session wasn't attached to a real campaign” and can't be broken down any further. Use Session campaign ID to see which Guide those sessions came from, and create a campaign link for anything you want to measure on its own.
What is never in the URL
Campaign parameters are plain text in a link, so nothing sensitive goes in them. Contact details from an input card, form field values and session identifiers stay out of the URL entirely. utm_term carries at most three preference tags. The full preference profile stays in your Roccai account and, for embedded Guides, in the data layer.
Roccai itself sets no cookies and stores nothing in the browser. Campaign parameters don't change that, any cookie involved belongs to your own GA4, on your own domain, under your own consent banner.
Create a channel group for guide traffic
Go to Admin → Data display → Channel groups → Create new channel group. Name it “Roccai guides”, add one channel with the condition Medium exactly matches roccai_guide, and order it above the fallback channels. Channel groups apply retroactively, so your existing history appears immediately. A standard property allows two custom channel groups beyond the default; Analytics 360 allows five. Key it on medium, never on source.
Build the campaign report
Go to Reports → Acquisition → Traffic acquisition. Set the primary dimension to Session campaign and add the filter Session medium exactly matches roccai_guide, with key events and purchase revenue as metrics. That gives you one row per campaign. Add Session campaign ID as a secondary dimension to see which Guide sits underneath each one.
Add an exploration for preferences and per-guide totals
utm_term never appears in standard reports — only as Session manual term in Explorations. Create a free-form exploration with rows Session campaign ID then Session manual term; values sessions, engaged sessions, key events and purchase revenue; and the filter Session medium exactly matches roccai_guide. Save it to the property so your team can reuse it. To see one Guide across all of its campaigns, add a second filter: Session campaign ID begins with that Guide's name.
Leave the guide host out of unwanted referrals
Do not add module.roccai.com under Admin → Data streams → your stream → Configure tag settings → List unwanted referrals. It looks like tidying up, but it turns guide visits into direct traffic and deletes exactly the credit you have just finished setting up.
