Tracking & Attribution

What Is Visit-Sibling Inheritance in Attribution?

One visit can split into several sessions, and only the first carries the click id. Visit-sibling inheritance copies it forward so sales keep their source.

Quick answer

Visit-sibling inheritance is the repair step that gives a sourceless session the attribution of another session from the same visit. One person arriving once can produce two or three separate sessions — a redirect, a subdomain, a network switch — and only the first one carries the campaign tags and click id. If the session that converts is not the session that arrived, the conversion reads as Direct. Sibling inheritance matches those sessions on device and timing, then copies the click id and UTMs forward so the sale keeps the source it actually came from.

Tell us what's broken. We'll fix your tracking — free.

Describe the tracking/attribution problem you're stuck on and we'll map it to a fix: server-side conversions to Meta, Google, TikTok and Pinterest, plus first-party tracking that survives Safari. No code required.

Visit-sibling inheritance hands a sourceless session the attribution of another session from the same visit. One person arriving once routinely produces two or three sessions — a payment redirect, a jump to a subdomain, a phone dropping off wifi — and only the first carries the campaign tags and the click id. When the session that converts is not the session that arrived, the sale reads as Direct. Inheritance matches the siblings on device and timing, then copies the source forward.

The word doing the work is sibling: not two visits on two days, but fragments of one continuous visit that the web cut in half. The distinction matters because the fix is different. Joining visits across days and devices is identity resolution, and it needs a person-level identifier — an email, a phone number, a durable visitor id. Joining fragments inside one visit needs none of that: they happened minutes apart on the same device, and that is enough.


Why does one visit turn into several sessions?

Because a session ends whenever the browser stops looking like the same context, and several ordinary things do that. Each break starts a fresh session with an empty referrer and no campaign parameters — indistinguishable from someone typing your domain in cold.

The common causes, in rough order of how often they bite:

  • A payment or booking redirect. The visitor leaves for a gateway, a scheduler or a hosted checkout, then comes back. The return leg is a new arrival from a different domain.
  • A domain or subdomain hop. Landing page on one host, checkout on another. Cookies scoped to the first host do not travel, and the parameters were only ever in the landing URL.
  • A network switch. A phone walking out of wifi onto cellular gets a new IP address mid-session.
  • An in-app browser handoff. Tapping an ad inside a social app, then opening the page in Safari or Chrome, is two browser contexts, not one.
  • A timeout. Someone reads, gets distracted, comes back after the session window closes. Same tab, same person, new session.
  • A referrer that never survives. Cross-origin navigations frequently arrive with the referrer trimmed to a bare origin or missing entirely, depending on the sending page’s policy — rarely enough to name a channel, let alone a campaign.

None of these are edge cases. Between them they cover most paid traffic that ends in a checkout.

What does a sourceless session actually look like in a report?

It looks like Direct, and Direct is not a channel. It is an empty field wearing a channel’s name.

A report cannot distinguish “this person typed our URL from memory” from “this person clicked a Meta ad ninety seconds ago and the parameters did not survive the redirect”. Both arrive with no utm_source, no click id and no usable referrer, so both get filed in the same bucket. That is the main reason ad conversions show up as Direct at rates no media buyer believes.

The damage is not evenly spread. Sourceless sessions cluster at the end of journeys, because the end of a journey is where the redirects are. The traffic that gets robbed is the traffic that converts, so the campaigns that get starved are the ones that were working. There is a quick tell: if your Direct bucket converts at several times the rate of the rest of your traffic, Direct is not a channel in your account — it is a landfill for broken sessions.

How does visit-sibling inheritance actually repair a session?

By looking for another session that must be the same visit, and copying its attribution across. The test is deliberately narrow: same device signature, same short time window, one of them holding real campaign evidence. When a candidate passes, the sourceless session inherits the click id, the UTMs and the landing page from its sibling.

Dark dashboard mockup of two session cards from one visit: the landing session carries a Google Ads badge with a gclid and campaign tag, the checkout session eleven minutes later shows no source, and an inherit arrow copies the values across above a sibling match test scoring Tier 1 Strong

In practice the matching runs as a small ladder, strongest evidence first.

Tier 1 — same device, same network, minutes apart

The primary test is same client, same IP address and same user agent, within about thirty minutes either side. That combination is a strong claim: the same browser build on the same connection inside half an hour is the same person continuing the same thing. A session passing this test inherits the full strong signal — click ids and campaign tags, not just a channel name. Thirty minutes is a deliberate ceiling: widen it and you merge genuinely separate visits, tighten it and you lose the reader who spent twenty minutes on a pricing page first.

Tier 1B — the cellular handoff

The IP match is the part that breaks first, because phones change networks constantly. So there is a second, narrower tier for exactly that case: same user agent and a matching platform click cookie within a tighter ten-minute window, with the IP address allowed to differ.

That is a phone leaving the house mid-checkout. Dropping the IP requirement alone would be reckless, so this tier takes a cookie match and half the window in exchange.

Tier 2 — the weak referrer fallback

When no click id or UTM exists anywhere in the visit, the last resort is the referrer, and the result is explicitly labelled weak. A referrer can usually name a channel and almost never names a campaign. Treating that as equivalent to a click id is how reports quietly become fiction, so it is inherited, marked low-confidence, and shown that way.

How is this different from identity stitching?

Sibling inheritance repairs one visit. Identity stitching joins a person’s visits together, and the two run on completely different evidence.

Visit-sibling inheritance Identity stitching
Scope Fragments of a single visit A person’s sessions over weeks
Evidence Device, IP, user agent, timing Email, phone, visitor id, click id, payment customer id
Time window Minutes Months
Needs an identifier? No Yes
Fixes “The checkout session has no source” “She clicked on her phone and bought on her laptop”

They stack. Inheritance gives each visit one honest source; stitching then assembles those repaired visits into a journey. Run stitching alone and you join up sessions that are individually mislabelled. Run inheritance alone and you get clean visits that never add up to a person — the separate problem of how to track leads across devices.

When does sibling inheritance get it wrong?

It has real failure modes, and anyone selling you a version without them has not stress-tested it.

Shared networks can merge two people. An office, a campus, a café: same public IP, plausibly the same browser version, both browsing within the window. The user-agent requirement and the short window make this unlikely rather than impossible — which is why the window is minutes rather than hours.

It cannot invent a source. If the first fragment of the visit was itself sourceless — an ad blocker killed the script on arrival, or the link was untagged — there is nothing to inherit. Inheritance moves evidence; it does not manufacture it.

The handoff tier depends on a cookie. No platform click cookie, no cellular-handoff match. A visitor who blocks it gets the strict Tier 1 test or nothing.

Weak stays weak. A referrer-derived source should never be reported as though a click id proved it.

What can you do about this without any tool?

Several things, and each one means less repair work later.

  1. Carry parameters across redirects. If your checkout or scheduler lives on another host, append the campaign parameters to the outbound URL and read them on the way back.
  2. Store attribution on arrival, not at conversion. Write the click id and UTMs into first-party storage the moment the visitor lands. The landing URL is the only place they ever exist.
  3. Set your visitor cookie from the server. A cookie written by JavaScript faces much shorter browser caps than one set in an HTTP response from your own domain — the foundation of first-party attribution, and it costs nothing.
  4. Exclude your payment gateway from referral traffic in your analytics, so the return leg stops counting as a new acquisition.

Where this runs out is the repair itself. Redirect chains you do not control, in-app handoffs and network switches still split visits — and excluding a referral domain stops the gateway getting credit without giving it back to the ad.

How does PartialLeads apply visit-sibling inheritance?

It runs the three tiers above automatically, on every session, before anything is reported. A converting session with no source is tested against its siblings from the same visit, and on a Tier 1 match it inherits the strong signal — click ids and campaign tags — rather than being filed as Direct.

A concrete shape, with illustrative numbers: a shopper clicks a Google ad, lands with a gclid, browses, then checks out in a session showing nothing at all. Inheritance finds the earlier session on the same device and IP eleven minutes back, and the purchase is labelled Google Ads instead of Direct. One sale is a rounding error; across a redirect-heavy checkout it is a systematic bias.

Two surfaces prove it rather than assert it. The Journey column on the Leads list draws each touch as a badge, so a repaired visit shows the channel glyph on the converting touch instead of the grey dot that means “we do not know” — and that grey dot is still used honestly where nothing resolved. The Attribution report then carries a Recovered Attribution block itemising the revenue a raw-UTM or last-click view would have lost, so the repair is a number you can argue with rather than a silent adjustment.

Dark dashboard mockup of the Leads list: a lead row whose journey ribbon runs ad-click badge, grey unknown-source dot, green purchase square, above an Attribution report panel headed Recovered Attribution listing three mechanisms with purchase counts

Repaired attribution is also what gets sent back out. When a conversion is dispatched server-side through the Conversions API, it carries the click id the visit actually arrived with, not the empty source the converting session happened to hold. An event with the click id attached is an event the platform can match to a click.

Honest constraints, plainly: inheritance works within a visit, so cross-day and cross-device joins are the identity graph’s job. The referrer tier stays labelled weak. And where the first fragment carried no evidence either, the session stays Direct — reading that disagreement rather than trusting one number is the whole skill of learning to read an attribution report.

What breaks The mechanism Where you see it in the dashboard
The checkout session shows Direct although the visit began on an ad click Tier 1 sibling match — same client, IP and user agent within ±30 minutes — inherits click ids and UTMs Journey column on the Leads list: the converting touch carries the channel badge, not a grey dot
A phone switches from wifi to cellular mid-checkout and the IP changes Tier 1B cellular handoff — same user agent plus a matching platform click cookie within ±10 minutes Same journey ribbon, with the visit kept as one chain of touches
No campaign tags anywhere in the visit, only a referrer Tier 2 referrer fallback, inherited and marked as a weak signal Source label on the session, with the lower confidence shown rather than hidden
Conversions sent to ad platforms with no click id attached Repaired attribution is what the server-side dispatch uses, so the click id travels with the event CAPI activity log: the dispatched event payload for that lead
Revenue that a raw-UTM view silently drops First-touch and last-touch rows written for every matched purchase Recovered Attribution block in the Attribution report

Tell us what's broken. We'll fix your tracking — free.

Describe the tracking/attribution problem you're stuck on and we'll map it to a fix: server-side conversions to Meta, Google, TikTok and Pinterest, plus first-party tracking that survives Safari. No code required.

Sources

https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/customer-information-parameters https://developers.facebook.com/docs/marketing-api/conversions-api


Frequently asked questions

QWhat is a visit sibling?
Two or more sessions that are fragments of the same continuous visit by the same person, minutes apart on the same device. A redirect to a payment gateway, a hop to a checkout subdomain or a phone switching networks all create one. They are siblings because they share a visit, unlike the sessions of a returning visitor days later, which share only a person.
QWhy does my checkout session show no source when the landing page had UTMs?
Because the UTMs only ever existed in the landing-page URL. A redirect through a gateway or a move to another host starts a session with a fresh URL and usually no usable referrer, so there is nothing left to read. Unless something stored the parameters on arrival and carried them forward, the converting session is genuinely sourceless.
QHow is this different from cross-device tracking?
Cross-device joining works on person-level identifiers — an email, a phone number, a payment customer id — and can span weeks. Sibling inheritance works on device and timing signals inside a window of minutes and needs no identifier at all. They solve adjacent problems and are usually both necessary: one repairs each visit, the other assembles visits into a person.
QCan two different people on the same office wifi get merged?
It is possible, which is why the matching is narrow. The test requires the same user agent as well as the same IP address, inside a window measured in minutes, and the stricter tier also expects the same client. Widening any of those makes false merges more likely, which is the trade-off behind keeping the window short rather than generous.
QDoes inheritance make up a source when there is not one?
No. If every fragment of the visit arrived with no click id, no campaign tags and no usable referrer, nothing is inherited and the session stays Direct. Inheritance relocates evidence that exists somewhere in the visit; it never invents it. A report that never shows Direct is not a better report, it is a less honest one.
QDoes a referrer-only match count as real attribution?
It counts as a weak one, and it should be labelled that way. A referrer can generally identify a channel but not a campaign, an ad set or a creative. Treating it as equal to a click id inflates channel-level confidence and hides which campaign actually did the work, so the useful handling is to keep it and keep the confidence level visible.
QWill this change the numbers my ad platform reports?
Only if the repaired conversions are sent back to the platform. Fixing attribution inside your own reporting changes your reporting. When the corrected event is dispatched server-side with its click id attached, the platform has what it needs to match the conversion to a click, and it can act on that for optimisation and reporting.
QDo I still need UTM tags if sessions get repaired automatically?
Yes, more than ever. Inheritance copies whatever evidence the visit carried; the richer the first touch, the better every repair afterwards. Untagged links leave nothing to inherit and push the whole visit down to the weak referrer tier, which is a channel guess rather than a campaign fact.

Find the qualified leads your forms are currently throwing away.

Install PartialLeads on one landing page, send traffic, and compare what your CRM captured against what PartialLeads recovered and qualified.