Deep Link (глибоке посилання) — це URL, який направляє користувача на конкретний екран або контент всередині мобільного додатка, минаючи головний екран. На відміну від звичайного посилання на сайт, deep link активує додаток і одразу відкриває цільовий контент. За даними Android Developers, правильно налаштовані deep link збільшують конверсію в цільову дію на 30–50% за рахунок скорочення кількості кроків до контенту.
Головне
Deep Link (глибоке посилання) — це URI, який при переході відкриває не веб-сторінку, а конкретний екран всередині мобільного додатка. Технологія вирішує фундаментальну проблему мобільних платформ: браузер не може безпосередньо відкрити екран додатка, а deep link створює міст між вебом та нативним кодом. Без deep link користувач завжди потрапляє на головний екран і змушений вручну навігувати до потрібного контенту.
Архітектура deep link складається з двох частин: схема (scheme) визначає, який додаток має обробити посилання, а шлях (path) вказує на конкретний ресурс всередині додатка — товар, статтю, профіль користувача або розділ налаштувань. Параметри запиту (?source=push&campaign=summer) передають додатковий контекст для аналітики, персоналізації та атрибуції кампаній.
Важливо розрізняти deep link та звичайне посилання. Звичайне посилання (https://example.com/product/42) відкривається в браузері та веде на веб-версію сторінки. Deep link (myapp://product/42) за наявності встановленого додатка відкриває саме нативний екран з тим самим контентом, а якщо додаток відсутній — показує помилку. Саме для вирішення проблеми безшовного fallback були створені Universal Link (iOS) та App Link (Android).
Різні завдання потребують різних типів deep link. Деякі посилання працюють тільки з встановленим додатком, інші вміють чекати встановлення, треті передають аналітичний контекст. Вибір типу залежить від сценарію використання: рекламна кампанія, push-повідомлення, шеринг контенту або email-розсилка.
Standard Deep Link — базовий тип, який спрацьовує, тільки якщо додаток уже встановлено на пристрої. Користувач натискає на посилання myapp://product/42, система визначає зареєстровану схему та відкриває додаток на потрібному екрані. Якщо додаток не встановлено — браузер показує помилку «Сторінку не знайдено» або просто нічого не робить. Цей тип підходить для внутрішньої навігації всередині вже встановленого додатка.
Налаштування стандартного deep link просте: достатньо зареєструвати URI-схему в маніфесті (Android) або Info.plist (iOS). Не потрібно серверної валідації або SSL-сертифікатів. Але саме через відсутність fallback цей тип вважається застарілим для маркетингових кампаній — втрата трафіку від користувачів без додатка становить до 60%.
Deferred Deep Link вирішує головну проблему звичайних deep link: він працює навіть якщо додаток не встановлено. Користувач переходить за посиланням → бачить сторінку (landing або App Store/Google Play) → встановлює додаток → при першому запуску додаток отримує контекст оригінального посилання та відкриває потрібний екран. Технологія потребує SDK посередника (AppsFlyer, Branch, Adjust), який зберігає контекст на сервері до моменту першого запуску.
Branch — одна з найпопулярніших платформ для deferred deep link. Вона надає єдине посилання, яке працює на всіх платформах: визначає ОС користувача, перенаправляє в магазин додатків, а після встановлення передає контекст (промокод, ідентифікатор товару, джерело кампанії). За даними Branch (2024), deferred deep link підвищують конверсію рекламних кампаній на 40–70%.
Contextual Deep Link — це звичайний або deferred deep link, доповнений параметрами контексту: джерело трафіку, кампанія, промокод, referrer, ідентифікатор партнера. Параметри передаються в URL та обробляються додатком для персоналізації: показати вітальний бонус, відкрити товар зі знижкою, записати аналітику встановлення.
UTM-мітки (utm_source, utm_medium, utm_campaign) — стандартний спосіб передачі контексту. У mobile контекстні deep link критичні для атрибуції: без них власник додатка не знає, який канал привів користувача — органічний трафік, реклама Facebook, email-розсилка або QR-код. Якісна атрибуція потребує інтеграції з MMP (Mobile Measurement Partner).
| Тип Deep Link | Вимагає встановлення | Очікування встановлення | Контекст |
|---|---|---|---|
| Standard | Так | Ні | Тільки в URL |
| Deferred | Ні | Так | Серверне зберігання |
| Contextual | Будь-який | Будь-який | UTM + параметри |
iOS підтримує deep link через два механізми: старий Custom URL Scheme та сучасний Universal Link (iOS 9+). Custom URL Scheme працює за принципом реєстрації кастомної схеми в Info.plist. Додаток реєструє myapp://, і iOS при переході за таким посиланням відкриває додаток. Проблема: якщо схема не зареєстрована жодним додатком, браузер показує помилку.
Обробка deep link на iOS відбувається через метод AppDelegate application(_:open:options:) або SceneDelegate scene(_:openURLContexts:). Розробник витягує URL, парсить шлях та параметри, потім навігує на відповідний екран. Якщо використовується SwiftUI, обробка виконується через OpenURLAction або onChange(of: openURL). Важливо коректно обробляти стан: додаток може бути не запущено, згорнуто або активно.
Security на iOS сувора: Custom URL Scheme може перехопити будь-який додаток, зареєструвавши ту саму схему. Це потенційна вразливість (URL Scheme hijacking). Тому Apple рекомендує Universal Link як більш безпечну альтернативу: тільки підтверджений власник домену може асоціювати посилання з додатком. Докладніше про Universal Link — у статті Universal Link.
Android реалізує deep link через Intent Filter в AndroidManifest.xml. Додаток визначає Activity, яка обробляє певну схему (myapp://) або конкретні хости та шляхи. Коли користувач натискає на deep link, Android шукає Activity з відповідним Intent Filter та відкриває її. Якщо відповідних Activity декілька — система показує діалог вибору додатка.
// AndroidManifest.xml — Intent Filter для Deep Link
<activity
android:name=".ui.ProductActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="myapp"
android:host="product"
android:pathPrefix="/" />
</intent-filter>
</activity>
Обробка deep link в Android виконується в методі Activity.onCreate() або onNewIntent(). Розробник отримує Intent, витягує URI та викликає навігацію. Для Jetpack Navigation компонент Navigation Deep Link дозволяє декларативно описати deep link в графі навігації. Android App Link (Android 6.0+) — еволюція deep link з верифікацією через Digital Asset Links, що усуває діалог вибору додатка.
Важливо враховувати Android 12+ зміни: починаючи з API 31, система вимагає явного зазначення exported=true для Activity, що обробляють deep link, та перевіряє коректність Intent Filter. Google Play Store перевіряє верифікацію App Link при публікації. Без верифікації Google може відхилити оновлення, якщо deep link ведуть на неіснуючі сторінки сайту.
Налаштування deep link включає кілька етапів, спільних для обох платформ. Перший крок — визначити схему та структуру URL. Рекомендується використовувати https-схему (замість кастомної) для сумісності з Universal Link та App Link. Структура URL має повторювати структуру веб-сайту: /product/42, /profile/john, /settings/notifications. Це спрощує підтримку та індексацію контенту пошуковими системами.
Другий етап — обробка deep link в коді додатка. Для Android рекомендується Jetpack Navigation з декларативними deep link в nav_graph. Для iOS — SwiftUI NavigationStack з обробкою OpenURLAction. Важливо обробляти три стани додатка: cold start (додаток не запущено), warm start (згорнуто) та active (на екрані). Кожен стан потребує різної логіки навігації.
Тестування deep link — окреме завдання. Android Studio надає інструмент App Links Assistant для перевірки Intent Filter. На iOS тестування виконується через Xcode з передачею URL через аргументи схеми запуску. Рекомендується налаштувати CI-перевірку: автоматичний перехід за deep link та перевірка, що відкрився очікуваний екран. Для deferred deep link тестування включає повний цикл «встановлення → перший запуск → контекст». Без тестування deep link часто ламаються при оновленні навігації в додатку.
Часті запитання
Звичайне посилання (https://site.com/page) відкривається в браузері. Deep link (myapp://page або https://site.com/page з верифікацією) відкриває екран всередині мобільного додатка. Deep link може також передавати контекст: промокод, джерело трафіку, ідентифікатор реферала.
URI-схема — це префікс URL, який визначає, який додаток має обробити посилання (наприклад, myapp://, vk://, tg://). Система використовує схему для маршрутизації: знаходить додаток, що зареєстрував цю схему, і передає йому URL для обробки.
Користувач переходить за посиланням → сервіс (Branch, AppsFlyer) запам'ятовує контекст → перенаправляє в App Store/Google Play → після встановлення та першого запуску SDK передає збережений контекст додатку → додаток відкриває потрібний екран, як якщо б користувач уже мав додаток.
Звичайний deep link — ні. Deferred deep link — так, за рахунок проміжної сторінки, яка перенаправляє в магазин додатків та зберігає контекст. Universal Link та App Link відкривають сайт як fallback, якщо додаток не встановлено.
На Android використовуйте adb: adb shell am start -W -a android.intent.action.VIEW -d «myapp://product/42». На iOS — xcrun simctl openurl booted «myapp://product/42». Для обох платформ доступні тестові консолі Firebase Dynamic Links та Branch.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також