How much of a situation a link carries: whether opening it puts someone else in front of the same view, arranged the same way, with the same thing in focus — and whether it still does so a year later.
Deep linking is the move that supplies the addresses and covers what goes into them. This is the lens applied to the result: whether what arrives is what was sent.
What the link carries
Worth carrying is state that another person, or the same person later, would otherwise have to rebuild by hand:
- The search and filters that produced the current set
- How the view is arranged — layout, density, grouping
- Sort order and position within a long collection
- Where the actor is inside a space — zoom, pan, what is selected
- What is highlighted: a passage, a range, an annotation
- The route taken, where the surroundings are part of what is being shown
Left out is state that isn’t the sender’s to give away, or isn’t anything yet:
- Credentials and personal identifiers
- Passing interface state — an open menu, a hovered row, a modal mid-flight
- Unsaved work: a half-typed message, a form nobody has submitted
- Continuously changing values — a pointer position, an animation frame
- Whatever holds only for this session, such as being signed in or temporarily permitted
Fragments are not a way round the first of these. The value never reaches the server, but it stays in the address bar, in browser history, in the copied link, and in the screenshot.
Destination or route
When the same thing can be reached more than one way — a document that sits in a project and also on a team’s shelf, a card that appears on a board and in a search result — a link has a choice: name the thing, or name the way in.
Naming the thing gives it one address that everyone converges on, whatever path they took:
/documents/42
The recipient arrives at the document itself, with no sense of where it sits or what surrounds it.
Naming the way in preserves the surroundings:
/projects/alpha/documents/42
/teams/design/documents/42
The recipient lands where the sender was standing, sees the neighbours, and can move outward the way the sender could. The cost is visible in those two lines: the same document now has addresses that read differently and point at the same place, and neither party can tell they are holding the same thing. Carrying the whole route rather than one step of it — /projects/alpha/teams/design/documents/42 — restores more of where the sender had been, and asks the recipient to read a lot before they know what they are opening.
Decide by whether the surroundings change what the thing means. A document read on its own reads the same whichever shelf it was taken from. A node among its neighbours, a card in its column, a point on a canvas do not: separated from what is around them, they say something different, or nothing.
Arriving from a link
A link is written by someone who already has the state and opened by someone who has none of it. Two failures follow from that asymmetry, and both look fine from the sender’s side:
- State that never travelled. The view is rebuilt partly from the link and partly from what the recipient’s browser already held — a cached selection, an earlier filter, a preference set at some point in the session. It restores correctly for the sender every time and puts the recipient somewhere else.
- Links that resolve to nothing. An application that answers every address with its own shell has no way to say “this is gone”. A deleted item, a revoked permission, or a link from two versions ago comes back as an empty view. Either reconstruct what the link names or say plainly that it can’t be reconstructed — a blank view is the one response that tells the recipient nothing.
Resources & references
- Alfy (2025) Your URL is your state
- W3C History API specification
- Nielsen (1999) Deep Linking is Good Linking