Deep linking

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.

MechanismLooks likeOwnership proved byIf the app is missing
Custom URL schemeyourapp://product/42Nothing. 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/42An 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/42An 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 works

Either

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 guide

Do 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, explained

How 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 Native

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.

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.