Kameleoonでは、すべてのサブドメイン間でセッションデータを統合できます。このモードでは、Kameleoonは同じトップレベルドメイン内の複数のサブドメイン間で訪問者を追跡します。たとえば、Kameleoonはあるサブドメインで開始され、別のサブドメインで継続された訪問をローカルストレージに単一の訪問として記録できます。Kameleoonはこのオプションを有効にして、パーソナライゼーションキャンペーンの高度な行動ターゲティングのためにすべてのサブドメイン間でセッションデータを使用することを推奨します。この構成により、すべてのサブドメインのローカルストレージに保存されたデータが統合されます。
統合セッションデータをサポートしない実装タグを選択した場合、Kameleoonは別のサブドメインに到達した時点で、あるサブドメインで開始した訪問をユーザーのデバイスローカルストレージ上の新しい訪問として追跡します。これは、あるサブドメインで収集されたすべてのデータ(ページビュー、サイト滞在時間など)を新しいサブドメインでリセットすることを意味します。その結果、これらの条件に基づくターゲティングが予期しない結果を生み出す可能性があります。たとえば、4回目のページビューでトリガーされるパーソナライゼーションキャンペーンがあり、訪問者が最初のドメインで3ページを閲覧し、サブドメインで4ページ目をロードする場合、統合セッションデータを有効にしている場合のみパーソナライゼーションがトリガーされます。
異なるサブドメイン上のローカルストレージパーティショニングは、解析用に収集されたデータには影響しません。このオプションは、サブドメインにまたがるキャンペーンや、異なるサブドメイン間でローカルに保存されたデータを使用するキャンペーンにのみ必要です。
利用可能状況:
Safariブラウザは、ローカルストレージパーティショニング制限のため、統合セッションデータをサポートしません。これに対処するため、KameleoonはServer Synchronization Call(SSC)を使用した取得メカニズムを提供します。この方法を使用して、Kameleoonは(サーバー設定の)kameleoonVisitorCode CookieからvisitorCodeを取得します。Kameleoonは次に、現在のLocalStorageのvisitorCodeが空かどうかを確認します。空の場合、KameleoonはSSCを実行して、KameleoonバックエンドサーバーからLocalStorageに存在するすべてのデータを取得します。この呼び出しが完了すると、Kameleoonはデータを以前の状態に復元します。
Kameleoonは、Safariブラウザではこのオプションをデフォルトで有効にします。
統合セッションデータ追跡タグ
Kameleoonで統合セッションデータを有効にするには、Webサイトのメイン(トップレベル)ドメインで<iframe>ファイル(以下に提供)をホストします。このiframeは、訪問者がWebサイトのメインドメインと一致しないURLを持つページに移動するたびにロードされます。iframe HTMLファイルは小さく、静的で、ローカルストレージで訪問者データを保存および復元するために使用される不変のコードのみを含みます。
Kameleoonは、このURLでオリジナルファイルを取得することを推奨します:https://developers.kameleoon.com/resources/iframe_template.html。ファイルを直接ダウンロードすることもできます(リンクを右クリックして**Save link as…**を選択)。
iframeコード内で、2つの変数を変更します。
最適なパフォーマンスを確保するには、iframeファイルのキャッシングを設定してください。このファイルは静的なままなので、ブラウザは複数回ダウンロードする必要はありません。次のHTTPヘッダーを使用してサーバー上でキャッシングを構成してください。
Cache-Control: max-age=2592000
iframeをホストすることに加えて、次のインストールスニペットを含めます。kameleoonIframeURL変数の正しい値を指定します。この変数を、WebサイトでiframeにアクセスできるURLに設定します。
<script>
// Change the value of this URL to point to your own URL, where the iFrame is hosted
window.kameleoonIframeURL = "https://www.customerdomain.com/path/to/kameleoon-iframe.html";
window.kameleoonLightIframe = false;
var kameleoonIframeOriginElement = document.createElement("a");
kameleoonIframeOriginElement.href = kameleoonIframeURL;
window.kameleoonIframeOrigin = kameleoonIframeOriginElement.origin || (kameleoonIframeOriginElement.protocol + "//" + kameleoonIframeOriginElement.hostname);
if (location.href.indexOf(window.kameleoonIframeOrigin) != 0) {
window.kameleoonLightIframe = true;
var kameleoonProcessMessageEvent = function(event) {
if (window.kameleoonIframeOrigin == event.origin && event.data.slice && event.data.slice(0,9) == "Kameleoon") {
window.removeEventListener("message", kameleoonProcessMessageEvent);
window.kameleoonExternalIFrameLoaded = true;
if (window.Kameleoon) {
Kameleoon.Utils.runProtectedScript(event.data);
Kameleoon.Analyst.load();
} else {
window.kameleoonExternalIFrameLoadedData = event.data;
}
}
};
if (window.addEventListener) {
window.addEventListener("message", kameleoonProcessMessageEvent, false);
}
var iframeNode = document.createElement("iframe");
iframeNode.src = kameleoonIframeURL;
iframeNode.id = "kameleoonExternalIframe";
iframeNode.style = "float: left !important; opacity: 0.0 !important; width: 0px !important; height: 0px !important;";
document.head.appendChild(iframeNode);
}
</script>
iframeファイルはWebサイトのメインドメインにあるサーバーでホストしてください。複数のサブドメインの場合、最も重要なものを選択します。このステップは技術チームにとって必須です。Kameleoonは常にメインドメインを使用してブラウザのローカルストレージにコンテンツを保存します。現在のURLがメインドメインと一致する場合、Kameleoonエンジンは関連するローカルストレージ領域に直接データを書き込むことができます。URLが別のドメインに属している場合、Kameleoonはメインドメインで Kameleoonデータの読み取りと書き込みのみを行える静的コードを含むiframeファイルをロードします。
統合セッションデータスニペットは、タグマネージャーインストールでも使用できます。
アンチフリッカー付き統合タグ
統合タグとアンチフリッカー付き非同期タグを使用する場合、次の順序で3つのscriptタグを追加する必要があります。
- アンチフリッカー付き非同期タグ。
- 統合セッションデータスクリプト。
- Kameleoonインストールタグ。
<script>
// Duration in milliseconds to wait while the Kameleoon application file is loaded
var kameleoonLoadingTimeout = 750;
window.kameleoonQueue = window.kameleoonQueue || [];
window.kameleoonStartLoadTime = Date.now();
if (! document.getElementById("kameleoonLoadingStyleSheet") && ! window.kameleoonDisplayPageTimeOut) {
var kameleoonS = document.getElementsByTagName("script")[0];
var kameleoonCc = "html::after { content: ''; position: fixed; inset: 0; background: #fff; z-index: 2147483647; }";
var kameleoonStn = document.createElement("style");
kameleoonStn.type = "text/css";
kameleoonStn.id = "kameleoonLoadingStyleSheet";
if (kameleoonStn.styleSheet) {
kameleoonStn.styleSheet.cssText = kameleoonCc;
} else {
kameleoonStn.appendChild(document.createTextNode(kameleoonCc));
}
kameleoonS.parentNode.insertBefore(kameleoonStn, kameleoonS);
window.kameleoonDisplayPage = function(fromEngine) {
if (!fromEngine) {
window.kameleoonTimeout = true;
}
if (kameleoonStn.parentNode) {
kameleoonStn.parentNode.removeChild(kameleoonStn);
}
};
window.kameleoonDisplayPageTimeOut = window.setTimeout(window.kameleoonDisplayPage, kameleoonLoadingTimeout);
}
</script>
<script>
// Change the value of this URL to point to your own URL, where the iFrame is hosted
window.kameleoonIframeURL = "https://www.customerdomain.com/path/to/kameleoon-iframe.html";
window.kameleoonLightIframe = false;
var kameleoonIframeOriginElement = document.createElement("a");
kameleoonIframeOriginElement.href = kameleoonIframeURL;
window.kameleoonIframeOrigin = kameleoonIframeOriginElement.origin || (kameleoonIframeOriginElement.protocol + "//" + kameleoonIframeOriginElement.hostname);
if (location.href.indexOf(window.kameleoonIframeOrigin) != 0) {
window.kameleoonLightIframe = true;
var kameleoonProcessMessageEvent = function(event) {
if (window.kameleoonIframeOrigin == event.origin && event.data.slice && event.data.slice(0,9) == "Kameleoon") {
window.removeEventListener("message", kameleoonProcessMessageEvent);
window.kameleoonExternalIFrameLoaded = true;
if (window.Kameleoon) {
Kameleoon.Utils.runProtectedScript(event.data);
Kameleoon.Analyst.load();
} else {
window.kameleoonExternalIFrameLoadedData = event.data;
}
}
};
if (window.addEventListener) {
window.addEventListener("message", kameleoonProcessMessageEvent, false);
}
var iframeNode = document.createElement("iframe");
iframeNode.src = kameleoonIframeURL;
iframeNode.id = "kameleoonExternalIframe";
iframeNode.style = "float: left !important; opacity: 0.0 !important; width: 0px !important; height: 0px !important;";
document.head.appendChild(iframeNode);
}
</script>
<script src="//SITE_CODE.kameleoon.io/engine.js" fetchpriority="high" async></script>
iframeをホストできない場合、KameleoonはServer Synchronization Call(SSC)メカニズムを提供します。この機能は、訪問者がメインドメインからサブドメインに移動するときに、Kameleoonのバックエンドサーバーからすべての訪問者データを取得します。呼び出しの後、Kameleoonはターゲティング目的でブラウザのローカルストレージにデータを保存します。このオプションを有効にするには、カスタマーサクセスマネージャーに連絡してください。以下に注意してください:
- ターゲティングセグメントに以前の訪問やページから保存されたデータが含まれる場合、Kameleoonエンジンがデータを待機するため、SSCにより実験でフリッカーが発生する可能性が高まります。
- シミュレーションモードなどの一部の機能は、複数のドメインで実行される実験をシミュレートする場合に機能しません。この機能を使用するには、両方のドメインでシミュレーションを起動してください。
統合セッションデータの脆弱性
統合セッションデータを使用する設定の場合、潜在的なセキュリティ問題が発生する可能性があります。Kameleoonは外部ドメインに属するローカルストレージにすべての訪問者データを書き込むため、悪意のあるWebサイトがそのページにあなたのiframeを含めることで、潜在的にこのデータを読み取る可能性があります。ロードされると、iframeはpostMessage()呼び出しを使用して常にKameleoonデータを返します。応答には、機密情報や敏感な情報を含むカスタムデータが含まれる可能性があります。
このエクスプロイトは、最初にあなたのWebサイトを訪問し、その後悪意のあるサイトを訪問した訪問者にのみ影響を与えます。したがって、攻撃者はすべての訪問者のデータを取得することはできません。セキュリティを強化するには、iframeへのアクセスを指定されたドメインおよびサブドメインのリストに制限します。静的iFrameファイル内の allowedDomains 変数でこのリストを指定してください。
Kameleoonは、iframeのセキュリティを強化するために以下の3つの対策を使用します。
- 識別されたドメインへのアクセス制限: iframeコードには、iframeを要求できる権限のあるドメインを指定する allowedDomains 変数が含まれています。リストされたドメインのみがKameleoon iframeからコードをロードして実行できます。
- 識別されたサイトコードへのアクセス制限: iframeコードには、指定されたサイトコードを持つKameleoonエンジンのみがiframeを要求できるようにする siteCode 変数が含まれています。
- プレフィックス付きローカルストレージ: iframeおよびKameleoonは「kameleoon」プレフィックスで始まるエントリのみを読み書きします。Kameleoonは他のデータの読み書きはできず、追加のセキュリティレイヤーが追加されます。
統合セッションデータを有効にするには、Kameleoon iframeがすべてのドメインでロードされる必要があります。X-Frame-Optionsレスポンスヘッダーを設定しないでください。
Kameleoonはプロジェクトを作成日に応じてkameleoon.euまたはkameleoon.ioのいずれかでホストします。プロジェクトのKameleoonアプリで表示されているドメインを使用してください。