A deep link needs a synthesized return path
Aliases: deep-link return path · synthetic back stack · constructed up path
What it is
Once a deep link makes the leaf the first frame of the session, there is often no “previous page” and no parent that was actually walked. Synthesizing a return path is the product supplying a departure route people will accept as reasonable: usually the object’s ancestor chain on the tree, sometimes a source context (and when “back to that search in the email” is impossible, at least back to that category). It is not rewriting an off-site previous page that may sit in the browser into an in-site page. It is synthesizing an Up chain inside the product so that leaving this page is not the same as ending the whole task.
Why it happens
On an airdrop, the history stack either holds only the current frame or is topped by an external source. Users who tap Back often want “I’ve finished this, take me one level up,” not “take me back to Google.” If the product synthesizes nothing, the system can only exit the product or stall in a cul-de-sac. Native apps make this sharper: an Activity opened from a notification with no declared parent gives Up nowhere to go, and Back finishes the task.
Reasonable synthesis is not pushing the entire ancestor chain into history—that would take three Back taps to leave, and those middle pages were never visited, so the undo semantics are fake. A cleaner model: Back still owns real history (return to the external source when it exists, otherwise leave), Up and breadcrumbs walk the synthesized ancestors. Cold start in an app is the exception: there is no real history to pop, so Back must also walk a synthetic parent stack, or the OS kills the task. The synthetic target must be a level the user can recognize (that category, that folder), not a blank home or the default dashboard from the last login—that route is an escape, not a return path.
Studying it
Give the same deep link four leave designs: no synthesis, ancestors pushed into history, Up/breadcrumbs only, and a parent stack that takes over Back on cold start. Ask people to “finish with this object and get to the class it belongs to.”
- Dependent variables: whether they reach the true parent, unexpected exits from the product, how often never-opened intermediate pages are treated as “pages I visited.”
- Independent variables: synthesis strategy, presence of real external history, platform (browser / native cold start).
- Methodological note: when a SERP is available to return to, “synthetic Back” fights real history. Score whether Up still reaches the parent, not whether Back still reaches Google after being rebound. App cold start must be run on its own; a notification tap on a warm task is not a substitute.
Where it stops holding
If the user arrived from an in-site list, real history already is that list; synthesizing an ancestor chain conflicts, and Back should return to the list rather than the parent category. Deep links into OAuth or payment hops legally leave by closing the container, not by entering a category. Objects with no tree (a chat thread, a canvas) cannot synthesize ancestors; offer a task-level exit (conversation list, file list) rather than a fake taxonomy.
Applying it
- Declare a parent for every deep-linkable route: category page, folder, settings group. In the browser, walk that parent with breadcrumbs and Up; do not
history.pusha chain of ancestors nobody visited. - On app cold start from a notification or Universal Link, pre-fill the back stack with the parent stack so system Back pops to the parent instead of finishing.
- Label the synthetic target with the parent’s own name, not “Back.”
- Verify: open the deep link in a private window. Breadcrumb/Up must reach the parent; browser Back must reach the frame that opened the deep link (often external). Kill the process, open the same deep link from a notification; system Back must reach the parent and must not exit the app.
Related
- Within the group: G4.02.1 A deep link can skip the levels that normally teach location · G4.02.3 A dead deep link should degrade to the nearest live level
- Adjacent: G4.01 Back stack and back semantics · G2.01 Hierarchical navigation · E5.05 Breadcrumbs
- Search terms:
synthetic back stack·deep link·parent stack