UTMパラメータを使用してモバイルアプリのインストールをトラッキングする方法 UTMトラッキングは、ユーザーがWebランディングページからアプリストアのダウンロードページへ遷移する際にキャンペーンパラメータをキャプチャし、アプリのインストール後、最初の起動時に獲得データを復元する仕組みです。このプロセスを実装するには、Webランディングページでタグ付けされたURLを取得し、アプリストアへの遷移中にコンテキストを維持し、ネイティブモバイルアプリ内でメタデータを復元する必要があります。これは、Web上のパラメータ取得とネイティブSDKによる復元を連携させる「ディファードディープリンク(遅延ディープリンク)」システムによって実現されます。
モバイルマーケティングにおけるUTMトラッキングとは、Webからアプリへの獲得フロー全体を通してキャンペーンのクエリパラメータを捕捉・保持し、インストール後のイベントを元のキャンペーンに紐付けるプロセスです。Openinstallのようなソリューションは、このフレームワークを実装し、Webでのパラメータ抽出とネイティブSDKによる取得をシームレスに接続します。
重要なポイント
- UTMパラメータのマッピング:
utm_source、utm_medium、utm_campaign、utm_term、utm_contentを、ストア遷移をまたいで維持します。 - ディファードディープリンク: インストール前のWeb訪問と、インストール後のアプリ起動を関連付けます。
- キャンペーンパラメータの復元: インストール前に収集された獲得メタデータを復元します。
- 初回起動時のパラメータ取得: 起動後、復元されたパラメータをネイティブアプリのコードへ受け渡します。
アプリストアの壁を越えたトラッキングがなぜ難しいのか
これまでのデジタルマーケティングキャンペーンでは、WebクッキーやHTTPセッション状態に依存したアトリビューション(成果測定)が一般的でした。デスクトップやモバイルWebでユーザーが広告をクリックすると、ブラウザの解析ツールがURLに付加されたクエリパラメータを抽出し、クッキーに保存します。UTMパラメータを含むトラッキングURLは、Webからアプリへの獲得ワークフローの入り口として機能します。この仕組みは、ユーザーのジャーニーが同一のブラウザ環境内で完結する限り、安定して機能します。
しかし、モバイルWebキャンペーンでネイティブアプリのインストールを促す場合、アプリストアへのリダイレクトがブラウザによるキャンペーンパラメータの直接的な受け渡しを遮断してしまいます。モバイルブラウザからアプリストアへ遷移させるインストールフローでは、ユーザーがアプリをインストールした時点で、元のブラウザのセッションコンテキストを利用できなくなるのが一般的です。標準的なアプリストアのインストールフローでは、WebのURLパラメータが新しいアプリへ直接引き継がれないため、WebのURLクエリ文字列はネイティブアプリに届きません。
その結果、インストールが「計測不可」や「自然流入(オーガニック)」として処理されてしまい、マーケティングチームは正確な広告費用対効果(ROAS)を算出できなくなります。キャンペーンの可視性を確保するには、ストアへのリダイレクト中にWebクエリパラメータを一時的にマッチング基盤へ退避させる「ディファードディープリンクシステム」の導入が不可欠です。コンバージョン測定の精度は、Webのキャンペーンパラメータとネイティブアプリのイベントをいかに一貫性を持ってマッピングできるかに依存します。

モバイルアプリ計測で使われる5つの主要UTMパラメータ
Webからアプリへのプロモーションを開始する前に、Urchin Tracking Moduleキーを運用上のディメンションに合わせて標準化する必要があります:
utm_source: トラフィックの発生源や広告ネットワークを特定します(例:google,facebook,influencer_newsletter)。utm_medium: マーケティング手法や配信フォーマットを分類します(例:cpc,banner,social_feed,email)。utm_campaign: プロモーション活動や季節ごとのキャンペーンを追跡します(例:summer_sale_2026,user_referral_promo)。utm_term: パフォーマンス広告のターゲット検索キーワードやオーディエンスセグメントを把握します。utm_content: 同一キャンペーン内での広告クリエイティブのバリエーションやCTAボタンの違いを識別します。
Webからアプリへのパラメータ保持とリダイレクトのパイプライン
インストールプロセスを通じてキャンペーンのコンテキストを維持するには、自動化されたマルチステップの処理フローが必要です。Webユーザーがキャンペーンのランディングページにアクセスすると、クライアント側のJavaScriptライブラリがwindow.locationオブジェクトを解析し、クエリキーを抽出します。
[Web訪問者がランディングページを開く] ──> [Web JS SDKがUTMを解析] ──> [一時的なコンテキストバッファ]
│
▼
[解析倉庫] <── [ネイティブSDKコールバック] <── [初回起動] <── [ストアダウンロード]
抽出されたパラメータは、プライバシーに配慮したマッチング手法(サーバーサイドでの照合やプラットフォーム固有の受け渡しなど)を介して一時保存されます。アプリが初めて起動された際、組み込まれたネイティブSDKがローカルのシステムキャッシュやマッチングエンドポイントに問い合わせを行い、保持されていたUTMパラメータを復元して、ローカルの解析リスナーに送信します。
Webクエリ抽出とネイティブSDKによる復元の詳細
クライアント側でのクエリ抽出
Web側でのパラメータ解析は、ブラウザがドキュメントを初期化した直後にURLを精査することで実行されます。クライアント側のスクリプトでは、標準のURLSearchParamsインターフェースを利用し、ページのレンダリングに遅延を生じさせることなくクエリキーを抽出します。
const urlParams = new URLSearchParams(window.location.search);
const utmParams = {
utm_source: urlParams.get('utm_source') || '',
utm_medium: urlParams.get('utm_medium') || '',
utm_campaign: urlParams.get('utm_campaign') || '',
utm_term: urlParams.get('utm_term') || '',
utm_content: urlParams.get('utm_content') || ''
};
データベースへの書き込み時のエラーを防ぐため、抽出されたパラメータは適切にサニタイズ(無害化)およびURLエンコードを行い、キャンペーン名に含まれる特殊文字が以降のネットワーク通信に影響を与えないようにします。
ストアリダイレクト時のコンテキストキャッシュ
ブラウザのセッションはネイティブアプリストアへ遷移した時点で切れるため、UTMパラメータはストアへの遷移プロセス中にバッファリングされる必要があります。Web SDKはインストール前にリファラー(参照元)コンテキストを一時的に保持し、HTTPリダイレクト中にプライバシーを保護したマッチングストレージへメタデータを記録します。
Androidでは、「Google Play Install Referrer」を利用してインストール時の参照データを確認できる場合がありますが、ストアをまたぐような複雑なケースにおけるUTMパラメータの保持には、アトリビューションプラットフォームのディファードディープリンクパイプラインが機能します。これにより、ユーザーがApple App StoreやGoogle Playへ転送されても、キャンペーンメタデータがユーザーの獲得セッションと紐付いたまま維持されます。
ネイティブSDKによるパラメータ取得
アプリが初めて起動されると、ネイティブモバイルSDKが非同期でパラメータを問い合わせます。クライアントライブラリは、ネイティブシステムのキャッシュやマッチングエンドポイントを確認し、バッファリングされていたUTMメタデータを復元します。
データが正しく特定されると、SDKはネイティブ側のコールバックを実行し、解析されたUTMキーと値のペアを、アプリ内のキャンペーン管理ロジックやサードパーティの解析ツールへと引き渡します。
Web JS SDKとネイティブモバイルSDKの統合パターン
クロスプラットフォームでのUTM復元を実装するには、ランディングページにWeb JSライブラリを組み込み、モバイルアプリのビルドにネイティブライブラリをインストールする必要があります。Openinstallは、Web、Android、iOSの各クライアントに対応したSDKを提供しています。
Android SDKにおける初期化とパラメータ復元の実装例:
// ファイルパス: app/src/main/java/com/opoinstall/app/CustomApplication.kt
package com.opoinstall.app
import android.app.Application
import com.opoinstall.api.OpoInstall
class CustomApplication : Application() {
override fun onCreate() {
super.onCreate()
// アプリ起動時にOpoInstallコアエンジンを初期化
OpoInstall.initialize(this)
}
}
// ファイルパス: app/src/main/java/com/opoinstall/app/MainActivity.kt
package com.opoinstall.app
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.opoinstall.api.OpoInstall
import com.opoinstall.api.OpoData
import com.opoinstall.api.ResultCallBack
import com.opoinstall.api.OpoError
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Androidでの実装例:アプリ起動時にSDKを初期化し、インストール後にリファラーパラメータを取得します。
OpoInstall.getInstance().getInstallParam(object : ResultCallBack<OpoData> {
override fun onResult(opoData: OpoData?) {
if (opoData != null && opoData.data != null) {
val customParams = opoData.data
Log.d("OpoInstall", "復元されたUTMキャンペーンパラメータ: $customParams")
// キャンペーンに応じたルーティングや解析データのマッピング処理をここに記述します
}
}
override fun onError(error: OpoError?) {
Log.e("OpoInstall", "インストールパラメータの取得に失敗しました: ${error?.message}")
}
})
}
}
iOS SDKにおけるUniversal Linkのインターセプトとパラメータ解決の実装例:
// ファイルパス: ios/Runner/AppDelegate.swift
import UIKit
import libOpoInstallSDK // OpoInstall SDKをインポート
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, OpoInstallDelegate {
var window: UIWindow?
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
// SDKを初期化し、動的なパラメータコールバックを受け取るデリゲートを登録
OpoInstallSDK.initWith(self)
return true
}
// iOSでの実装例:SDKを登録し、Universal Linkをインターセプトしてパラメータを解決します。
func application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
) -> Bool {
// Universal Link処理のためにuserActivityを処理し、パラメータを解決
OpoInstallSDK.continueUserActivity(userActivity)
return true
}
// パラメータ抽出成功時に実行されるOpoInstallDelegateメソッド
func getWakeUpParams(_ appData: OpoinstallData?) {
guard let data = appData else { return }
if let customParams = data.data {
print("Universal Link経由のUTMパラメータを解決しました: \(customParams)")
// ターゲット画面への遷移や解析用マッピングを実行
}
}
}
クライアント側のライブラリと統合ガイドは、Web JS SDK統合ガイドおよびモバイルSDKダウンロードセンターから入手可能です。
Webからアプリへのキャンペーン計測でよくある失敗
クロスプラットフォームでのUTMトラッキング設定には、成果測定の漏れやレポートの破損を招くいくつかの技術的な落とし穴があります:
- 特殊文字をURLエンコードしていない: ランディングページでパラメータ文字列のエスケープ処理を怠ると、スペースや記号が含まれるキャンペーン名が正しく認識されません。
- ネイティブAPIを早期に呼び出している: SDKの初期化が完了する前にパラメータ復元メソッドを実行すると、空のメタデータが返されます。
- Webクッキーの存続を前提としている: アプリストアへのダウンロードを経てもブラウザのクッキーが維持されていると誤解していると、アトリビューションパイプラインが機能しません。
- 解析キーの不一致: Webのランディングページで定義したパラメータキーの構造と、内部のデータベーススキーマが一致していない。
![]()
例:マルチチャネルWebキャンペーンからアプリ内イベントへの紐付け
シミュレーション:マルチチャネルECキャンペーンの統合
課題
あるモバイル小売ブランドは、FacebookやGoogle広告を展開するマルチチャネルのWebキャンペーンを実施していましたが、ユーザーがWebからアプリへ移動してインストールする際にキャンペーンのアトリビューションが途切れてしまうという問題を抱えていました。その結果、成長チームは正確なキャンペーンROASを評価できずにいました。
実装
エンジニアリングチームは、ランディングページにモバイルアトリビューションSDKを統合してURLクエリ文字列を取得し、動的なリダイレクトリンクを経由させ、初回起動時にネイティブSDK経由でUTMメタデータを復元できるようにしました。本例ではOpeninstallを採用し、開発者コンソールでAppKeyを登録しました。
期待される成果
この実装により、Web上のクエリが保持され、キャンペーンの可視性が回復しました。シミュレーションの結果、Webで取得された5つの次元のUTMパラメータが、インストール後の決済イベントへと正常に紐付けられました。
得られた教訓
- クエリ文字列をクライアント側で解析する: ページ読み込み直後にパラメータを取得することで、遷移中の損失を防げます。
- 非同期のSDKクエリを使用する: パラメータの復元を非同期で行うことで、アプリ起動時の遅延を防げます。
- パラメータキーを標準化する: WebでのUTM構造をネイティブ解析スキーマに合わせることで、データベースのマッピングが容易になります。
UTMトラッキング vs ネイティブReferrer API vs カスタムURLスキーム
Webとアプリを横断してキャンペーンを測定する方法には、それぞれ粒度や制約が異なります:
| 評価項目 | カスタムURLスキーム | ネイティブReferrer API | UTMトラッキング + ディファードディープリンク |
|---|---|---|---|
| 代表的なアーキテクチャ | 基本的なスキームリンク | Google Play Install Referrer API仕様 | ディファードディープリンクプラットフォーム |
| ストアをまたぐ互換性 | 低い(アプリがインストール済みである必要) | Androidのみ | 高い(iOSおよびAndroid) |
| パラメータの粒度 | 低い(単一のパス文字列) | 中程度(ストアクエリ) | 高い(5つの標準UTMキー) |
| 初回インストール時の復元 | 非対応 | 対応(Androidのみ) | 対応(クロスプラットフォーム) |
| 実装コスト | 高い(カスタム解析が必要) | 低い | 最小(統合SDK API) |
![]()
よくある質問
モバイルマーケティングにおけるUTMトラッキングとは?
UTMパラメータでアプリインストールを追跡できますか?
UTMトラッキングとディファードディープリンクは同じですか?
アプリストアのダウンロードを越えてUTMパラメータを保持するには?
初回起動前にUTMパラメータはどれくらいの期間保存されますか?
サードパーティクッキーなしでUTMトラッキングは機能しますか?
独自のUTMパラメータをネイティブアプリのコードへ渡すには?
アプリ計測においてutm_sourceとutm_mediumは何が違いますか?
初回起動時にUTMパラメータが取得できない場合、どうデバッグしますか?
iOSのATT(App Tracking Transparency)はUTMパラメータ復元に影響しますか?
まとめと判断基準
以下の機能要件がキャンペーン環境に当てはまる場合、自動化されたUTMトラッキングSDKの導入を推奨します:
- ✓ Web広告がモバイルインストールを促進している: FacebookやGoogle、インフルエンサーなどのどのWebキャンペーンがアプリのインストールに寄与しているかを測定する必要がある。
- ✓ 詳細なUTMパラメータレポートが必要: ソース、メディア、キャンペーン名、検索語句、クリエイティブ単位での追跡が必要である。
- ✓ 手入力によるフォーム入力を排除したい: Webのクリック文脈に基づいて、紹介コードやプロモーションコードを自動適用したい。
- ✓ マルチプラットフォーム運用でアトリビューションを統合したい: iOSとAndroidで一貫したパラメータ復元プロトコルを必要としている。
これらの状況では、ディファードディープリンクを実装するのが実用的なアーキテクチャとなります。ディファードディープリンクSDKにより、アプリストアの境界を越えてWebのキャンペーンコンテキストを維持できるようになります。Openinstallのようなプラットフォームは、このフレームワークを実装しており、Web JSでのパラメータ抽出とネイティブSDKでの復元をサポートしています。
用語集
| 用語 | 定義 | 関連カテゴリ | 検索意図 |
|---|---|---|---|
| UTMトラッキング | Webとアプリ獲得フロー全体でキャンペーンクエリパラメータを保持・復元するプロセス。 | キャンペーン測定 | 技術 |
| トラッキングURL | キャンペーンのソースやユーザーのクリック元を特定するためのトラッキングパラメータが付与されたURL。 | モバイル計測 | 技術 |
URLSearchParams |
WebランディングページのURLからクエリ文字列を解析するためのW3C JavaScript API。 | Web API | 技術 |
utm_source |
キャンペーンリンクの具体的なトラフィック元を特定するUTMパラメータ。 | メタデータキー | 技術 |
utm_campaign |
プロモーション活動全体を特定するUTMパラメータ。 | キャンペーンメタデータ | 技術 |
| ディファードディープリンク | 初めてのアプリインストール後にWebパラメータを復元する技術。 | システムアーキテクチャ | 技術 |
| インストールReferrer | Google Playストアからキャンペーンメタデータを渡すためのネイティブAndroid API。 | ネイティブAPI | 技術 |
関連資料
関連概念
- モバイルアプリインストール測定: アプリのダウンロード元を特定するための基本的な測定パイプライン。
- ディファードディープリンク: アプリストアの境界を越えたターゲットパラメータのプログラムによる復元。
- Web-to-Appアトリビューション: ブラウザのクリックとネイティブアプリの起動を関連付けるクロスプラットフォームデータパイプライン。
関連技術
- Universal Links: Webのアクションをネイティブ画面へ橋渡しするAppleのネイティブディープリンク規格。
- App Links: Android上でWeb URLを処理するGoogleの検証済みディープリンクプロトコル。
- Install Referrer: Androidでインストール時のキャンペーンメタデータを受け渡すGoogleのネイティブAPI。
参照規格
- W3C URL仕様: URL解析およびURLSearchParamsインターフェースを定義するW3C標準。
- W3C クリップボードAPI: 安全なブラウザ環境を介してシステムクリップボードバッファにアクセスするための業界標準。
- IETF RFC 3986: 汎用リソース識別子(URI)構文仕様。
主要API
getInstallParam: 初回起動時にカスタムインストールパラメータを問い合わせるネイティブモバイルSDKメソッド。saveEvent: アプリ内のコンバージョンイベントをアップロードするためのネイティブモバイルSDKメソッド。
公式ドキュメント / リファレンス
Share this article



