Traffic & Conversion Mapping

Context

A migration that ignores value treats a checkout page and an archived press release as equals — and that is how revenue paths end up as 404s while nobody-reads-it URLs get perfect 1:1 redirects. Traffic and conversion mapping fixes the priority order: it attaches measured sessions, conversions, and revenue to every URL in the inventory so redirect effort, QA depth, and rollback sensitivity all follow business value. Webmasters, SEO engineers, site architects, and technical PMs run it inside the Pre-Migration Auditing & Risk Assessment window, after the crawl baseline exists and before the redirect map is frozen.

The output is a value-tiered URL list plus a continuity plan for attribution itself — because a migration that preserves rankings but breaks GA4 cross-domain tracking has still blinded the business during its most fragile week.

URL inventory tiered by revenue value The crawl inventory joins to analytics revenue, splitting URLs into high, medium, and low value tiers that map to redirect priority. Value-Tiered Redirect Priority Inventory + GA4 / GSC High value Medium value Low value 1:1, full QA 1:1, sampled QA Category fallback
Joining the inventory to analytics revenue splits URLs into tiers, each mapping to a redirect and QA policy.

The instinct this page corrects is treating a URL inventory as a flat list. Inventories are visually dominated by whatever section has the most rows — usually an archive, a paginated series, or a faceted catalogue — and effort naturally flows toward the big block on the screen. Value is distributed almost inversely: on most estates a small minority of URLs carries the overwhelming majority of revenue, and those URLs are frequently unremarkable-looking pages sitting in a section with only a few dozen rows. Joining money to the inventory is what makes that visible before the redirect work is planned rather than after it is done.

There is a second, less obvious output. The same join tells you which URLs carry essentially no measured value at all, and that list is just as useful — it is the set you can legitimately consolidate or retire with a 410 rather than mapping one by one. Migrations routinely spend disproportionate effort producing perfect 1:1 redirects for pages nobody has visited in two years, which adds rules, adds chain risk, and adds QA surface for no return.

Pre-flight Checks

Capture indexation, traffic, and conversion states quantitatively before touching architecture.

  • Run a full crawl via Crawl Baseline Generation to document status codes, link equity, and render-blocking resources.
  • Map GA4 conversion events to current URL paths using BigQuery exports and custom-dimension tagging.
  • Record DNS TTLs, CDN cache headers, and WAF rules to prevent stale delivery during propagation.
  • Complete readiness scoring in the Pre-Migration Auditing & Risk Assessment repo before freezing CMS content.
  • Verify database snapshot integrity and enforce a strict content freeze across environments.
  • Confirm the analytics property, measurement ID, and consent configuration on the new environment match the legacy ones, since a placeholder ID shipped with the new build produces a site that works perfectly and reports nothing.

Execution Steps

1. Join Inventory to Revenue and Tier It

Make priority objective by attaching money to each URL. Export GA4 sessions, conversions, and assisted revenue plus Search Console clicks, join them to the crawl inventory on path, and split into high/medium/low tiers. Feed the tiers forward as the redirect priority matrix so high-value paths get 1:1 mappings and full QA.

Join on a normalised path, and expect the join to be the fiddly part. Analytics platforms record page paths with their own conventions — some strip the query string, some retain a subset of parameters, some record the rendered virtual path of a single-page application rather than the requested URL — while the crawl inventory holds absolute URLs and the logs hold raw request lines. A naive join on unmodified strings will match a fraction of rows and quietly report that most of the site has no traffic, which is a conclusion teams have acted on more than once. Normalise both sides to the same canonical form, then check the match rate before trusting any tier.

Pull a long enough analytics window to survive seasonality, and prefer BigQuery or the raw export over the reporting interface where sampling applies. Interface reports on large properties are frequently sampled, and sampling is worst exactly where you care most — among the low-traffic pages, where a page with genuine but modest traffic can round to zero and be tiered as worthless. Where sampled data is the only option, treat low-traffic conclusions as provisional and confirm against server logs, which are never sampled.

2. Preserve Attribution Across the Domain Boundary

Stop the migration from blinding analytics. Implement Mapping Legacy Traffic to New URL Structures to carry UTM parameters, referral paths, and session IDs across the transition, and configure GA4 cross-domain linker plus server-side GTM to avoid attribution fragmentation.

Preserve the query string on every redirect rule, not just the ones that obviously carry campaigns. This is a one-token change in most rule syntaxes — $is_args$args in Nginx, QSA in Apache — and omitting it silently strips utm_ parameters, affiliate identifiers, and session tokens from every redirected request. The damage is invisible in status-code testing, because the redirect works perfectly; it shows up later as paid traffic appearing as direct, affiliate partners disputing attribution, and a marketing team unable to reconcile spend with results during the one week they most need to.

3. Validate Tracking in Staging

Catch tracking breaks before they cost a launch week. Verify conversion pixels and data streams in staging with browser network inspectors and Tag Assistant, confirming events fire with correct parameters before DNS cutover.

Test with the consent banner in its real configuration, not with tracking force-enabled. Analytics on modern sites is gated by a consent layer, and that layer frequently holds the domain name in its own configuration — so a migration can produce a site where consent is never granted on the new hostname, tags never fire, and every dashboard reads zero while the site itself is perfectly healthy. The check takes a minute: load the new environment fresh, accept consent as a user would, and confirm the tag fires afterwards.

4. Run Dual-Stream During Propagation

Keep continuity while the world resolves to two answers. Maintain dual-domain GA4 data streams until global propagation completes and _ga cookies stabilise, and hand the value tiers to Stakeholder Communication Plans so monitoring focus follows revenue post-launch.

Tiering is the step that converts the join into a plan, and each tier should carry a different obligation for redirects, for QA, and for how sensitively you watch it after launch.

What each value tier obliges you to do Four URL value tiers compared by share of URLs, share of revenue, the redirect treatment each requires, and how each is verified before launch. A few per cent of URLs, most of the revenue Tier URLs Revenue Redirect treatment Verified by 1 — critical ~2% ~60% 1:1, single hop, no exceptions tested individually 2 — high ~10% ~30% 1:1 where a target exists bulk curl sweep 3 — low ~40% ~9% consolidate to category sampled per template 4 — no measured value ~48% ~1% retire with 410, deliberately listed, not tested Tier 4 is the one worth arguing about: mapping it costs rules, chain risk, and QA time, and buys almost nothing.
Proportions vary by estate, but the shape rarely does — which is why an alphabetically-ordered redirect plan spends most of its effort on the bottom two rows.

Configs / Commands

Two of the four fragments below exist purely to protect attribution rather than availability, which is why they are easy to omit: nothing fails visibly without them. Treat the query-string preservation and the linker configuration as part of the redirect deliverable, reviewed in the same change as the rules themselves, rather than as an analytics task scheduled separately and therefore later.

# Nginx: preserve query strings on 301 — use $is_args$args to append the original
location ~ ^/legacy-category/(.*)$ {
    return 301 /new-structure/$1$is_args$args;   # keeps UTM + tracking params intact
}
# dig: verify SOA TTL and reduce 48 h before cutover via the registrar API
dig @ns1.example.com example.com SOA +short      # confirm current minimum TTL
// GA4 cross-domain linker (GTM container init) — preserves attribution across domains
gtag('set', 'linker', { domains: ['old-domain.com', 'new-domain.com'] });
# Identify 4xx/5xx in access logs for post-launch triage, ranked by frequency
awk '$9 ~ /^[45]/ {print $9, $7}' access.log \
  | sort | uniq -c | sort -rn > migration_errors.csv   # top offenders first

Hand the tiers forward rather than keeping them in the audit. Their value is greatest downstream: the redirect work uses them to sequence, QA uses them to sample, monitoring uses them to weight alerts, and the rollback thresholds use them to decide which conversion paths count as critical. A tiering exercise whose output stays in a spreadsheet owned by one analyst has done the hard part and skipped the useful part.

Validation

Every item below is a pass or fail rather than a judgement, and each maps to a command you can re-run after remediation rather than a review somebody has to repeat by hand.

Systematic checks before production traffic routing.

Avoid these deployment failures — each of these has cost a real migration its first week of data:

  • Regex over-matching that silently creates redirect chains — test representative samples first.
  • GA4 session fragmentation from missing _ga cookie preservation across subdomains.
  • CDN cache invalidation failures serving a legacy robots.txt to Googlebot.
  • Headless CMS hydration delays stalling server-side rendering and indexation.
  • rel="canonical" left pointing at the legacy domain, causing duplicate-content dilution.
  • A consent banner configured against the old hostname, so tags never fire and every dashboard reads zero on a perfectly healthy site.

The attribution side of this page is the part teams most often discover too late, because nothing about it is visible in a status-code check. A migration can produce flawless redirects and still leave the business unable to answer whether the migration worked, which during the soak window is the only question anyone is asking.

How a domain change breaks attribution, and what preserves it A session crossing from the legacy to the new domain loses its cookie, referrer and campaign parameters by default, appearing as a new self-referred visit; the cross-domain linker, query-string preservation and dual data streams each restore one of those. Three things are dropped at the domain boundary What is lost Symptom in the reports What preserves it The _ga client cookie one user counted as two cross-domain linker Campaign parameters paid traffic reads as direct $is_args$args on the 301 The original referrer self-referral inflates sessions referral exclusion list Historic comparability no before-and-after at all keep the same property The last row is the one that cannot be fixed afterwards — starting a fresh property on cutover day destroys the comparison permanently.
Each failure produces a plausible-looking report rather than an obvious error, which is why all four need verifying in staging rather than after launch.

The error-ranking command deserves to be run continuously rather than once. Sorted by frequency, the post-launch 4xx and 5xx list is the fastest route to the handful of rules that matter — a single mis-scoped pattern typically produces thousands of identical failures and sits unmissably at the top, while genuinely isolated problems trail off below. Diff the top of that list against the intentional-retirement list from the audit, and whatever remains unexplained is the real work queue for the first hours after cutover.

Rollback Triggers

Pre-author scripts and assign ownership; fire automatically on threshold breach.

  • 5xx error rate exceeds 2% across monitored endpoints.
  • Organic traffic drops >30% within 2 h of cutover.
  • Any critical conversion endpoint returns a non-200 status.
  • Crawl-budget exhaustion or conversion-rate drop flagged by Datadog/New Relic synthetic monitors.

FAQ

How do I decide the cut-off between tiers? Draw the lines at natural breaks in the cumulative value curve rather than at round percentages. Sort the inventory by value and plot the running total: on most estates there is a visible knee where a small group of URLs accounts for the bulk of it, and a long flat stretch further down where thousands of pages contribute almost nothing between them. Those inflection points are your tier boundaries, and they are defensible in a way that “top 100” is not — they describe the estate rather than a convention. Re-derive them per migration, since the shape differs considerably between an e-commerce catalogue and a publisher’s archive.

Who should own the tiering, engineering or marketing? Jointly, with marketing owning the value definition and engineering owning the join. Handing the whole exercise to engineering tends to produce technically clean tiers built on last-click revenue nobody in marketing would endorse; handing it to marketing tends to produce a defensible value model that cannot be joined to the URL inventory because the path formats do not match. The split that works is that one side decides what counts as valuable and the other makes the data line up, with both signing off on the resulting tiers before they drive any redirect work.

How do I preserve conversion attribution during DNS propagation? Configure cross-domain linker tracking in GTM, run dual-domain GA4 streams until propagation completes, and verify _ga cookie persistence in browser dev tools during synthetic testing.

What is the optimal TTL reduction timeline? Lower TTL to 300 s 48 h before cutover, verify propagation with dig @8.8.8.8 domain.com +short, run the record swap in a low-traffic window, and watch resolver latency for the first 2 h.

How can I validate redirect mapping without crawling the live site? Use staging curl -sIL batch scripts and Screaming Frog list mode against the pre-exported inventory to confirm 301 accuracy, single-hop chains, and destination parity before touching production DNS.

What triggers an immediate rollback? A 5xx rate above 2%, organic traffic down >30% within 2 h, or any critical conversion endpoint returning non-200 — with rollback scripts pre-tested in staging before the cutover window opens.

Should attribution use last-click or something richer for tiering? Something richer wherever the data supports it. Last-click systematically undervalues the pages that do the persuading and overvalues the last step before checkout, which on most sites means category and comparison pages score far below their real contribution. Since the whole purpose of tiering is deciding what deserves protection, an attribution model that hides the assisting pages will happily let you deprioritise exactly the content that drives the funnel. Where a data-driven or path-based model is unavailable, entrance counts and assisted-conversion counts are serviceable proxies.

How long should the dual data streams run? Until global resolver adoption is complete and the _ga cookie population has turned over, which in practice means the full soak window rather than the propagation window — commonly a week. Running them longer is harmless; stopping them early produces a gap in the data at exactly the point where you most want continuity. Set an explicit end date with an owner, though, because dual streams left running indefinitely become a quiet source of double-counting that somebody discovers during a quarterly review.

What is the single most valuable check to run on staging? Fire a real conversion on the new environment and confirm it appears in the analytics property with the correct campaign attribution. It is a slow check compared with automated tag validation and it exercises the entire chain — tag present, parameters preserved, cookie carried, event mapped, property correct — in a way no individual assertion does. Most attribution failures found after launch would have been caught by one person completing one purchase in staging and looking at where it landed.

What if the site has no meaningful conversion events to tier against? Fall back to a value proxy rather than abandoning the exercise. Entrances, engaged sessions, Search Console clicks, and internal search-to-page transitions all approximate importance well enough to produce a usable ordering, and for publishers or reference sites the ordering they produce is frequently better than a revenue model would be. The property that matters is not that the metric is money, but that it is measured and applied consistently — any consistent measure beats an alphabetical list or an editor’s sense of which pages are important.

Should tiering be redone after launch? Re-run the join once the new estate has a few weeks of its own data, and compare tiers rather than replacing them. Pages that dropped a tier after migration are your highest-value diagnostic signal — far more actionable than an aggregate traffic figure, because each one points at a specific URL whose treatment can be inspected. This comparison is also the clearest evidence for whether the migration met its goals, which is why the pre-migration tiering needs to be preserved rather than overwritten.

Related

← Back to Pre-Migration Auditing & Risk Assessment

Explore Sub-topics