Broken deep links are invisible killers. A user taps a push notification, a marketing email, or a social media post – and instead of landing on the right screen inside your app, they hit an error page, a blank screen, or the app store. The conversion is lost. The trust is damaged. And most teams only discover the problem after users complain.
Deep link testing is the systematic process of verifying that every deep link in your mobile app resolves correctly, opens the right content, and handles edge cases gracefully. For product managers, CTOs, and mobile development leads in SMBs, building a reliable deep link testing workflow is not optional – it is a competitive necessity.
This guide covers everything you need: the fundamentals of deep link testing, the most common failure points, platform-specific requirements, tooling recommendations, and a repeatable QA workflow your team can implement immediately.
Why Deep Link Testing Matters for Your App Strategy
Deep links connect the outside world – emails, ads, SMS, social posts – directly to specific content inside your app. When they work, they create seamless, high-converting user journeys. When they fail, the consequences are measurable.
Industry data is clear: apps with broken deep links see conversion rates drop by 20–40% on campaigns that rely on direct linking. Users who experience a broken link are significantly less likely to re-engage with the same campaign. For SMBs running lean marketing budgets, that is a serious problem.
Beyond marketing performance, deep link testing affects:
- Onboarding flows – password resets, email verification, and invite links all rely on deep links working perfectly
- Retention campaigns – re-engagement push notifications use deep links to return users to specific content
- B2B integrations – many enterprise workflows trigger deep links programmatically between apps
- App store ratings – frustrated users who encounter broken links often leave negative reviews
The Android Developers documentation and Apple's Universal Links specification both highlight verification requirements that, if missed, silently break deep link functionality in production – even when links worked during development.
Understanding the Three Types of Deep Links You Must Test
Before building a testing strategy, your team needs to understand what they are testing. Not all deep links behave the same way, and each type has distinct failure modes.
URI Scheme Deep Links
URI scheme links (e.g., `myapp://product/123`) are the oldest form of deep linking. They work when the app is installed but fail silently when it is not – typically dropping the user onto a blank screen or showing an error dialog.
Test these for:
- Correct scheme registration in your app manifest or `Info.plist`
- Parameter encoding and special character handling
- Behavior when the app is not installed
- Fallback URL configuration
Universal Links (iOS) and App Links (Android)
Universal Links on iOS and App Links on Android are the modern standard. They use HTTPS URLs and require server-side verification files (`apple-app-site-association` for iOS, `assetlinks.json` for Android). This verification step is the single most common point of failure in production.
Test these for:
- Correct hosting of verification files at the `.well-known/` path
- Valid JSON formatting in verification files
- SHA-256 certificate fingerprint accuracy (Android)
- Team ID and bundle ID correctness (iOS)
- CDN caching issues that serve stale verification files
- HTTPS redirect chains that break verification
Deferred Deep Links
Deferred deep links work even when the app is not installed. The user is routed to the app store, installs the app, and upon first launch is directed to the correct in-app destination. These are the most complex to test because they involve a multi-step flow with timing dependencies.
Test these for:
- Correct parameter persistence through the install process
- Attribution window accuracy
- First-launch routing logic
- Edge cases when a user already has the app installed
The Most Common Deep Link Testing Failures
In our experience working with mobile development teams, these are the failure patterns that appear most frequently:
1. Stale verification files – the `assetlinks.json` or `apple-app-site-association` file was updated in staging but not deployed to production
2. Certificate mismatch – the SHA-256 fingerprint in `assetlinks.json` refers to a debug certificate instead of the production signing certificate
3. Missing path patterns – the verification file covers `/product/` but not `/product/category/`, causing category pages to fall through
4. Redirect chains – a marketing URL shortener introduces an HTTP-to-HTTPS redirect that breaks Universal Link resolution
5. OS version gaps – link behavior changed between iOS 13 and iOS 14, or between Android 11 and Android 12, and the app was never retested on updated OS versions
6. Parameter encoding – special characters in product names or user IDs are not URL-encoded, causing 404 errors on the receiving end
7. Cold start vs. warm start differences – the app handles deep link routing correctly when already running but fails on cold start due to initialization timing
Deep Link Testing: Tools and Approaches
Manual Testing on Real Devices
Manual testing remains essential for validating the actual user experience. No automated tool fully replaces tapping a link on a physical device and observing what happens. Use a combination of:
- iOS devices running multiple OS versions (minimum: two latest major versions)
- Android devices spanning different manufacturers and OS versions (Samsung, Google Pixel, and at least one mid-range device)
- Testing via different entry points: browser, email client, SMS app, social media app, and QR code scanner
Keep a physical device lab or use a cloud device farm service. Testing only on simulators misses manufacturer-specific behaviors, especially on Android where OEM browsers and OS overlays affect link handling.
Command-Line Testing During Development
Both platforms offer command-line tools for quick developer testing:
Android (ADB):
adb shell am start -W -a android.intent.action.VIEW -d "https://yourdomain.com/product/123" com.yourapp.package
iOS (xcrun/simctl):
xcrun simctl openurl booted "https://yourdomain.com/product/123"
These commands allow rapid iteration without manually constructing test URLs. Every developer on your mobile team should have these commands in their local testing toolkit.
Automated Deep Link Testing
For teams with a CI/CD pipeline, automating deep link verification dramatically reduces regression risk. Key approaches include:
- UI automation frameworks (Espresso for Android, XCUITest for iOS) can simulate link-open events and assert that the correct screen is displayed
- API-level verification – write automated checks that fetch your `assetlinks.json` and `apple-app-site-association` files and validate their structure before every release
- Link health monitoring – set up uptime monitoring on your `.well-known/` endpoints so you are alerted immediately if the verification files become unreachable
Building a Deep Link Testing Checklist for Every Release
Pre-release deep link testing should be a defined gate in your release process. Here is a practical checklist your team can adapt:
Server-side verification:
- [ ] `assetlinks.json` is accessible at `https://yourdomain.com/.well-known/assetlinks.json`
- [ ] `apple-app-site-association` is accessible at `https://yourdomain.com/.well-known/apple-app-site-association`
- [ ] Both files return HTTP 200 (not a redirect)
- [ ] JSON is valid and contains the correct app identifiers
- [ ] Files are not cached with a TTL longer than 24 hours
App configuration:
- [ ] Intent filters (Android) or Associated Domains entitlement (iOS) are correctly configured in the production build
- [ ] Production signing certificate SHA-256 matches the `assetlinks.json` entry
- [ ] All intended URL path patterns are covered in configuration files
Functional testing:
- [ ] Each critical deep link opens the correct screen from a cold start
- [ ] Each critical deep link opens the correct screen when the app is already running
- [ ] Links work from at least three different entry points (browser, email, messaging app)
- [ ] Fallback behavior is correct when the app is not installed
- [ ] Deferred deep links route correctly after a fresh install
Edge cases:
- [ ] Links with special characters in parameters resolve correctly
- [ ] Links to deprecated or removed content show graceful error handling
- [ ] Deep links function correctly on the two latest iOS and Android major versions
Integrating Deep Link Testing Into Your Development Workflow
Reactive testing – only running tests when something breaks – is the most expensive approach. Teams that integrate deep link testing proactively into their development lifecycle catch issues before they reach production.
Recommended workflow integration points:
1. Feature branch testing – any PR that touches routing, URL handling, or navigation must include deep link test results before merge
2. Pre-release smoke testing – run the full deep link checklist as part of your release candidate sign-off
3. Post-deployment verification – immediately after deploying changes to your server (especially CDN or hosting changes), verify that verification files are still accessible and correct
4. Monthly link audits – schedule a monthly review of all active deep links used in marketing campaigns, push notifications, and integrations to identify links pointing to deprecated content
Platform-Specific Considerations for 2024 and Beyond
iOS changes: Apple has tightened Universal Link verification requirements in recent iOS versions. Links that previously worked may fail silently if the `apple-app-site-association` file structure does not conform to the current specification. Always test on the latest iOS release candidate before your app update goes live.
Android changes: Google introduced changes to App Link verification in Android 12 that require explicit domain verification through the Play Console in addition to the `assetlinks.json` file. Teams that skip the Play Console verification step may find that their links work on Android 11 and below but fail on Android 12+ devices.
Chrome Custom Tabs and in-app browsers: Many social media apps and email clients open links inside their own in-app browser, which can intercept and block Universal Links or App Links. Test your most critical deep links specifically within Instagram, LinkedIn, Gmail, and WhatsApp to verify behavior in these environments.
Measuring Deep Link Testing Effectiveness
How do you know your deep link testing process is working? Track these metrics:
- Deep link error rate in production – monitor via your analytics or crash reporting tool; target below 1%
- Fallback rate – the percentage of deep link attempts that fell back to the web instead of opening the app; a rising fallback rate signals verification file issues
- Time to detect broken links – measure how quickly your team identifies and resolves deep link failures; aim for detection within hours, not days
- Release regression rate – track how often a new app release introduces a deep link regression; this metric directly reflects the quality of your pre-release testing process
How Pilecode Supports Mobile App Quality
At Pilecode, we work with SMBs and growth-stage companies to build mobile apps that perform reliably in production. Deep link testing is part of every mobile project we deliver – from initial architecture through ongoing QA and maintenance.
If your team is dealing with inconsistent deep link behavior, failed marketing campaigns due to broken links, or uncertainty about your app's readiness for scale, we can help you build the testing processes and technical foundations to fix it permanently.
Explore more practical guides on mobile development, testing, and app architecture on our blog, or reach out directly to discuss your specific situation.
The cost of skipping systematic deep link testing is measured in lost conversions, damaged campaigns, and frustrated users. The cost of building it right is a few hours of setup and a checklist your team runs before every release.
Schedule a free initial consultation →
Have questions about this topic? Get in Touch.