What happens between the click and the page
The links in a delivered campaign email are rarely direct. Most of them are chains — two or three addresses deep — and every extra hop is a place the campaign can break after you hit send. Here is how chains form, how they fail, and how SendProofs records them.
Why your email's links are chains
When click tracking is on, your sending platform replaces each destination with a URL on its tracking domain. A click hits the tracker first, gets recorded, and is redirected onward. Add a link shortener, a partner's own tracker or a legacy URL that itself redirects, and the shape becomes tracking domain → intermediate → destination. The address printed in the delivered email is only the first stop; the page your reader lands on is at the other end of the chain.
What a hop is
A redirect is an HTTP response that says "not here — go there": a 3xx status plus a
Location header naming the next URL. Each hop is one request, one status
and one target. The common statuses, in plain terms:
- 301
- Moved permanently — the target is the resource's new address, and clients may remember it.
- 302
- Found — a temporary forward. The workhorse of click trackers: the tracking URL stays the canonical one, and each click is forwarded at click time.
- 307
- Temporary redirect, stricter — the follow-up request must use the same method as the original.
Why chains break after the send
The email is frozen the moment it is sent; every other part of the chain keeps moving. The most common failures live in the middle, not at the destination:
- Retired campaign slugs. The tracker archives or deletes the campaign, and its short links stop resolving — the destination page is fine, but no click ever reaches it.
- Expired tracker configuration. A custom tracking domain whose DNS or TLS setup lapses turns every link in every past email into an error page.
- Dead intermediate domains. A shortener or partner domain in the middle of the chain shuts down, and the chain ends at hop two.
This is why checking the template's destination URLs is not enough: the destination can answer perfectly while a middle hop is dead. Only the delivered email contains the chain that recipients will actually traverse.
Hops that deserve attention
- An HTTPS→HTTP downgrade mid-chain. One hop steps from an encrypted URL to plain HTTP. SendProofs records it as a warning on the resource so you can decide whether that hop belongs in your campaign.
- Loops. A hop points back to a URL already visited. Recorded as broken, with an explicit error code.
- Chains at the hop limit. More than 3 hops is recorded as broken. A chain that deep is fragile even on a good day — every hop is another dependency between your reader and the page.
- A redirect with no target. A 3xx status without a
Locationheader goes nowhere; recorded as broken. - A hop into an account action. If a redirect leads toward a recognized action link — sign-in, unsubscribe — the check stops at that hop and the resource is reported Protected, with the chain recorded up to that point.
How SendProofs records a chain
Redirects are followed up to 3 hops per resource, and every hop is recorded — from, to, and the status that caused it. Each next URL is safety-screened before it is followed, exactly like a first request: private and internal addresses are refused, and the protected-action patterns run again per hop. The whole chain fits inside one bounded time budget. Redirect evidence in depth.
| Hop | From | Status | To |
|---|---|---|---|
| 1 | campaign.example/launch?utm_source=email&utm_campaign=aug-launch | 302 | campaign.example/go/aug-launch |
| 2 | campaign.example/go/aug-launch | 301 | example.com/launch?utm_source=email&utm_campaign=aug-launch |
| Final | example.com/launch?utm_source=email&utm_campaign=aug-launch | 200 | — |
Sample data. This is the chain behind the "200 after 2 redirects · 312 ms" line in the sample report: two hops, then a terminal 200 — and the UTM review runs on that final URL, not the first one.
The honest limit
SendProofs follows HTTP redirects only. There is no browser and no JavaScript execution, so a JavaScript redirect or a meta-refresh interstitial is invisible — to SendProofs and to any other non-browser checker. A destination that answers 200 and then forwards with a script is recorded as a 200 at that URL: the chain in the report is the HTTP chain, and the recorded final URL is the last HTTP address, not necessarily the page a browser ultimately shows.
See the chains inside your next campaign
Upload the delivered test — every report records redirect chains hop by hop.