ディープリンク(Deep Link)とは、ホーム画面を経由せずに、モバイルアプリケーション内の特定の画面やコンテンツにユーザーを直接導くURLです。ウェブサイトへの通常のリンクとは異なり、ディープリンクはアプリを起動し、目的のコンテンツを即座に開きます。Android Developersによると、適切に設定されたディープリンクは、コンテンツに到達するまでのステップ数を減らすことで、目標アクションへのコンバージョンを30~50%向上させます。
重要ポイント
ディープリンク(Deep Link)とは、クリックするとウェブページではなく、モバイルアプリケーション内の特定の画面を開くURIです。この技術はモバイルプラットフォームの根本的な問題を解決します。ブラウザはアプリの画面を直接開くことができず、ディープリンクがウェブとネイティブコードの間に橋渡しをします。ディープリンクがない場合、ユーザーは常にホーム画面に到達し、手動で目的のコンテンツまでナビゲートする必要があります。
ディープリンクのアーキテクチャは2つの部分から構成されます。スキーム(scheme)はどのアプリがリンクを処理するかを決定し、パス(path)はアプリ内の特定のリソース(商品、記事、ユーザープロフィール、設定セクションなど)を指します。クエリパラメータ(?source=push&campaign=summer)は、分析、パーソナライゼーション、キャンペーンアトリビューションのための追加コンテキストを渡します。
ディープリンクと通常のリンクを区別することが重要です。通常のリンク(https://example.com/product/42)はブラウザで開かれ、ページのウェブバージョンに移動します。ディープリンク(myapp://product/42)は、アプリがインストールされている場合、同じコンテンツのネイティブ画面を開きますが、アプリがインストールされていない場合はエラーを表示します。Universal Link(iOS)とApp Link(Android)は、シームレスなフォールバックの問題を解決するために特別に作られました。
さまざまなタスクにはさまざまな種類のディープリンクが必要です。一部のリンクはインストールされたアプリでのみ機能し、他のリンクはインストールを待機でき、また他のリンクは分析コンテキストを渡します。タイプの選択は、広告キャンペーン、プッシュ通知、コンテンツ共有、メールニュースレターなどの使用シナリオによって異なります。
標準ディープリンクは、アプリがデバイスに既にインストールされている場合にのみ作動する基本タイプです。ユーザーがmyapp://product/42のリンクをクリックすると、システムが登録されたスキームを検出し、目的の画面でアプリを開きます。アプリがインストールされていない場合、ブラウザは“ページが見つかりません”というエラーを表示するか、何もしません。このタイプは、既にインストールされているアプリ内の内部ナビゲーションに適しています。
標準ディープリンクの設定は簡単です。マニフェスト(Android)またはInfo.plist(iOS)にURIスキームを登録するだけです。サーバー検証やSSL証明書は不要です。しかし、フォールバックがないため、このタイプはマーケティングキャンペーンでは時代遅れと見なされています。アプリを持っていないユーザーからのトラフィック損失は最大60%に達する可能性があります。
ディファードディープリンクは、通常のディープリンクの主要な問題を解決します。アプリがインストールされていない場合でも機能します。ユーザーがリンクをクリック → ページ(ランディングページまたはApp Store/Google Play)を表示 → アプリをインストール → 初回起動時に、アプリが元のリンクのコンテキストを受け取り、目的の画面を開きます。この技術には、初回起動までサーバーにコンテキストを保存する仲介SDK(AppsFlyer、Branch、Adjust)が必要です。
Branchは、ディファードディープリンクで最も人気のあるプラットフォームの1つです。すべてのプラットフォームで動作する単一のリンクを提供します。ユーザーのOSを検出し、アプリストアにリダイレクトし、インストール後にコンテキスト(プロモーションコード、製品ID、キャンペーンソース)を渡します。Branch(2024年)によると、ディファードディープリンクは広告キャンペーンのコンバージョンを40~70%向上させます。
コンテキスト型ディープリンクは、トラフィックソース、キャンペーン、プロモーションコード、リファラー、パートナーIDなどのコンテキストパラメータで補完された通常またはディファードのディープリンクです。パラメータはURLで渡され、パーソナライゼーションのためにアプリによって処理されます。ウェルカムボーナスの表示、割引商品の表示、インストール分析の記録などを行います。
UTMタグ(utm_source、utm_medium、utm_campaign)は、コンテキストを渡す標準的な方法です。モバイルでは、コンテキスト型ディープリンクはアトリビューションに不可欠です。これらがないと、アプリの所有者は、オーガニックトラフィック、Facebook広告、メールニュースレター、QRコードのどのチャネルがユーザーを獲得したかを知ることができません。質の高いアトリビューションには、MMP(Mobile Measurement Partner)との統合が必要です。
| ディープリンクの種類 | インストールが必要 | インストール待機 | コンテキスト |
|---|---|---|---|
| 標準 | はい | いいえ | URLのみ |
| ディファード | いいえ | はい | サーバー保存 |
| コンテキスト型 | 任意 | 任意 | UTM + パラメータ |
iOSは、古いCustom URL Schemeと新しいUniversal Link(iOS 9以降)の2つのメカニズムを通じてディープリンクをサポートしています。Custom URL Schemeは、Info.plistにカスタムスキームを登録することで機能します。アプリがmyapp://を登録し、そのようなリンクをクリックするとiOSがアプリを開きます。問題点:スキームがどのアプリにも登録されていない場合、ブラウザはエラーを表示します。
iOSでのディープリンクの処理は、AppDelegateメソッドapplication(_:open:options:)またはSceneDelegate scene(_:openURLContexts:)を通じて行われます。開発者はURLを抽出し、パスとパラメータを解析して、適切な画面にナビゲートします。SwiftUIを使用する場合、処理はOpenURLActionまたはonChange(of: openURL)を通じて行われます。アプリの状態(未起動、バックグラウンド、アクティブ)を正しく処理することが重要です。
iOSのセキュリティは厳格です。どのアプリでも同じスキームを登録することでCustom URL Schemeを傍受できます。これは潜在的な脆弱性(URLスキームハイジャック)です。そのため、AppleはUniversal Linkをより安全な代替手段として推奨しています。検証済みのドメイン所有者のみがアプリにリンクを関連付けることができます。Universal Linkの詳細については、Universal Linkの記事を参照してください。
Androidは、AndroidManifest.xmlのIntent Filterを通じてディープリンクを実装します。アプリは、特定のスキーム(myapp://)または特定のホストとパスを処理するActivityを定義します。ユーザーがディープリンクをクリックすると、Androidは一致するIntent Filterを持つActivityを検索して開きます。複数の一致するActivityがある場合、システムはアプリ選択ダイアログを表示します。
// AndroidManifest.xml - ディープリンク用Intent Filter
<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>
Androidでのディープリンクの処理は、Activity.onCreate()またはonNewIntent()メソッドで行われます。開発者はIntentを受け取り、URIを抽出してナビゲーションを実行します。Jetpack Navigationの場合、Navigation Deep Linkコンポーネントを使用して、ナビゲーショングラフでディープリンクを宣言的に記述できます。Android App Link(Android 6.0以降)は、Digital Asset Linksによる検証を備えたディープリンクの進化形で、アプリ選択ダイアログを排除します。
Android 12以降の変更点に注意することが重要です。API 31以降、システムはディープリンクを処理するActivityにexported=trueの明示的な宣言を要求し、Intent Filterの正確性をチェックします。Google Play Storeは公開時にApp Linkの検証をチェックします。検証がない場合、ディープリンクが存在しないウェブサイトページに誘導すると、Googleがアップデートを拒否する可能性があります。
ディープリンクの設定には、両方のプラットフォームに共通するいくつかの段階が含まれます。最初のステップは、スキームとURL構造を定義することです。Universal LinkおよびApp Linkとの互換性のために、カスタムスキームではなくhttpsスキームを使用することをお勧めします。URL構造はウェブサイトの構造を反映する必要があります:/product/42、/profile/john、/settings/notifications。これにより、メンテナンスと検索エンジンによるコンテンツのインデックスが簡素化されます。
第2段階は、アプリコードでのディープリンク処理です。Androidの場合は、nav_graphで宣言的なディープリンクを使用したJetpack Navigationが推奨されます。iOSの場合は、OpenURLAction処理を使用したSwiftUI NavigationStackが推奨されます。コールドスタート(アプリ未起動)、ウォームスタート(バックグラウンド)、アクティブ(画面表示中)の3つのアプリ状態を処理することが重要です。各状態には異なるナビゲーションロジックが必要です。
ディープリンクのテストは別のタスクです。Android StudioはIntent FilterをチェックするためのApp Links Assistantツールを提供しています。iOSでは、Xcodeを介して起動スキーム引数でURLを渡してテストを行います。CIチェック(自動ディープリンクナビゲーションと期待される画面が開かれたことの確認)を設定することをお勧めします。ディファードディープリンクの場合、テストには“インストール → 初回起動 → コンテキスト”の完全なサイクルが含まれます。テストなしでは、アプリのナビゲーションが更新されるとディープリンクが頻繁に壊れます。
よくある質問
通常のリンク(https://site.com/page)はブラウザで開きます。ディープリンク(myapp://pageまたは検証付きのhttps://site.com/page)はモバイルアプリ内の画面を開きます。ディープリンクは、プロモーションコード、トラフィックソース、リファラーIDなどのコンテキストも渡すことができます。
URIスキームは、どのアプリがリンクを処理するかを決定するURLプレフィックスです(例:myapp://、vk://、tg://)。システムはルーティングにスキームを使用します。このスキームを登録したアプリを見つけ、処理のためにURLを渡します。
ユーザーがリンクをクリック → サービス(Branch、AppsFlyer)がコンテキストを記憶 → App Store/Google Playにリダイレクト → インストールと初回起動後、SDKが保存されたコンテキストをアプリに渡す → アプリが目的の画面を開く(あたかもユーザーが既にアプリをインストールしていたかのように)。
通常のディープリンク — いいえ。ディファードディープリンク — はい、アプリストアにリダイレクトしてコンテキストを保存する中間ページを介して可能です。Universal LinkとApp Linkは、アプリがインストールされていない場合のフォールバックとしてウェブサイトを開きます。
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は2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。