One link for iOS and Android
Two store links in a bio is a small thing that quietly costs installs. Merging them is easy; doing it without losing attribution is the part worth getting right.
6 August 2026 by PAD team
The naive version
Detect the platform, redirect accordingly. Twenty lines and it mostly works:
const ua = navigator.userAgent;
if (/iPhone|iPad|iPod/.test(ua)) go(APP_STORE);
else if (/Android/.test(ua)) go(PLAY);
else go(WEBSITE);
This handles the majority of traffic and fails on exactly the visitors you paid the most for.
Why it fails
Redirecting an iPhone visitor to apps.apple.com from inside Instagram does nothing, because Apple's redirect into itms-appss:// cannot be followed by a WebView. Your platform detection was correct and the tap still died.
So the branch has to be two-dimensional: which platform, and which browser.
The version that works
- Desktop: send to your website, never to a store page
- Android in any browser:
intent://with a Play fallback - iOS in a real browser: the plain store URL is fine
- iOS in an in-app browser: escape first, then the store URL
Fire the escape on page load rather than on a click, keep the fallback under a second, and show a manual button by about a second and a half.
Keeping attribution
Attach campaign parameters at the last step: ct for App Store Connect, referrer for Play. If you already run a tracker, point the escape at the tracker link instead of the raw store URL, and it keeps working as before.
Build or use
The logic above is maybe eighty lines. The reason we turned it into a service is not complexity but maintenance: the escape schemes are undocumented, platforms change them without notice, and the iOS 26 Facebook change broke detection for everyone who wrote this once and left it.
That is exactly what our links do, with a per-source breakdown of which taps arrived.