Testing Android Deep Links Before Users Get Stuck in Chrome

Marketing ships the URL before engineering proves the intent filter—we have lived that sprint more than once.

Schemes, hosts, and paths

Custom schemes are easy to prototype and painful in the wild—other apps can squat similar patterns. HTTPS App Links with verified domains are stricter and worth it for email and web campaigns. Map each path prefix to an activity and test with our Android Deep Link Tester before QR codes go to print.

Honestly, the manifest is where dreams die: a typo in `android:pathPrefix` sends users to the browser every time. Validate early.

Email clients rewrite links; test taps from Gmail and Outlook, not only Slack copies that looked fine in dev.

Short links through redirectors add hops—confirm the final HTTPS URL still matches your intent filter after every redirect, not only the pretty short domain.

Digital Asset Links

Host `assetlinks.json` correctly, serve `application/json`, no redirects that strip HTTPS. Verification status in Play Console is a hint, not a substitute for tapping the link on a physical device with the app installed and without.

We keep a checklist: install release build, click link from Notes app, from Gmail, from Chrome incognito. Each entry point behaves differently enough to matter.

Parameterized paths need tests for empty query states, not only happy paths with every flag turned on.

When App Links fail, users remember the brand as “broken link,” not “intent filter typo”—that reputational cost dwarfs the hour of manifest debugging you skipped.

Fallback UX

When the app is missing, land on a useful web page with install CTA—not a blank 404. Deferred deep linking is its own product; at minimum, do not punish curious users.

QA should include uninstall/reinstall and “open with” defaults cleared. I have seen demos work on the developer phone only because Chrome remembered a choice from last week.

Document which links require login so marketing does not promise one-tap access to account screens that bounce to the store.

Handoff between web and app teams

Document every live URL, which activity handles it, and what analytics event fires. When product renames a screen, update the path table the same day.

Deep links are contracts. Test them like payments, not like footer links no one clicks. Our tester exists so you do not need to memorize adb flags for every standup.

Keep a spreadsheet of live URLs beside the manifest so renames do not orphan campaigns mid-quarter.

Add a weekly cron reminder to tap one live campaign link on a physical device—links rot when paths change but billboards do not.