What is deep linking?
Deep linking is sending someone from a link to a specific screen inside a mobile app — the product, the invite, the article — instead of the app's home screen or a web page. On iOS and Android it runs on three mechanisms, and which one fires depends on whether the app is installed and where the link was tapped.
How does a link open an app?
Universal Links and App Links are the modern default: ordinary https URLs that your domain vouches for, so the same link is a working web page for anyone without the app. Custom schemes still have a job, as the fallback a web page hands off to, but they cannot prove the app is yours.
| Mechanism | Looks like | Ownership proved by | If the app is missing |
|---|---|---|---|
| Custom URL scheme | yourapp://product/42 | Nothing. Any app can register the same scheme. | An error, or nothing at all. There is no web fallback. |
| Universal Links (iOS) | https://yourapp.link/product/42 | An apple-app-site-association file on your domain, plus the Associated Domains entitlement. | The URL opens as a web page in Safari. |
| App Links (Android) | https://yourapp.link/product/42 | An assetlinks.json file on your domain, plus an intent filter with android:autoVerify="true". | The URL opens as a web page in the browser. |
What are direct, deferred and contextual deep links?
The same link behaves differently depending on who taps it. Most apps need all three, and only one of them needs anything the operating system does not already provide.
App installed
Direct
The operating system opens the app at the linked screen. Universal Links and App Links do this on their own.
App not installed
Deferred
The user installs first, and the first open still lands on the linked screen. The store passes nothing across, so this needs a service that saw both the click and the install.
How deferred deep linking worksEither
Contextual
The destination plus a payload — a voucher code, a referrer, a group ID — so the first screen is personalised, not just correct.
How do deep links behave in practice?
What happens when someone taps a deep link?
If the link is an https URL your domain has associated with your app, and the app is installed, the operating system opens the app instead of the browser and hands it the URL. The app's router reads the path — /product/42 — and shows that screen. If the association is not in place, or the app is missing, the same URL simply loads as a web page, which is why every deep link should also be a working web address.
Why do deep links open the browser instead of the app?
Almost always because the domain association never verified, and neither iOS nor Android reports that as an error. The usual causes are an association file served with the wrong content type or behind a redirect, an Android signing fingerprint missing from assetlinks.json, or a device still holding a cached verdict from before the fix.
The App Links vs Universal Links setup guideDo deep links work inside other apps' in-app browsers?
Not reliably. Some in-app browsers and messaging clients resolve a URL themselves and never hand it to the operating system, so a Universal Link or App Link tapped there loads as a web page. A deep link needs a fallback page that can route onward from there, rather than assuming the operating system will always get the tap.
What happens if the app isn't installed?
The link falls back to the web, the user goes to the App Store or Play Store, and the destination is lost: neither store passes the link to the app's first launch. The user installs, opens, and lands on your home screen. Carrying the destination through the install is deferred deep linking, and it is the one part of deep linking the operating system does not give you.
Deferred deep linking, explainedHow do you add deep linking to a React Native or Flutter app?
The operating-system side is the same native configuration as any app — the Associated Domains entitlement on iOS, an autoVerify intent filter on Android — and the framework forwards the URL on to your JavaScript or Dart. React Native has one trap worth knowing before you start: the AppDelegate override that delivers Universal Links is not in the stock template, so they silently never arrive without it.
Deep linking in React NativeWhere are deep links worth using?
Anywhere a message promises something specific. Each of these has its own page with the link setup and what to measure.
Re-engagement ads
Ads aimed at people who already have the app. The click has to open the app on the promise, or the spend is wasted at the last step.
Cart recovery
A win-back message that opens the home tab is worse than not sending it. The link has to carry the cart.
Group invites
A class code, a team, a challenge, a private group. A fresh install should arrive already inside it.
SMS campaigns
High intent, a tight character budget, and the same failure as email — the link opens Safari on a phone that has the app.
Offline to app
Posters, table tents, event badges, receipts. The scan is easy; landing on the right screen after install is the part that fails.
Support links
A support reply that opens the app on the exact screen instead of describing the route to it. Unglamorous, and it measurably cuts tickets.
How should you test deep links?
A deep link that works on your own phone proves very little: your device has the app installed and a cached verdict about your domain, and you have never been a first-time user. The failures users hit — a fresh install, an in-app browser, a stale verification — only show up if you test for them on purpose.
Where to go next
See the whole route a LinkTrail link takes in one diagram, or go straight to the part you are working on. The deep linking guide in the docs covers the link object every SDK delivers.
Primary sources
- Apple · Supporting associated domains
- Apple · Allowing apps and websites to link to your content
- Google · Handling Android App Links
- Google · Verify Android App Links
Deep linking — common questions
What is deep linking?
Deep linking is sending someone from a link to a specific screen inside a mobile app — a product, an invite, an article — rather than to the app's home screen or to a web page. On iOS it runs on Universal Links, on Android on App Links, and both platforms also support custom URL schemes. Which mechanism fires depends on whether the app is installed and where the link was tapped.
What is the difference between a deep link and a normal link?
A normal link opens a web page. A deep link opens a specific screen inside an app when the app is installed, and a modern one is still an ordinary https URL, so it opens the matching web page for anyone without the app. The difference lives in the association between your domain and your app, which the operating system checks before deciding where the link goes.
Are Universal Links and App Links the same thing?
They are the same idea on two platforms. Universal Links are Apple's mechanism, verified through an apple-app-site-association file on your domain and the Associated Domains entitlement in the app. App Links are Google's, verified through an assetlinks.json file and an autoVerify intent filter. Both prove the domain and the app have the same owner, and both fall back to the browser when anything about that proof is off.
Are custom URL schemes still worth using?
As a fallback, yes; as the primary link, no. A scheme like yourapp:// cannot prove the app is yours, because any app can register the same scheme, and it has nowhere to go when the app is missing. Its remaining job is to let a web page hand a visitor to an installed app when the operating system did not intercept the https link — inside some in-app browsers, for example.
Do I need an SDK for deep linking?
Not for direct deep links: Universal Links, App Links and your app's own router are enough when the app is already installed. You need one for deferred deep linking and for attribution, because both require code running at the app's first launch that can match the install back to the click that preceded it. LinkTrail's SDKs cover iOS, Android, React Native and Flutter.