Anatomy
← Back to invoices ← names the destination, is a real URL
─────────────────────────
INVOICE #1043
Riverside Fit-Out Ltd
Small pattern, three obligations:
- Name the destination. "Back" alone is a guess; "Back to invoices" is an answer. The arrow is decoration on top of the word, not a replacement for it.
- Be a URL, not history.
history.back()behaves differently for someone who arrived from a link, and differently again after a form redirect. - Restore the state. Returning to a list that has forgotten the filters is most of the way to not having a back link at all.
Why it works
It removes the one question a leaf screen cannot otherwise answer — how do I get out of here — without spending the space a breadcrumb trail would need for a hierarchy that does not exist.
The state restoration is the part that earns its keep. Someone working a filtered, sorted list is holding a position in a queue. A back link that drops them at an unfiltered page one has technically navigated and practically undone their work.
Getting it wrong
- A bare arrow. Cheap to draw, and now every user tests it once to learn where it goes.
history.back(). Works in the demo, fails for bookmarks, deep links, and anyone who arrived after a redirect.- Losing the filters. The most common version of this failure, and the most annoying, because the person has to rebuild the view they were using.
- Placing it next to the primary action, where it reads as Cancel.
Exemplars
Stripe uses a named back link on detail screens and restores the list's filters, so working through a filtered set of payments is a loop rather than a series of round trips.
iOS made the named back link a platform convention — the button carries the previous screen's title — which is the clearest large-scale demonstration that naming the destination is worth the pixels.
The extractable rule: a back link is a promise to restore a position, not just a URL. If it cannot keep that promise, consider keeping the list on screen instead with a drawer.