Deep linking for mobile apps: open the right screen
Deep linking sends a user from a link straight to a specific screen inside your app instead of the home screen. On iOS and Android it uses verified domain files, and deferred deep linking carries the destination through install. Smler hosts those files per domain and tracks every click.
01
What is deep linking?
A normal link opens a web page. A deep link points at a place inside your app, like one plan, one product, or one invite. When someone taps it, the operating system decides whether your app should handle that URL. If it should, the app opens on that screen.
- Link types
- URI scheme, Universal Link, App Link
- App not installed
- Store, then deferred link
- Attribution window
- 90 days by default, configurable
- Web sales after a click
- 400-day first-party cookie option
- Free plan
- 25,000 installs
02
How do deep links work on iOS and Android?
Both platforms use the same idea: your domain proves it belongs to your app. On iOS that proof is the apple-app-site-association file. On Android it is assetlinks.json. When the file checks out, a tap on an https link on that domain opens your app instead of the browser. Smler also uses device-based routing, so one short link can send each visitor where they should go.
Smler checks
Platform and whether the app is installed
App installed
Universal Link (iOS) or App Link (Android) hands the URL to your app
Opens /products/summer-tote in the app
App not installed
Device routing sends iOS to the App Store and Android to Google Play
Store, then the same screen on first open (deferred deep link)
Desktop or no app
Web fallback for the same content
Opens the web page for the product
03
What is the difference between deep links, universal links and app links?
Custom URI scheme
yourapp://plans/summer-plan
Opens the app if it is installed and registered for that scheme.
It is not a normal web URL, so there is no web page to fall back to when the app is missing.
Universal Links (iOS)
https://go.yourbrand.com/summer-plan
A regular https URL that iOS hands to your app when the domain’s apple-app-site-association (AASA) file lists the path.
Needs the AASA file served correctly. If the app is missing, the same URL opens in the browser.
App Links (Android)
https://go.yourbrand.com/summer-plan
A regular https URL that Android opens in your app when assetlinks.json on the domain verifies your package and signing fingerprint.
Needs the verified assetlinks.json file. Without the app, the URL opens in the browser.
| URI scheme | Universal Link | App Link | |
|---|---|---|---|
| Looks like | Custom scheme | https URL | https URL |
| Platform | iOS and Android | iOS | Android |
| Needs a hosted file | No | apple-app-site-association | assetlinks.json |
| Web fallback when app is missing | No | Yes, the page opens | Yes, the page opens |
Use https links for anything you share. The mobile app URLs guide covers each platform in detail.
04
What is deferred deep linking, and when do you need it?
A plain deep link has one weak spot. If the app is missing, the person goes to the store and the destination is lost. Deferred deep linking keeps it: the click is held across the install and the first open routes to the screen the link promised. You need it whenever the click might be what causes the install. Below, the same four steps run twice.
Deep link
App not installed yet
Home screen
Product lost at the store
Deferred deep link
App not installed yet
Summer tote
Install credited to the link
The mechanics for Android and iOS, with code, are on the deferred deep linking page.
05
How do you set up deep links with Smler?
Smler hosts the AASA and assetlinks files per domain. The shapes look like this, with your own ids in place of the placeholders.
// https://go.yourbrand.com/.well-known/apple-app-site-association
{
"applinks": {
"details": [
{
"appIDs": ["TEAMID.com.yourbrand.app"],
"components": [{ "/": "/summer-plan" }]
}
]
}
}// https://go.yourbrand.com/.well-known/assetlinks.json
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.yourbrand.app",
"sha256_cert_fingerprints": ["AA:BB:...:FF"]
}
}]Check both files with the free AASA validator and assetlinks validator before you test on a device. Then follow the deep linking introduction and the device-based routing docs for the store and web fallbacks.
06
How do you track clicks, installs and conversions from a deep link?
Smler records every click. When the app opens from the link after install, that open is counted as an attributed install against the link. The default attribution window is 90 days and it is configurable. Leads and sales are recorded with server calls, and Shopify, WooCommerce, Stripe and Polar webhooks can send sales without custom code. For web visits, sm.js is served from /api/v2/attribution/sm.js?key=..., and a server-set first-party cookie option keeps a later web sale tied to the click for 400 days. Bot filtering and duplicate-sale protection keep the counts clean.
# Report the open for the click id the link carried
POST /api/v2/track/:clickId
# Tie a lead or sale to the same click (x-code header required)
POST /api/v2/conversion/track/lead
POST /api/v2/conversion/track/saleSee the conversion tracking guide and the attribution API reference.
07
What happens when the app is not installed?
Take a fitness app that emails the link https://go.yourbrand.com/summer-plan. The same URL behaves differently for each reader.
| Reader | What opens | What is logged |
|---|---|---|
| Installed | Opens the plan screen in the app | The click |
| Not installed (phone) | Store, then the plan screen on first open (deferred) | The click, then the attributed install on first open |
| Desktop | Web page for the same plan | The click |
Installed readers go straight to the plan screen. Readers without the app get the store first, and the deferred link brings them to the same plan screen on first open, as covered on the deferred deep linking page. Desktop readers see the web page.
08
Which use cases fit deep links?
Influencer links
One link per creator, so installs and sales stay with the creator who drove them.
Referral links
A per-user link carries the referrer through install. Smler records attribution. It does not pay rewards.
Email
A message points at one screen, like a plan or a product, instead of the home screen.
QR codes
Print and packaging clicks open the right screen for new and existing users.
Paid social
The ad click and the install are split by the store. A deferred link keeps the screen the ad promised.
Scenarios for each one are on the deep linking use cases page. Planning creator campaigns? Use the influencer ROI calculator, earned media value calculator, and influencer rate calculator.
09
How much does deep linking cost?
| Free | $0 | 25,000 attributed installs |
|---|---|---|
| Builder | $19 / month | 50,000 attributed installs |
| Team | $49 / month | 100,000 attributed installs |
| Scale | $129 / month | 500,000 attributed installs |
| Enterprise | From $299 / month | Custom volume |
Every plan includes deferred deep linking, and the Free plan covers 25,000 attributed installs a month. See pricing for the full plan details.
Frequently asked questions
What is the difference between a deep link and a normal link?
A normal link opens a web page in a browser. A deep link opens a specific screen inside a mobile app, like one plan or one product. On iOS and Android that uses a Universal Link or App Link on your domain, or a custom URI scheme. If the app is missing, a Universal Link or App Link falls back to the web page.
Do I need an SDK for deep linking?
Opening an installed app from an https link relies on the association files on your domain, not on an SDK. Carrying the link through an install, which is deferred deep linking, needs a read on the first app open. Smler has the @smler/deferred-link (React Native) and smler_deferred_link (Flutter) packages for that, and the deferred deep linking page shows the native Android read.
Does deep linking work if the app is not installed?
A plain deep link cannot open an app that is missing, so the person goes to the store or the web page. With deferred deep linking, the destination is kept through the install and the first open routes to the same screen. Desktop visitors fall back to the web page for the same content.
How do I host the apple-app-site-association (AASA) and assetlinks files?
Smler hosts the AASA and assetlinks files per domain, so you do not have to serve them from your own servers. Add your iOS and Android app details, then check both files with the free AASA validator and Android assetlinks validator before testing on a device.
How long does attribution last?
The default attribution window is 90 days, and it is configurable. For web sales after a click, a server-set first-party cookie option extends tying a sale back to the click to 400 days.