beginner20 minutes9 min readFEATURED

Deep Link Testing for Beginners: A Practical Guide

Learn what deep links are, why they break, and how to test them yourself using a simple browser-based tool - no code required.

Prerequisites:

  • Access to a mobile device (iOS or Android)
  • A mobile app to test
9 min read
20 minutes

You get a bug report: "The link from the marketing email isn't opening the right screen in the app."

You click the link. The app opens. But you're staring at the home screen, not the product page the link was supposed to show. Now what?

This is a deep link bug, and if you've never tested deep links before, it can feel like a black box. This guide focuses on what deep links do, why they break, and how to test them yourself using a simple browser based tool. There is no code involved and no complex setup.

What Even Is a Deep Link?

Think of a deep link as a shortcut into your app.

A regular link takes you to a website. A deep link takes you to a specific screen inside a mobile app, skipping the home screen entirely.

Example:

  • Regular link: https://amazon.com opens Amazon's website
  • Deep link: amazon://product/B08N5WRWNW opens the Amazon app directly to a specific product page

Deep links are everywhere. When you tap a notification and land on the exact message, that's a deep link. When you click a link in an email and the app opens to your order details, that's a deep link.

The Two Types of Deep Links You'll See

Custom Scheme Deep Links

These look different from regular URLs:

myapp://profile/settings
myapp://product/12345
twitter://user?screen_name=elonmusk

The part before :// is the custom scheme (like myapp or twitter). The app registers this scheme, so when you tap a link starting with it, your phone knows to open that specific app.

The catch: If the app isn't installed, these links go nowhere. The phone doesn't know what to do with myapp:// if "myapp" doesn't exist on the device.

Universal Links (iOS) / App Links (Android)

These look like regular website URLs:

https://www.myapp.com/profile/settings
https://www.myapp.com/product/12345

The magic is that if the app is installed, the phone opens the app instead of the website. If the app isn't installed, the link falls back to the website.

Why this matters for testing: You need to test both scenarios. App installed? App not installed? The behavior should be correct in both cases.

What Can Go Wrong (And Usually Does)

Before we get into testing, let's talk about the bugs you're looking for:

1. Link opens the wrong screen The deep link says "go to product 123" but the app shows product 456, or just the home screen.

2. Link doesn't open the app at all User taps the link, nothing happens, or the browser opens instead of the app.

3. Link works sometimes, not others Works when app is in foreground, breaks when app is fully closed. Or works in Safari but not in the Gmail app.

4. Link breaks when user isn't logged in Deep link goes to "my orders" but the user isn't authenticated, so they see an error instead of a login prompt.

5. Link works on iOS but not Android (or vice versa) Different platforms handle deep links differently. A link that works perfectly on iPhone might fail on Samsung.

Testing Deep Links: The Scenarios You Must Cover

Here's your checklist. For every deep link, test these scenarios:

Cold Start (App Fully Closed)

Close the app completely (swipe it away from recent apps). Tap the deep link. The app should launch and navigate directly to the correct screen.

Why this breaks: Some apps only handle deep links when they're already running. Cold start handling requires extra code that developers sometimes miss.

Warm Start (App in Background)

Open the app, then switch to another app (or go to home screen). Tap the deep link. The app should come to foreground and navigate to the correct screen.

Why this breaks: The app might already be showing a different screen. Does it navigate away, or does it ignore the deep link?

App Not Installed

Uninstall the app. Tap the deep link. What happens?

  • Custom scheme links: Should fail gracefully or prompt to install the app
  • Universal/App Links: Should fall back to the website version

Why this breaks: Many teams forget to handle the "not installed" case. Users see an error or nothing at all.

User Not Logged In

Log out of the app. Tap a deep link that requires authentication (like "my account" or "my orders").

The app should either:

  • Show a login screen, then navigate to the deep link destination after login
  • Show an appropriate error message

Why this breaks: Deep links often assume the user is already logged in. Without proper handling, users hit dead ends.

Different Entry Points

Test the same deep link from different places:

  • Direct tap in browser (Safari, Chrome)
  • Link in an email app (Gmail, Outlook)
  • Link in a messaging app (WhatsApp, Slack, iMessage)
  • Link in social media apps (Twitter, Instagram)
  • QR code scanner

Why this breaks: Some apps wrap links in redirects or open them in in-app browsers, which can break deep link handling.

Try It Yourself: Using the Deep Link Tester

I built a simple tool to make deep link testing easier. You can find it at:

Deep Link Tester

How to Use It

  1. Enter your deep link URL in the input field - this can be a custom scheme (myapp://screen/123) or a universal link (https://myapp.com/screen/123)

  2. Click "Open Link" - the tool will attempt to open the deep link

  3. Observe what happens - Did the app open? Did it go to the right screen? Did you get an error?

Testing Workflow

Here's how I use this tool in practice:

Step 1: Get the deep links from your team

Ask your developers or product manager for a list of deep links the app should support. This might include:

  • Home screen
  • Product pages
  • User profile
  • Settings
  • Specific features or promotions

Step 2: Test each link on your device

Open the Deep Link Tester on your phone's browser. Test each deep link from the list.

Step 3: Document what happens

For each link, record:

  • What screen should it open?
  • What screen did it actually open?
  • Did it work on cold start?
  • Did it work from background?

Step 4: Test across platforms

If you have access to both iOS and Android devices, test on both. Behavior can differ significantly.

Real-World Testing Tips

Tip 1: Test from Real Messaging Apps

Don't just test from the browser. Many deep link bugs only appear when the link is tapped inside WhatsApp, Slack, or email apps. These apps often wrap links or open them in weird ways.

Try this: Send the deep link to yourself on WhatsApp. Tap it. Does it work the same as tapping in Safari?

Tip 2: Watch for the "Open In App" Prompt

On iOS, universal links sometimes show a banner asking "Open in App?" instead of opening automatically. This is a configuration issue that developers need to fix.

Tip 3: Check Parameters Are Being Passed

Deep links often include data:

myapp://product/12345?color=blue&size=large

Make sure the app is actually reading those parameters. If you open that link, does the product page show blue, large selected? Or is it ignoring the parameters?

Tip 4: Test Invalid Links

What happens if someone typos a deep link?

myapp://prodcut/12345  (typo: "prodcut")
myapp://product/       (missing ID)
myapp://product/abc    (invalid ID format)

The app shouldn't crash. It should handle these gracefully, maybe by showing the home screen or an error message.

Tip 5: Check the Fallback

For universal links, test what happens when the app isn't installed. The web version should show the same (or equivalent) content. If the deep link is https://myapp.com/product/12345, that webpage should actually exist and show product 12345.

Common Gotchas

Safari vs Chrome: iOS universal links work differently in Safari vs Chrome. Test both.

In-App Browsers: When someone taps a link inside Instagram or Twitter, it opens in an in-app browser, which handles deep links differently than the system browser.

Link Wrapping: Some services (email tracking, link shorteners) wrap your deep links in redirects. This can break the deep link functionality. Always test the actual links users will receive.

Debug vs Release Builds: Deep links might work in your test build but not in the production app. Make sure to test on release builds when possible.

Emulators vs Real Devices: Deep link behavior can differ between emulators and real devices. Always do final testing on real hardware.

Quick Reference: What to Test

Scenario What to Check
Cold start App closed, tap link, correct screen opens
Background App in background, tap link, navigates correctly
Not installed Link fails gracefully or shows fallback
Logged out Shows login or appropriate error
Safari/Chrome Works in both browsers
Email apps Works when tapped in Gmail, Outlook
Messaging apps Works in WhatsApp, Slack, iMessage
Invalid params Doesn't crash, handles gracefully
Web fallback Universal link shows correct web content if app not installed

Wrapping Up

Deep link testing doesn't have to be mysterious. Now you know:

  • What deep links are and why they matter
  • The common ways they break
  • The scenarios you need to test
  • How to use a simple tool to test them yourself

The next time you get a bug report about a link "not working," you'll know exactly how to investigate it. And more importantly, you'll know how to test deep links proactively before users run into problems.

Try out the Deep Link Tester and let me know what you find!