A user clicks a product link in an email. Instead of landing on a mobile web page where they need to log in, find the product, and add it to their cart, they open directly to that product screen in your app with their account already active. That seamless transition is deep linking, and it is one of the most underutilized tools in mobile development. Deep links increase conversion rates by 2-3x compared to mobile web landings because they eliminate every friction point between intent and action.
What Deep Linking Is and Why It Matters
A deep link is a URL that opens a specific screen inside a mobile app rather than just launching the app's home screen. Think of it as a bookmark to a particular page, except the page lives inside a native application.
Without deep linking, every external reference to your app — from emails, social media posts, web pages, QR codes, or push notifications — can only do one thing: open the app. The user then has to navigate to whatever content they were interested in. With deep linking, every external reference takes the user exactly where they need to go.
The impact on key metrics is measurable. Apps with properly implemented deep linking see 2x higher engagement from email campaigns, 66% higher conversion rates from paid ads, and significantly lower bounce rates on re-engagement campaigns. Deep links also enable accurate attribution, letting you track which channels and campaigns drive actual in-app behavior, not just installs.
Three Types of Deep Links
Not all deep links work the same way. Understanding the three types is essential for choosing the right implementation for each use case.
URI Schemes (Traditional Deep Links)
URI schemes are custom URL protocols registered by your app. Instead of https://, your app defines its own scheme like myapp://. A link like myapp://product/12345 opens your app directly to product 12345.
URI schemes were the original deep linking mechanism and are still supported on both platforms. However, they have significant limitations: there is no fallback if the app is not installed (the link simply fails), any app can claim any URI scheme (creating potential hijacking), and they do not work in all contexts (some email clients and social apps strip custom schemes).
Use URI schemes only for internal communication between your own apps or for push notification payloads where you know the app is installed.
Universal Links (iOS) and App Links (Android)
Universal links and app links solve the problems of URI schemes by using standard HTTPS URLs. A link like https://yourapp.com/product/12345 works as a normal web URL in a browser, but if the user has your app installed, it opens the app directly to the product screen instead.
This approach requires hosting a verification file on your web domain. For iOS, you host an apple-app-site-association (AASA) file at https://yourapp.com/.well-known/apple-app-site-association. For Android, you host a assetlinks.json file at https://yourapp.com/.well-known/assetlinks.json. These files prove to the operating system that your app and your domain are owned by the same entity.
Universal links and app links are the recommended approach for all external deep links because they provide graceful fallback to the web if the app is not installed, verified domain ownership prevents hijacking, and they work across email, social media, and web browsers.
Deferred Deep Links
Standard deep links only work when the app is already installed. Deferred deep links solve the case where the user does not have the app yet. The user clicks a link, gets sent to the app store to install, and after installation and first launch, the app opens to the intended content as if the deep link had worked normally.
Deferred deep linking requires a third-party service or custom server-side solution to persist the link data through the install process. The link click is recorded server-side with device fingerprinting, the user is redirected to the appropriate app store, and after install, the app queries the server to retrieve the deferred link data and navigates accordingly.
This is critical for paid acquisition campaigns. Without deferred deep linking, every ad click from a non-installed user lands on the app's home screen after install, losing the context of what the user was interested in.
Implementation Across iOS and Android
Setting up universal links on iOS requires three steps. First, add the Associated Domains entitlement to your app with the domain applinks:yourapp.com. Second, host the AASA file on your server as a JSON document listing the paths your app handles. Third, implement the application:continueUserActivity: delegate method to parse the incoming URL and navigate to the correct screen.
Android app links follow a similar pattern. Add intent filters to your AndroidManifest.xml with autoVerify="true" for the relevant URL patterns. Host the Digital Asset Links JSON file on your domain. Handle the incoming intent in your activity to extract the URL and route the user.
For React Native apps, libraries like react-navigation have built-in deep link support through the linking configuration. You define a mapping from URL paths to screen names, and the navigation library handles routing automatically. For Flutter, the go_router package provides similar declarative deep link handling.
Deep Linking from Email Campaigns
Email is one of the highest-value channels for deep linking because recipients are typically existing users who already have your app installed. However, email deep linking has unique challenges.
Many email clients, particularly Gmail on iOS, open links in an internal browser that does not trigger universal links. The workaround is using a redirect page: the email links to a lightweight web page on your domain that immediately attempts to open the app via universal link. If the app opens, the web page is never seen. If it does not, the page renders a fallback experience with a prominent "Open in App" button.
For transactional emails — order confirmations, shipping updates, appointment reminders — deep links dramatically improve the user experience. Instead of "View your order" linking to a mobile web login page, it opens the order detail screen in the app where the user is already authenticated.
Social Media Deep Links
Social platforms present the biggest deep linking challenge because each platform has its own in-app browser with different behaviors. Facebook, Instagram, Twitter, LinkedIn, and TikTok all handle links differently.
Most social in-app browsers do not support universal links directly. The solution is a smart banner or interstitial approach: your link opens a web page that detects the user agent, identifies the social in-app browser, and presents a prominent "Open in App" button alongside the web content. On platforms that do support universal links (Safari, Chrome), the app opens directly.
Open Graph meta tags on your deep link landing pages ensure the link preview looks correct when shared. The og:title, og:description, and og:image tags control what users see in their feed before they click.
Attribution and Analytics
Deep links enable attribution that is impossible with standard app store links. When a user arrives via a deep link, you know exactly which campaign, channel, and creative drove the visit.
Key attribution data to capture from deep links:
- Source — Email, social, paid ad, QR code, web, or push notification
- Campaign — Which specific campaign or content piece drove the click
- Content — The specific item or screen the user was linked to
- Timestamp — When the link was clicked, enabling time-to-conversion analysis
- Conversion outcome — Whether the deep link led to a purchase, signup, or other goal
Encode these parameters into your deep link URLs and extract them on arrival. This data feeds directly into your analytics pipeline and enables accurate ROI calculation for every channel. For more on building a comprehensive mobile analytics strategy, see our Mobile App Analytics Guide.
Common Pitfalls and How to Avoid Them
Deep linking has more edge cases than most mobile features. These are the mistakes that cause the most user frustration:
- Broken fallback handling — If the app is not installed and your universal link falls back to the web, the web page must be useful. A blank page or an error destroys the user experience. Always build a full web fallback for every deep link path.
- AASA/assetlinks.json caching — iOS caches the AASA file aggressively. Changes can take 24-48 hours to propagate. Test on fresh installs, not existing installs. Android asset link verification happens at install time, so existing installs do not pick up changes.
- Authentication state mismatch — A deep link opens the product screen, but the user is logged out. They see a login form instead of the product. Handle this by saving the deep link destination, completing authentication, and then navigating to the saved destination.
- Missing routes — A deep link points to a screen that was renamed or removed in an app update. Implement a catch-all handler that gracefully falls back to the home screen with a friendly message rather than crashing or showing an error.
- Testing only the happy path — Test deep links with the app installed, without the app installed, from every major email client, from every social platform, in airplane mode, and after the app has been updated. Each combination reveals different behaviors.
Testing Deep Links Across Platforms
Manual testing across every platform and context is essential. Automated tests can verify URL parsing and routing logic, but the actual behavior of deep links depends on the operating system, browser, and app state.
Build a deep link test matrix that covers iOS Safari, iOS Chrome, iOS Gmail, iOS social apps, Android Chrome, Android Gmail, Android social apps, and QR code scanners. For each, test with the app installed and not installed. Document the behavior and build your fallback strategy accordingly.
Tools like Branch, Adjust, and AppsFlyer provide deep link testing dashboards that help visualize the flow across platforms. Even with these tools, manual verification on real devices is irreplaceable.
Frequently Asked Questions
What is the difference between deep linking and regular app links?
A regular app link simply opens the app to its home screen. A deep link opens the app to a specific screen or piece of content, like a product page, user profile, or order detail. The difference is like the difference between navigating to a website's homepage versus navigating directly to a specific article. Deep links carry context that tells the app exactly where to take the user.
Do deep links work if the app is not installed?
Standard deep links and universal links fall back to the web if the app is not installed, which is better than failing silently. Deferred deep links go further: they route the user to the app store, wait for installation, and then open the app to the intended content after first launch. Deferred deep linking requires a third-party service or custom server-side solution to persist the link data through the install process.
How do I handle deep links in a React Native app?
React Navigation provides built-in deep link support through its linking configuration. You define a mapping of URL path patterns to screen names, and the library handles parsing and navigation automatically. For platform-specific setup, you still need to configure universal links (iOS) and app links (Android) in the native project files. Libraries like react-native-branch add deferred deep linking and attribution on top of the basic routing.
Related Reading
- Mobile App Analytics Guide
- Cross-Platform Mobile Development
- Mobile App Onboarding UX: First Impressions That Retain Users
Need deep linking that actually works?
We implement deep linking strategies that connect your web, email, and social traffic directly to in-app experiences. From universal links to deferred deep linking and attribution, we handle the complexity so your users get seamless transitions.
Let's Connect Your Channels