本記事では、xDBに格納されたアナリティクスデータであるコンタクト情報とWebサイト上でのアカウント登録などにより一意に識別できるようになった訪問者(ユーザー)を関連付ける方法を記載します。
Sitecoreはサイトに訪れた訪問者のWebサイト上のすべての行動をトラックしています。トラックした訪問者(コンタクト)と訪問情報(インタラクション)はコレクションDBであるMognoDB(およびレポーティング用にSQL Server)に保存されます。
コンタクト情報は訪問者を一意に識別できる情報と関連付けられるまで匿名(Anonymous)のコンタクトとなります。
コンタクトに訪問者を一意に識別できる識別子を設定して訪問者(サイトのユーザー)と関連付けることで、Sitecoreは訪問者が異なるデバイスや異なるブラウザーからアクセスした場合も一元的に1つのコンタクトとして管理、トラックします。ブラウザーベースでコンタクトが追跡されるのではなく、異なるデバイス、ブラウザーからのアクセスもSitecoreにより自動的に1つのコンタクトに関連する行動履歴としてトラックされるという点が7.X時代と比べてSitecore8で大きく改善されている点です。
また、コンタクトが一意に識別子により訪問者と関連付けられるより前に、過去 匿名状態でアクセスしていた訪問(インタラクション)情報もすべてその識別された訪問者の訪問として関連付けられます。コンタクトの関連付け情報はブラウザーのクッキーに保存されているので、一度コンタクトと訪問者が関連付けられるとその後サイトにログインしていない状態でも自動的に関連付けられたユーザーのアクセスとして訪問情報がxDBに格納されます。
xDBに格納された訪問者(コンタクト)や訪問(インタラクション)の情報はエクスペリエンスプロファイルを使用してを確認することができます。エクスペリエンスプロファイルには過去異なるデバイスで匿名状態でアクセスしていたときの情報も適切に関連付けられて表示されます。
長々と書いてしまいましたが、この記事ではコンタクト情報にサイトの訪問者(ユーザー)を識別する識別子を設定して識別されたコンタクトとする方法を記載していきます。
1.コンタクトデータに訪問者を一意に表す識別子を設定する
コンタクトが異なるデバイス、異なるブラウザーからアクセスする訪問者を一元的にトラックするために訪問者(Webサイトのユーザー)を特定できる情報を訪問者が提供してくれたときにTracker.Current.Session.Identify(userName)メソッドを呼び出してコンタクトに訪問者と一意に関連付く識別子userNameを設定します。
ユーザーを特定できる情報を訪問者が提供してくれる典型な例は サイトでアカウント登録をしてくれた時や、ログインした時、個人と関連付く情報がリンクに付与されたEメールキャンペーンのリンクをモバイルデバイスからクリックしてサイトに訪問してくれた時などです。
実際にSitecoreで管理されているサイトのログインフォームでログインを行った場合、次のようなコードを記述します。重要なのは Tracker.Current.Session.Identify メソッドの呼び出し処理だけです。ログインフォームで入力したユーザーでログインできたら、そのアカウントを識別子としてコンタクトに設定しています。それ以外のコードは特に重要ではありません。サイトコアが管理しているユーザー資格情報を使用して認証を行っていますが、そのほかの外部DBやCRMシステムなどなにで認証を行うかはここでは重要ではありません。大事なのは一意な識別子をコンタクトに設定しているという点です。
protected void btnLogin_Click(object sender, EventArgs e) { string user = Sitecore.Context.Domain.GetFullName(txtUsername.Text); string password = txtPassword.Text; if (Sitecore.Security.Accounts.User.Exists(user)) { if (AuthenticationManager.Login(user, password, false)) { if (Tracker.IsActive) { // ログインしたユーザーとコンタクトデータを関連付ける // 引数にしていする識別子はCRMに登録されたユーザーのGUIDなど、 // ユーザーと特定できる不変の文字列 Tracker.Current.Session.Identify(user); } Sitecore.Web.WebUtil.Redirect("/"); return; } } }
これにより同じブラウザーで次回サイトにアクセスした場合も自動的に特定のユーザーとしてトラックされます。過去匿名で訪問していたインタラクションデータも特定のユーザーのインタラクションとしてエクスペリエンスプロファイルで確認できます。
実際にContactドキュメントにIdentifyメソッドを呼び出して一意に特定する識別子を設定する前と後でどのような変化が発生するのかを確認してみます。下図がログインする前のContactドキュメントです。
下図のようなサンプルのログイン画面でログインします。サインインボタンをクリックすると上記サンプルコードが実行されます。
ログイン後、Contactドキュメントは下図のようになります。赤枠で囲まれたIdentifierがドキュメントに追加されていることがわかります。ちなみにIdentifierの識別子のContactドキュメントへの反映は即時で行われます。セッションエンドイベントより前に識別子の書き込みは行われます。
エクスペリエンスプロファイルを見ると、コンタクトに識別子が設定されたため名前が匿名ではなく不明になっています。不明となるのはコンタクトドキュメントに名前のデータを書き込んでいないためです。コンタクトに名前やメールアドレスを登録する方法はこちらの記事を参照してください。
2.コンタクトのマージの確認
ある訪問者が、パソコンのブラウザーからサイトに訪問していて、さらにモバイルデバイスからもサイトの匿名のユーザーで訪問しているシナリオを考えます。それぞれのデバイスで匿名のユーザーでアクセスしているためコレクションDBにコンタクトドキュメントが下図のように2つ作成されます。それぞれ別の匿名ユーザーとみなされるのでこの結果は妥当な結果です。
では、ある時に訪問者がパソコンのブラウザーでサイトにアカウント登録をしたとします。このとき、Identifyメソッドを呼び出すことでコンタクトには一意な識別子が設定されます。
別の日にモバイルデバイスから登録したアカウント情報を使用してサイトにログインしたら2つあったコンタクトドキュメントはどうなるでしょうか?
結論から記載するとコンタクトデータは1つにマージされます。マージされたコンタクトドキュメントは下図のようにSuccessorというフィールドでマージされた先のコンタクトのIDが設定されます。インタラクションデータなどがマージ先のコンタクトに関連付くようになるだけでなく、訪問回数もちゃんと合計されます。
以降、モバイルデバイスでアクセスしても自動的にマージ先のコンタクトとしてトラックされるようになります。エクスペリエンスプロファイルを見ると、異なるデバイスやブラウザーからのアクセスが1つのコンタクトの訪問情報としてトラックされていることを確認できます。
3.まとめ
簡単な例ですが、マルチデバイス、マルチブラウザー間の訪問情報も1つのコンタクトで一元管理することができるxDBのパワーの一つを確認できました。
コンタクトに訪問者のプロファイル情報(名前や住所、メールアドレスなど)を格納する例はxDBプログラミング:エクスペリエンスプロファイルでコンタクトの名前やメールアドレスを表示したいで取り上げています。
さんのコメント: さんのコメント: