Deeplinking · Fundamentals

What Is a Deeplink? Universal Links, App Links and URI Schemes Explained

August 17, 20268 min readplugwith.me Blog

Short answer

A deeplink is a URL that opens one specific screen inside an installed app — a track, a profile, a checkout — instead of a website. iOS calls the modern version Universal Links, Android calls it App Links, and the older form is a custom URI scheme such as spotify://.

"Deeplink" gets used for three different technologies that behave differently, fail differently, and matter to anyone putting a link in a bio. Here is the whole picture in plain language — no app development required.

A deeplink is a URL that opens a specific place inside an app rather than the app's front door or a website. Tapping a normal link to a music service loads a web player. Tapping a deeplink opens the app, already logged in, on the exact track you meant.

The word "deep" refers to depth inside the destination: not "open Spotify", but "open Spotify on this album". That difference is the entire conversion argument — a visitor who lands in the app they already trust is one tap from following, buying or subscribing. A visitor who lands on a logged-out web page has to start over.

A normal link only names an address. A deeplink also carries an expectation about what should handle it. The operating system checks whether an installed app has claimed that address, and if one has, the app wins over the browser.

Everything else people call "link tools" sits at a different layer. A short link shortens. A redirect forwards. A tracking link measures. None of them decide whether an app or a browser opens — only the deeplink type does.

The oldest form. The app registers a custom protocol, and the URL starts with it instead of https:

spotify:track:4cOdK2wGLETKBW3PvgPWqT
twitch://stream/yourchannel
tg://resolve?domain=yourchannel

Simple, and it opens the app directly with no web roundtrip. Two real weaknesses, though:

Apple's answer, and the current default on iPhone. A Universal Link is an ordinary https:// URL. The app proves it owns that domain by publishing a signed file at https://example.com/.well-known/apple-app-site-association listing the paths it claims. iOS caches that file when the app is installed.

The result is the best of both: the app opens if installed, and the same URL loads the web page if it is not. Nothing breaks, nothing needs a fallback of your own. The catch is that iOS only honours the hand-off in contexts it considers a real navigation — and an in-app browser is often not one of them.

The same idea on Android. An https:// URL, verified by a assetlinks.json file at /.well-known/assetlinks.json plus android:autoVerify="true" in the app's manifest. Verified links open the app with no chooser dialog; unverified ones fall back to a "which app?" prompt or straight to the browser.

What is an intent:// URL?

An Android-specific syntax that says which app should handle a URL and what to do if it cannot:

intent://example.com/page#Intent;scheme=https;package=com.android.chrome;S.browser_fallback_url=https%3A%2F%2Fexample.com%2Fpage;end

Two things make this useful. The package parameter names a target app — that is how a page can ask for Chrome specifically instead of whatever webview it is trapped in. And S.browser_fallback_url gives an explicit escape hatch if that app is missing, which a raw URI scheme cannot do.

A deeplink for someone who does not have the app yet: they get sent to the store, install, open the app for the first time — and still land on the content you originally linked to. It is genuinely useful for app marketing, and genuinely more work: the intent has to survive the store visit, which needs an attribution service or SDK on the app side. If you are a creator linking to other people's apps, this is not your problem to solve.

Swipe the table sideways to see every column →

TypeFallback if app missingOwnership verifiedBest used for
Universal Link (iOS)Loads the web pageYesThe default for anything public
App Link (Android)Loads the web pageYesThe default on Android
URI schemeNone — fails silentlyNoA last-resort attempt after the https link
intent:// (Android)Yes, if you set oneVia the target packageForcing a specific browser or app

For almost everyone the answer is: link to the https:// URL the destination app publishes, and let Universal Links and App Links do their job. Keep the URI scheme as a second attempt, never as the only one.

Here is the part that surprises people. You can pick the correct link type, and it will still fail — because of where it is tapped.

When someone taps a link inside Instagram, TikTok, Facebook or Threads, it does not open Safari or Chrome. It opens that app's own in-app browser, a webview the platform controls. In that environment the hand-off from web page to native app is usually blocked, along with payment sheets, passkeys and any session the visitor already had. So the Universal Link that works perfectly from a message, an email or a QR code quietly does nothing in the one place your whole audience actually taps it.

The fix is not a different link type. It is getting out of the webview first, into the real system browser, and letting the deeplink work the way it already does there. We wrote up exactly how that hand-off works — and which of the escape mechanisms still function — in the complete guide to escaping in-app browsers. If you just want to know whether your own link survives, the WebView test tells you in one tap.

Frequently asked questions

Is a deeplink the same as a short link?

No. A short link only shortens the address. A deeplink decides what opens: the app on the right screen, or a web page. The two are often combined, but shortening on its own changes nothing about where the visitor lands.

Do I need to build an app to use deeplinks?

No. You use the deeplinks the destination app already publishes. Spotify, Twitch, YouTube, Telegram and most large apps ship both a Universal Link and a URI scheme, so your job is to point at the right one and make sure the browser is allowed to hand off to it.

What happens if the app is not installed?

A Universal Link or App Link falls back to the equivalent web page, which is why they are the safer default. A raw URI scheme has no fallback and typically fails silently or shows an error, so it should never be the only thing you link to.

Why does the same deeplink work in Safari but not from Instagram?

Because Instagram does not open your link in Safari. It opens an in-app browser it controls, and that environment usually blocks the hand-off from a web page to a native app. The link is fine; the browser around it is not.

Make every tap open the real app.

Built for Deeplinking · Fundamentals — and every other platform. One plugwith.me link escapes the in-app browser and hands off to the native app — automatically.

Create your free link →
No card needed · Live in under a minute

Keep reading