Deep Linking: A Mobile Engineering Primer
A deep link is a URL that opens directly to a specific screen inside a mobile app, with optional context. The user clicks the link in an email, a message, a notification, or a web page. The app opens to the right screen. Done well, deep linking is invisible plumbing that powers marketing, sharing, and notifications. Done poorly, links route to the wrong place or open the web instead of the app.
What you actually need to know
- Universal links on iOS and App Links on Android are the modern default.
- Server side configuration files declare which paths your app handles.
- Deferred deep linking handles the case where the app is not installed.
- Capture destination, route through auth, redirect.
- Test on real devices after every configuration change.
Pattern
Use case
Universal links and App Links
Default for any URL that should open the app
Custom URL scheme
Legacy. Use only when universal will not work.
Deferred deep link
Marketing flow before app install
Push notification with deep link
Notification routing
Email with deep link
Lifecycle email routing
Share sheet with deep link
User sharing
The core argument
Deep linking is the plumbing that connects the rest of the world to your mobile app: the marketing email, the push notification, the shared URL, the QR code. Each of these is a link that should open the app to the right place. Done well, the linking is invisible. Done poorly, the links break and the user lands on the wrong screen, or stuck in a web browser.
The modern default is universal links on iOS and App Links on Android. The same URL works whether the app is installed or not. The configuration is straightforward but easy to misconfigure. The server side files declare which paths the app claims. The app entitlements declare the same. The platform connects the two.
The pattern that matters most for marketing flows is deferred deep linking. The user clicks a link before the app is installed. The link opens a fallback page. The user installs the app. The app opens to the destination the original link encoded. The user does not see the seam.
The pattern that matters most for product flows is authentication routing. The link arrives. The user is not logged in. The app captures the destination. The user logs in. The app redirects to the captured destination. The seamless experience is small engineering but easy to skip.
The setup checklist
Item
Required for
Associated Domains entitlement
iOS universal links
apple-app-site-association file
iOS universal links
Intent filters in AndroidManifest
Android App Links
assetlinks.json file
Android App Links
Universal Links handler in code
Both platforms
Authentication routing
Both platforms
Deferred deep link integration
Marketing flows
Analytics tagging
Attribution
Per environment configuration
Staging and production
Test on fresh device install
Verification
How much does this cost
The initial setup is roughly a week of mobile engineering work. The deferred deep link integration with a service like Branch is a few hundred USD per month. The ongoing maintenance is small. The return is the marketing, notification, and sharing flows that actually land in the app.
Features the deep linking system must have
- Universal links on iOS.
- App Links on Android.
- Custom URL scheme as a fallback.
- Authentication routing.
- Deferred deep link support for marketing.
- Analytics tagging on every link.
- Per environment configuration.
- A test plan that includes fresh installs.
Expert opinion
Deep linking is one of those mobile features that does not get attention until it does not work. The team ships universal links and forgets about them. The marketing team starts running campaigns. The links break for some users on some platforms. The conversion suffers. The fix is to invest in deep linking as a real feature with testing and observability. The investment is small. The marketing leverage is large.
Yashveer Singh, founder of Yashveer Labs
How this played out on a real project
A mobile client had universal links working perfectly in staging, but the apple-app-site-association file never made it to production. Marketing emails opened to the web instead of the app for real users, and nobody noticed for weeks.
We fixed the configuration. Added per environment files. Added a test on fresh install for every release. Added analytics tagging on every marketing link. The next campaign's app open rate from email tripled compared to the broken version.
The investment was two days. The marketing impact was measurable from the next campaign. The team adopted deep linking as a tested feature rather than as configuration that gets done once and forgotten.
For more on the related work, see the mobile app onboarding flow that converts and push notifications the architecture most apps get wrong.
Common mistakes teams make
- Universal links configured but never tested on a fresh install.
- apple-app-site-association on staging but not production.
- No authentication routing. Links land on login then are forgotten.
- No deferred deep linking. Marketing breaks for new installs.
- No analytics tagging. Cannot measure conversion.
- Custom URL schemes only. Wrong default in 2026.
- No per environment configuration. Confusion follows.
- Treating deep linking as one time configuration.
A one week setup plan
- Day one. Configure Associated Domains on iOS. Host apple-app-site-association.
- Day two. Configure intent filters on Android. Host assetlinks.json.
- Day three. Implement the universal links handler in the app.
- Day four. Implement authentication routing.
- Day five. Integrate deferred deep linking service.
- Day six. Add analytics tagging convention.
- Day seven. Test on real devices with fresh installs. Document.
For more on the related work, read the mobile app onboarding flow that converts and push notifications the architecture most apps get wrong. On the broader mobile side, building a mobile app without hiring a mobile engineer is the natural next read.
FAQ
Frequently asked
- What is the difference between a deep link and a universal link?
- How do I set up universal links?
- What about deferred deep linking?
- What if my app has multiple environments?
- How do I handle the link when the user is not authenticated?
- What about analytics on deep links?
- What is the most common deep linking mistake?
Author
Why this work lands with me
I am Yashveer Singh. Founder of Yashveer Labs. I take this kind of project because I have done enough of them to know what kills them. The version of me that writes a post like this is the same one who builds the system afterward. There is no handoff to a junior, no agency middleman, no surprise scope. That is the bet I am making on my own brand.