linkutm Logo

How to Track Traffic From Website Updates: New Pages, CTAs, and Campaigns

Bhargav Dhameliya
Bhargav Dhameliya
July 13, 2026
5 min read
track website update traffic featured

You shipped a batch of website updates last month. Two new landing pages. A redesigned CTA on the homepage. A campaign push across email and social. Then traffic jumped 30%.

Then your boss asks the one question you can’t answer: what caused it?

You open GA4. Sessions are up. But the credit is smeared across “Direct,” “Organic,” and a campaign name someone typed three different ways. You genuinely cannot say which update moved the number.

Look, I run linkutm, a link tracking tool, and I see this every week. A traffic spike you can’t attribute is a lucky guess, not a strategy. You can’t repeat what you can’t measure. Here’s how I tag new pages, CTAs, and campaigns so every spike has a clear cause.

Why a Traffic Spike Means Nothing Without Attribution

Here’s the thing. A number going up feels great for about a day. Then it becomes a liability.

If you don’t know the source, you can’t defend the budget that produced it. You can’t tell the SEO win from the paid win. And you definitely can’t decide what to ship next. Attribution is what turns a spike into a playbook.

The core problem is that website updates blur together in analytics. A new page, a new button, and a new campaign can all fire on the same day. Your reports show the combined result, not the individual contribution. Understanding traffic source data is the first step, but raw source and medium fields rarely map cleanly to the specific change you made.

The honest limitation: no tool separates overlapping updates perfectly after the fact. You have to tag intentionally before you launch, not reconstruct it later.

Map Every Update to One Tracking Dimension

Start here. Before you tag anything, decide which analytics dimension each type of update belongs to. This one decision prevents most of the mess.

I use a simple rule. Each website update maps to exactly one tracking dimension:

Update typeTracking dimensionWhat it answers
New landing pageLanding page reportDid people actually reach the new page?
New or moved CTAutm_content on the linkWhich button or block got the click?
New campaign pushutm_campaignWhich launch sent the traffic?
New channelutm_source / utm_mediumWhich platform delivered it?

When you keep these separate, GA4 stops lying to you. A CTA click never gets confused with a campaign. A new page visit never hides inside “Direct.”

The trade-off is discipline. This only works if every teammate follows the same map. One person tagging a CTA as a campaign breaks the whole view. That is why I enforce it with shared rules instead of hope.

Diagram mapping website updates to tracking dimensions: new page to landing page report, CTA to utm_content, campaign to utm_campaign, channel to utm_source and medium

Why start with the links, not the page? Because a new page has no traffic of its own. It borrows traffic from whatever points at it. So the tracking lives on the pointers, not the page.

When you launch a new page, three kinds of links drive people there:

  1. Internal links from your existing pages. These show as internal navigation, not a new source.
  2. External links you place on social, email, or partner sites. These need tags.
  3. Organic discovery once the page gets indexed. This shows as organic search over time.

The mistake I see: teams launch a page, share it everywhere with a raw URL, then wonder why it all lands in direct traffic. A pasted link with no tags and no referrer defaults straight to Direct. The spike is real, but the cause is invisible.

Tag every external link that points to the new page. Use a consistent campaign value like page-launch-pricing so you can filter the landing page report by that exact push. Now you can prove the launch drove the visits, not a coincidence.

The limitation here is organic. You cannot tag a Google result. For that portion, lean on Search Console impressions and clicks for the new URL, and accept a short indexing lag before the organic share appears.

Real talk. This is where most teams lose the plot. They redesign a CTA, traffic to the destination rises, and they credit the button without proof. Maybe it was the button. Maybe it was the campaign running the same week.

The fix is one trackable link per CTA. Each button, banner, or text link gets a distinct tag so clicks never blur together. The utm_content parameter exists exactly for this. It labels which element inside a page or email got the click.

Say your homepage has three CTAs pointing at the same signup page:

yoursite.com/signup?utm_source=homepage&utm_medium=internal&utm_campaign=q3-redesign&utm_content=hero-button
yoursite.com/signup?utm_source=homepage&utm_medium=internal&utm_campaign=q3-redesign&utm_content=mid-page-banner
yoursite.com/signup?utm_source=homepage&utm_medium=internal&utm_campaign=q3-redesign&utm_content=footer-text-link

Same destination, three content values. Now GA4 tells you the hero button pulled 4x the clicks of the footer link. That is a decision you can act on. Building these by hand gets old fast, so I generate them with a UTM builder that keeps the naming identical every time.

One honest gotcha: tagging internal links can start a new GA4 session and inflate your session count. Use internal CTA tags deliberately, on the specific buttons you are testing, not on every internal link sitewide.

Landing page with three CTAs tagged by utm_content value showing per-button click counts, hero button winning over mid-page banner and footer link

Campaigns: Tag the Launch, Not Just the Channel

Why does this trip people up? Because “campaign” and “channel” get used interchangeably, and they are not the same. The channel is where the traffic came from. The campaign is the reason you pushed it.

A website update often ships alongside a promotional push. New feature page plus an email blast plus a few social posts. If you only tag the channel, every push you ever run from email looks identical in reports. You lose the ability to compare this launch against the last one.

So tag the launch with a specific utm_campaign value tied to the update:

yoursite.com/new-feature?utm_source=newsletter&utm_medium=email&utm_campaign=july-feature-launch
yoursite.com/new-feature?utm_source=linkedin&utm_medium=social&utm_campaign=july-feature-launch

Same campaign, different sources. Now your campaign tracking view rolls up every channel under one launch. You see total launch traffic and the channel split inside it. That is the number your boss actually wanted.

The consistency problem is the killer. july-feature-launch, July_Feature, and feature-launch-july become three campaigns in GA4 and fragment your data. I solve this with reusable templates so the campaign value is picked from a list, never retyped.

How to Read the Spike in GA4

Now the payoff. With updates tagged cleanly, reading the spike takes minutes instead of guesswork. Here is the exact sequence I run.

  1. Set a date range that spans a few days before and after launch. You need a baseline to compare against.
  2. Open Reports > Engagement > Landing page. Filter to the new page URL. This confirms the page got real traffic and shows the trend line.
  3. Open Reports > Acquisition > Traffic acquisition. Add the campaign as a secondary dimension. This splits the spike by launch.
  4. Add utm_content as a further breakdown to see which CTA carried the clicks.
  5. Compare the post-launch window against your baseline. The difference is your update’s contribution.

For live monitoring, I do not wait on GA4’s processing delay. linkutm’s real-time click analytics show tagged link clicks the moment they happen, so I can confirm a launch is working within minutes of hitting send. GA4 is my system of record. Real-time click data is my early warning.

If your reports still show a large unexplained chunk, your GA4 setup is likely dropping referrers or bucketing tagged traffic wrong. That points to the failure modes below.

Analytics report showing a traffic spike from website updates split by landing page and campaign, with a flat pre-launch baseline and clear post-launch lift

Where This Breaks (and a Pre-Launch Checklist)

Clean tagging still has blind spots. Knowing them keeps you honest about what the data can and cannot prove.

  • The Direct bucket absorbs untagged traffic. Any share without tags or a referrer lands in Direct. If a teammate posts the raw URL, that traffic is orphaned. There is no way to reclaim it after the fact.
  • Dark social hides real referrals. Links shared in DMs, Slack, and messaging apps strip their referrer. They look like Direct even when they came from a specific push.
  • Self-referrals from the new page. A misconfigured cross-domain setup can make your own new page show as a referrer, double-counting sessions.
  • Organic and paid can rise at the same time. A spike during a launch week might be partly SEO catching up, not your campaign. Segment paid and organic separately before claiming credit.

To avoid the common ones, I run this checklist before any website update goes live:

  1. List every new page, CTA, and campaign shipping in this update.
  2. Assign each one its tracking dimension using the map above.
  3. Generate tagged links for every external and tested internal link.
  4. Confirm campaign values come from a shared list, not free typing.
  5. Send a test click through each link and verify it appears in your reports.
  6. Screenshot your baseline metrics so the before-and-after is undeniable.
Six-step pre-launch tracking checklist to attribute website update traffic: list updates, assign dimension, generate tagged links, confirm campaign values, test clicks, screenshot baseline

FAQs

How do I know which website update drove my traffic spike?

Tag each update with a distinct tracking value before launch. Give new-page links a specific campaign name, label each CTA with a utm_content value, and roll every channel of a push under one utm_campaign. Then compare the post-launch window in GA4 against a baseline period. The tagged dimension that rose is your cause.

Why does my new page traffic show as Direct?

Because the links pointing to it were shared without tags or lost their referrer. A pasted URL in an email, PDF, or messaging app defaults to Direct traffic. Tag every external link to the new page with UTM parameters so the visits attribute to the launch instead of disappearing into the Direct bucket.

How do I track individual CTAs on the same page?

Give each CTA its own link with a different utm_content value pointing to the same destination. GA4 then reports clicks per element, so you can see which button, banner, or text link performed best. This is the cleanest way to A/B a redesign without guessing which change mattered.

Do I need UTM tags if I already use GA4?

Yes, for anything you actively promote. GA4 detects organic and referral traffic on its own, but it cannot tell your July email push from your June one, or one CTA from another, without tags. UTM parameters are what give GA4 the campaign, source, and content detail your reports are missing.

How long after a website update should I wait to measure results?

Give paid and social pushes 24 to 48 hours for click data to settle. Give organic traffic 2 to 8 weeks, since new pages need time to index and rank. Watch tagged link clicks in real time for immediate confirmation, then use GA4 for the fuller picture once data processes.

Stop guessing which change moved your numbers. Tag your next website update with the free UTM builder at linkutm, ship it, and watch every new page, CTA, and campaign report its own traffic.

Bhargav Dhameliya

About Bhargav Dhameliya

Share this article

Ready to track your campaigns better?

Join thousands of marketers who use linkutm to build, track, and manage their marketing campaigns with ease.

Get Started for Free