How to set up universal links
Universal link setup succeeds when you approach it as a full system, not a one-file configuration task. You are wiring trust between your domain and app, then validating that app routes and fallback behavior work in real-world click contexts.
Step 1: establish domain trust on iOS
In your app configuration, add the Associated Domains entitlement and include your link domain with the applinks: prefix. On your domain, host a valid apple-app-site-association file that declares which app and paths are eligible for app opening.
This is the handshake iOS depends on. If either side is incomplete, links will silently open in Safari.
Step 2: mirror the setup for Android app links
For Android, add intent filters for your HTTPS domain and enable auto-verification where appropriate. Then publish assetlinks.json with the correct package identity and signing details so Android can confirm domain ownership.
Even if your immediate concern is iOS, Android parity matters because marketing links usually serve both platforms from one campaign URL.
Step 3: define route ownership clearly
Do not allow deep link paths to evolve informally. Assign ownership for route schema, naming, and backward compatibility. If old campaign links lose valid route targets after app updates, conversion can drop without obvious error messages.
A stable route contract between app and marketing teams prevents this class of regression.
Step 4: design fallback as a first-class experience
Fallback is not a failure state. It is part of the product journey. Decide what users should see when app open is unavailable and ensure web destinations still preserve campaign context and intent.
Good fallback design protects performance in desktop sessions, restricted browser contexts, and edge cases where app open is intentionally bypassed.
Step 5: run realistic QA before launch
Test links under conditions that reflect production traffic: installed and uninstalled users, in-app browsers, major email clients, and repeated opens of the same URL. Validate both destination quality and analytics continuity, not just whether the app launches.
The fastest way to reduce launch risk is to capture a repeatable QA matrix and reuse it for every major campaign.