Source: https://smartmetrics.co/blog/instagram-analytics/instagram-utm-tracking-ga4/

# Instagram UTM tracking: measure website traffic in GA4

Posted on November 3, 2026 by [smartmetrics](https://smartmetrics.co/blog/author/smartmetrics/)

Add UTM parameters to the links you share on Instagram, then use Google Analytics 4 to see the website sessions attributed to those links. Give each placement its own content label so you can compare them. Your website must already collect data in the correct GA4 property; the tagged URL does not install Analytics.

A tagged link identifies its campaign, not the Instagram account that clicked it. If someone copies the link elsewhere, it can still carry the same tags. Read the results as traffic attributed to that link, without assuming every visit came directly from the original placement.

## Build a link with consistent names

For an unpaid Instagram campaign, this is one possible naming scheme:

| Parameter | Example value | Purpose |
| --- | --- | --- |
| `utm_source` | `instagram` | Identify the platform |
| `utm_medium` | `social` | Group this unpaid social traffic |
| `utm_campaign` | `autumn_guide` | Identify the promotion |
| `utm_content` | `bio_guide` | Distinguish this link placement |

[Google's campaign URL documentation](https://support.google.com/analytics/answer/10917952?hl=en) explains the parameters and their case sensitivity. Pick one spelling and use it consistently. Mixing `Instagram`, `instagram`, and `ig` creates different source values.

For a page at `https://example.com/guide`, the complete example is:

```
https://example.com/guide?utm_source=instagram&utm_medium=social&utm_campaign=autumn_guide&utm_content=bio_guide
```

Replace the example domain and path with your actual destination. If the URL already contains a query string, append new parameters with `&` instead of starting a second `?`. Keep any existing parameters the page needs.

Use public campaign labels in these fields. A person's name, email address, or customer identifier has no place in a campaign label. Anyone receiving the link can read its URL.

## Give each placement a distinct content label

Keep the source, medium, and campaign the same when comparing two unpaid placements for the same promotion. Change the content label: for example, `bio_guide` for the bio link and `story_tutorial` for a link shared in a Story. These are your own naming choices, not reserved Instagram values.

Save each final URL in a small link register with its placement, destination, and date first used. If you reuse the same tagged URL in both places, the tags cannot separate their traffic later.

Keep paid campaigns separate from unpaid activity. Use the naming convention agreed for your advertising reports rather than copying this unpaid example into every ad. Do not rename existing campaigns halfway through a comparison without recording the change.

If you send people through a link-in-bio page, inspect the button that leads to your website as well as the initial Instagram link. Test that complete path. A tag on the first address does not guarantee that the website eventually receives it.

## Find the results in GA4

Open Reports, then Acquisition > Traffic acquisition, and select the dates covering your campaign. Choose Session source / medium as the table's primary dimension and search for `instagram / social`. Add Session campaign as a secondary dimension to separate campaigns. Google documents these controls in its [Traffic acquisition guide](https://support.google.com/analytics/answer/12923437?hl=en). If the report is absent, an editor may need to add it to your report navigation.

For a placement breakdown, use an exploration with Session manual ad content and Sessions, filtered to the relevant session source, medium, and campaign. The label sounds like advertising, but it is the session-level field for your `utm_content` value. See Google's [manual tagging and dimension mapping](https://support.google.com/analytics/answer/11242870?hl=en).

Use session dimensions for this review. First user source answers how someone was originally acquired; it can differ from the source of a later visit. Google's [guide to traffic-source scopes](https://support.google.com/analytics/answer/11080067?hl=en) explains why the User acquisition and Traffic acquisition reports answer different questions.

## Test the link before promoting it

Open the actual saved link from the placement where you intend to use it. Confirm that it reaches the correct page and that redirects or a link service preserve the campaign details until Analytics can collect them. Check the website's existing analytics setup and consent behavior if the visit is not collected.

Do not expect every test click to create a new campaign session. GA4 does not start a new session simply because it encounters another campaign URL during an existing session. Google describes this behavior in its [campaign processing documentation](https://support.google.com/analytics/answer/11242841?hl=en). A fresh browser profile can help you test a new visit without mixing it with your earlier browsing. Follow the site's normal consent flow.

Record the test time and exact URL. If data is missing from the report, check the property and date range, then allow for processing before changing the tags. Repeatedly renaming a link makes the original problem harder to trace.

## Compare the website visits

Suppose two placements send traffic to the same guide during the same period. These numbers are illustrative, not customer results or performance targets.

| Placement | Sessions | Engaged sessions |
| --- | --- | --- |
| Bio guide | 240 | 144 |
| Story tutorial | 160 | 112 |

The bio link has more sessions. The table cannot give you a click-through rate for either placement: it has neither link-click counts nor matching impression counts.

Engaged sessions divided by sessions gives 60% for the bio link and 70% for the Story link. Across both rows, the rate is `256 / 400 × 100 = 64%`. Averaging the two percentages would give equal weight to placements with different session counts.

GA4's website engagement rate and [Instagram engagement rate](https://smartmetrics.co/blog/instagram-analytics/instagram-engagement-rate/) use different actions and denominators. Keep the metric names explicit when placing them in the same report.

If the objective is leads, add a tested lead event to your website measurement and review the relevant key-event metric. Distinguish the number of events from the number of sessions with an event; a person may trigger an event more than once.

## Keep Instagram clicks and website sessions separate

An Instagram link tap and a GA4 session measure different stages of the visit. Repeated clicks during an existing session need not create additional sessions. If Analytics never collects the visit, it will have no observed session to report. Investigate a gap before calling it a percentage of lost visitors.

[Smartmetrics account analytics](https://smartmetrics.co/instagram-business-analytics/) includes profile visits and website-click metrics where available for the account. Put those figures beside the GA4 results in your [monthly Instagram report](https://smartmetrics.co/blog/instagram-analytics/instagram-analytics-report-template/), with a source and date range for each. Check which link placements the Instagram metric actually covers before comparing it with all Instagram-tagged website traffic.

Save the link register with that report. When a result changes next month, you can check whether the campaign changed, the destination moved, or someone replaced a tagged link with an untagged one.

Categories[Instagram Analytics](https://smartmetrics.co/blog/category/instagram-analytics/)
