Tealiumカスタムコンテナタグ
Tealiumカスタムコンテナは、任意のJavaScriptタグを実装するためのコードフレームワークを提供するJavaScriptテンプレートを提供するタグです。
カスタムコンテナタグが使用される可能性があるほとんどのケースでは、Tealium Generic Tagがよりシンプルな解決策であり、ほとんどのタグニーズを満たします。カスタムコンテナは、高度なタグにのみ必要であり、完了するためにはJavaScriptコードの記述が必要です。
前提条件
仕組み
Tealiumカスタムコンテナタグは、タグマーケットプレイスで見つけることができる公式の統合と同じコードテンプレートを使用します。カスタムコンテナを使用して作成されたタグは、iQの組み込みE-Commerce拡張変数、データマッピング、イベントトラッキング、その他の拡張機能など、iQのネイティブ機能を活用することができます。
タグマーケットプレイスから事前に作成されたタグを使用することがベストプラクティスですが、希望するタグが利用できない場合は、タグを追加するためのいくつかのオプションがあります。タグの大部分は、Tealium Generic TagまたはTealium Pixel Container tagを使用して実装することができます。
Tealiumカスタムコンテナタグの実装には、タグテンプレートを変更するためのJavaScriptコードの記述が必要です。あなたは、見慣れないJavaScriptコードを読み、あなたのニーズに合わせてカスタマイズすることに慣れているべきです。
テンプレートの概要
まず、タグマーケットプレイスに移動し、カスタムコンテナタグを追加します。
カスタムコンテナには構成フィールドはありませんが、ロードルール、データマッピング、拡張機能の使用をサポートしています。
データマッピング
他のタグと同様にデータマッピングを構成します。データマッピングはタグテンプレート変数u.data
に保存されます。カスタムコンテナタグはカスタムデータマッピングのみをサポートし、マッピングツールボックスで選択した名前は、タグテンプレートコードで値を参照するためのものと同じになります。
例えば、customer_id
をuser_id
という名前のカスタムデスティネーションにマッピングした場合、タグテンプレート内でこの値を使用する必要がある場所では、u.data['user_id']
として参照します。
コード構造
カスタムコンテナタグの構成の大部分は、タグテンプレート、つまりタグの基礎となるコードで行われます。以下の手順では、タグテンプレートの管理方法について理解していること、および必要な権限を持っていることを前提としています。
以下の表は、テンプレート内の各コードセクションをリストしています。それぞれのセクションは、テンプレート内の/* Start */
と/* End */
のコメントで始まります。
テンプレートコード | 説明 | 注意 |
---|---|---|
Tag Library Code | 経験豊富なユーザーは、静的ライブラリ関数を追加したり、ライブラリコードをインスタンス化してロードするためのサードパーティのURLを追加することができます。 | ライン21-22. このセクションはデフォルトでは空です。 |
Tag-Scoped Extensions Code | ##UTGEN## は、後でTealium iQ拡張のコードを挿入するためのプレースホルダーエリアで、タグにスコープを持たせます。 |
ライン56-59. このセクションは編集しないでください。 |
Mapping Code | このセクションでは、選択した値と、u.data オブジェクトの一部としてテンプレートにマッピングされたアイテムとの間で一対一のマッピングを行います。 |
ライン62-71. デフォルトのコードは大半のユースケースで機能します。変更は十分にテストしてください。 |
Tag Sending Code | ベンダーのタグは、ベンダーのURLが呼び出される前に特定のデータを処理したり、フォーマットしたりする必要があります。 | ライン74-78. 変更は通常、URLの変更、ベンダーの仕様に合わせたデータポイントの値の変更、データをクエリストリングパラメータにフォーマットするなどを含みます。 |
Loader Callback Function | 一部のタグでは、JavaScriptファイルがロードされた後にデータを送信する必要があります。これらのデータの変更は、適切なタイミングを確保するためにローダーコールバック内で行うべきです。タグがデータの変更やフォーマットを必要とする場合、これもローダーコールバック関数内で行うことができます。ファイルがロードされる前に利用可能なu.data の値は、コールバック内でも利用可能です。 |
ライン81-93. // のコメントをアンコメントして、外部JavaScriptファイルをロードするためのローダーコールバック関数を使用できるようにします。ローダーコールバック関数内には、外部JavaScriptファイルがロードされた後に実行するJavaScriptコードを挿入します。u.initialized=true; の行は、utag.view またはutag.link の呼び出しがある場合にJavaScriptファイルが2回ロードされるのを防ぎます。ほとんどのタグは、外部JavaScriptファイルを再度ロードする必要はありません。 |
Loader Callback Tag Sending Code | 外部JavaScriptファイルがロードされた後に実行されるJavaScriptコード。 | ライン86-90. |
Loader Function Call | 実装しているタグによっては、外部JavaScriptファイルなど、いくつかのタイプのファイルをロードすることができます。必要に応じて// の行をアンコメントします。 |
ライン96-108. ローダーがiframe イメージリクエストを呼び出すためには、ライン100のコメントを解除します。ローダーが外部JavaScriptファイルへのパスをロードするためのscript を呼び出すには、ライン101のコメントを解除します。if-else コードをアンコメントすると、u オブジェクトのコールバックが初期化されていない場合にロードされ、リクエストされたファイルが2回実行されるのを防ぎます。 タグがコールバックを必要としない場合は、"cb":u.loader_cb を"cb":null に構成します。c.join(u.data.qsp_delim) はクエリストリングのサンプルで、c はキー値配列で、base_url には’?‘が事前に追加されています。 |
テンプレート変数
以下の表は、カスタムコンテナテンプレートに見つけることができる変数を説明しています。
コード | 説明 |
---|---|
tv |
テンプレートバージョン、フォーマットはversion.YYYYMMDD です。このコメントのフォーマットと内容は重要で、タグステータスチェッカーなどのさまざまなシステムがテンプレート制御と検証のために使用します。 |
tc |
ファイルへの変更を説明するテンプレートコメント。 |
u |
最初に作成されるのはu オブジェクトで、ベンダータグ/サービスが必要とするすべてのプロパティと関数を含みます。 |
id |
u オブジェクトのプロパティで、タグのUIDに構成されます。 |
utag.o[<ACCOUNT.PROFILE>] .sender |
グローバルオブジェクトで、プロパティを持つエントリ(オブジェクト)を取得します。 |
utag.ut |
モダンなテンプレートはこのオブジェクトに依存しており、古いバージョンのutag.js は作成しません。このオブジェクトは参照され、または欠落している場合は作成されます。 |
utag.js |
このファイルのバージョンからマッチが作成されます。入力はut4.45.201805212154 のような形式で、二つのドット(ut4. とその後の. )の間の部分文字列を取得します。 |
utag.ut.loader |
テンプレートで使用するために参照される関数です。ローダー関数が未定義である場合、正当なマッチを見つけられない(上記で判断される)場合、またはマッチの2つ目の部分文字列が指定された数より小さい場合、テンプレートのローダー関数の定義が使用されます。この関数は、必要なイメージ、iframe、またはスクリプトリクエストを作成する責任があります。具体的なリソースは、関数が呼び出されるときにテンプレートで構成されます。何らかの理由でローダー関数が未定義の場合、フォールバックとして定義が提供されます。 |
utag.ut.typeOf |
utag.ut.loader と同様のチェックを持つ関数で、typeOf 演算子と同様の機能を提供しますが、null に対してはobject を返さず、toString() 関数を使用して、基本的なデータ型と抽象的なデータ型の両方に対してより詳細な値を返します。 |
u.ev |
このオブジェクトは作成され、テンプレートが反応するTealiumイベント( view または link )のルックアップを含みます。このチェックは u.send 関数の最初に行われます。 |
##UTGEN## |
最初の公開エンジンマーカーで、タグにスコープされたTealium iQ拡張のコードを公開エンジンが挿入する場所です。 |
u.map |
パラメータとイベントマッピングのルックアップを含むオブジェクト。 |
u.extend |
拡張機能定義を含む配列。たまに、タグの完全な実行を停止するためにfalseを返す目的で拡張が追加されます。 |
u.callBack |
スクリプト/画像/iframeリクエストによって行われるコールバックで、u.loader_cb を呼び出します。 |
u.loader_cb |
u.callBack によって呼び出されるコールバック関数。 |
u.send |
二つの引数、a とb を受け取る関数で、さまざまなu.send 固有のパラメータが定義されています:
|
u.data |
Tealium iQからの構成を含むオブジェクト。##UTVARconfig_<UI configuration>## は、公開エンジンがそれらの値を挿入するためのマーカーです。<UI configuration> は、utui.config.before-min.js/utui.config.js のconfigFields 配列内のオブジェクトのIDに対応します。 |
u.data.base_url |
ベースURL変数。これは、動的な値なしでベンダーファイルをロードするURL、または完全に動的なURLです。 |
utag.DB |
タグの実行を示すデバッグステートメント。 |
E-コマース変数
E-コマース拡張からの値を使用する場合、各値のコピーを持つテンプレート固有の変数を作成することを強くお勧めします。ベンダー固有のフォーマットのために元の値を変更すると、他のタグに悪影響を及ぼす可能性があります。
u.data.order_id = u.data.order_id || b._corder || "";
if (u.data.product_id.length === 0 && b._cprod !== undefined) {
u.data.product_id = b._cprod.slice(0);
}
Tealiumイベント変数
tealium_event
変数を使用すると、異なるイベントが異なる処理を必要とする場合に便利です。Tealiumのトラッキングコールに基づいてどのベンダートラッキングコールを行うかを決定するためのif
またはswitch
ステートメントを作成できます。tealium_event
は、他のイベントが構成されていない場合、デフォルトで"view"または"link"になります。
例
例1:購入のロードとトラッキング
以下のコードはベンダーから提供され、タグテンプレートに組み込む必要があります。コードは主に2つの部分、Part AとPart Bに分けられています。このコードは、外部のJavaScriptファイルをロードする(Part A)と、トラッキングコールをトリガーするためにベンダーオブジェクト変数に動的な値を構成する(Part B)という、JavaScriptタグでよく使われるパターンを示しています。
タグテンプレートコードでは、以下の2つの関数を使用してこの規約が達成されます:
u.loader
- ページのロード時に一度だけ呼び出され、ベンダーの外部JavaScriptライブラリをロードします。u.loader_cb
- u.loaderの完了後と、ページ上の後続のトラッキングコール時に呼び出されます。
この例では、組み込みのE-コマース変数の使用方法も示しています。
オリジナルのスクリプト
// Part A
<script type=text/javascript src="https://services.xg4ken.com/js/kenshoo.js?cid=000-00-00-000-00000"></script>
// Part B
<script type=text/javascript>
kenshoo.trackConversion('0000','000-00-00-000-00000', {
/*OPTIONAL PARAMETERS. FILL VALUES OR REMOVE UNNEEDED PARAMETERS*/
conversionType: 'lead',
revenue: 0.0,
currency:'USD',
orderId:'',
promoCode:'',
customParam1:'', /*any custom parameter. example: Airport: 'JFK'*/
customParam2:'', /*any custom parameter. example: Rooms: '3'*/
customParamN:''
})
</script>
ベースURLの構成
Part Aでは、cid
という名前のカスタムクエリ文字列パラメータを持つJavaScript URLがロードされています。cid
の値は動的である必要があります。Customer Containerで外部のJavaScriptファイルをロードするには、51行目のu.data
オブジェクト内でbase_url
の値を構成します。この値は後でu.loader
関数によって使用されます。
47 u.data = {
48 /* Initialize default tag parameter values here */
49 /* Examples: */
50 /* "account_id" : "1234567" */
51 "base_url" : "https://services.xg4ken.com/js/kenshoo.js?",
52 "cid" : ""
53 /* A value mapped to "account_id" or "base_url" in TiQ will replace these default values. */
54 };
ローダーコールバック関数
外部ファイルがu.loader
を使用してロードされた後、コールバック関数を実行したいと思います。Loader Callback Functionのセクションを更新し、84-85行目と91行目のコメントを外します。このコールバック関数、u.loader_cb
は、外部ファイルがロードされた後に呼び出されます。
以下のスニペットは、タグテンプレート内の完成したセクションを示しています:
81 /* Start Loader Callback Function */
82 /* Un-comment the single line JavaScript comments ("//") to use the Loader callback function. */
83
84 u.loader_cb = function () {
85 u.initialized = true;
86 /* Start Loader Callback Tag Sending Code */
87
88 // Insert your post-Loader tag sending code here.
89
90 /* End Loader Callback Tag Sending Code */
91 };
92 /* End Loader Callback Function */
ローダー関数の呼び出し
以下のスニペットは、タグテンプレート内の完成したセクションを示しています。この例のように、101行目のコメントを外します:
96 /* Start Loader Function Call */
97 /* Un-comment the single-line JavaScript comments ("//") to use Loader. */
98
99 if (!u.initialized) {
100 //u.loader({"type" : "iframe", "src" : u.data.base_url + c.join(u.data.qsp_delim), "cb" : u.loader_cb, "loc" : "body", "id" : 'utag_##UTID##' });
101 u.loader({"type" : "script", "src" : u.data.base_url, "cb" : u.loader_cb, "loc" : "script", "id" : 'utag_##UTID##' });
102 } else {
103 u.loader_cb();
104 }
105
106 //u.loader({"type" : "img", "src" : u.data.base_url + c.join(u.data.qsp_delim) });
107
108 /* End Loader Function Call */
タグ送信コード
このコードは、Custom Containerタグがロードされたときに実行されます。これは、タグを実行するために必要なデータを初期化する場所です。この場合、動的なcid
パラメータをベースURLに追加します(これにはcid
へのマッピングが必要であるか、または正しいファイルをロードするためにu.data
変数にデフォルト値を入れておく必要があります)。そして、必要なe-commerceデータを組み込みの変数からコピーします。
76行目以下のTag Sendingコードを以下のように更新します:
74 /* Start Tag Sending Code */
75
76 // Insert your tag sending code here.
77 u.data.base_url = u.data.base_url + "cid=" + u.data.cid;
78 u.data.orderId = u.data.orderId || b._corder || "";
79 u.data.revenue = u.data.revenue || b._csubtotal || "";
80 u.data.currency = u.data.currency || b._ccurrency || "";
81 u.data.promoCode = u.data.promoCode || b._cpromo || "";
82 /* End Tag Sending Code */
次に、コンバージョンをトラッキングするタイミングを決定する必要があります(kenshoo.trackConversion
)。
- 一つの選択肢は、
tealium_event
を使用し、特定のイベント名をキーとすることです。 - 別の選択肢は、自分自身の変数を使用し、コンバージョンが発生しているか、特定の種類のコンバージョンが発生していることを示す値を持つことです。これにより、各イベントで送信されるデータポイントの柔軟性が得られます。
コンバージョンコード値のチェックを使用することもできます。これは、コンバージョンイベントに必要な一意のパラメータです。この方法では、一致する値を一つだけチェックできますが、オプションのパラメータを送信する方法が制限される可能性があります。
この例では、変換コード変数のチェックオプションを使用しています。この値をUIで
conversionCode
にマッピングしますが、base_url
やcid
のようにテンプレート内で手動でu.data
オブジェクトに入れることはありません。この方法により、conversionCode
が存在するかどうかをチェックするとき、それは何らかの種類の値が存在するためだけに行われます。
タグテンプレートを以下のように更新します:
84 u.loader_cb = function () {
85 u.initialized = true;
86 /* スタート ローダーコールバックタグ送信コード */
87
88 // ここにあなたのポストローダータグ送信コードを挿入します。
90 if(u.data.conversionCode){
91 kenshoo.trackConversion(u.data.conversionCode,u.data.cid, {
92 conversionType: 'lead',
93 revenue: 0.0,
94 currency:'USD',
95 orderId:'',
96 promoCode:'',
97 customParam1:''
98 customParam2:'',
99 customParamN:'' })
100 }
101 /* エンド ローダーコールバックタグ送信コード */
102 };
呼び出しで送信されるオブジェクトにオプションのデータを入れるためのいくつかのオプションがあります。使用されないアイテムは削除する必要があります:
- ハードコーディングされたパラメータ
常に使用するパラメータだけを呼び出しに直接オブジェクトとして残し、その値はu.data
変数(名前はUIマッピングから来ます)を参照します。同じパラメータを常に送信する場合、このオプションは簡単に使用できますが、イベントごとにさまざまなパラメータを送信する必要がある場合、各イベントタイプを個別に構成していないと難しいでしょう。 - 条件付きパラメータ
カスタムパラメータ用のオブジェクト変数を作成し、if
文を使用して各パラメータを条件付きで構成します。カスタムパラメータがいくつかある場合、これはかなり網羅的なリストになる可能性があります。 - ループと除外パラメータ
カスタムパラメータ用のオブジェクト変数を作成し、u.data
オブジェクトをループ処理し、各変数をカスタムパラメータとして構成しますが、カスタムパラメータではないと知られている変数は除外します。これは、u.data
内に追加のデータポイントが存在し、送信したくないが追加を防いでいない場合、予期しない結果をもたらす可能性があります。
この例では、ループと除外の方法を使用します。u.data
の各変数に対して、カスタムパラメータオブジェクトoptionalParams
の対応する変数を構成します。既知のパラメータbase_url
、cid
、およびconversionCode
を除外します。
84 u.loader_cb = function () {
85 u.initialized = true;
86 /* スタート ローダーコールバックタグ送信コード */
87
88 // ここにあなたのポストローダータグ送信コードを挿入します。
89 var key, optionalParams = {};
90
91 if(u.data.conversionCode){
92 for (key in u.data) {
93 if (key !== "base_url" && key !== "cid" && key !== "conversionCode") {
94 optionalParams[key] = u.data[key];
95 }
96 }
97 kenshoo.trackConversion(u.data.conversionCode, u.data.cid, optionalParams)
98 }
99 /* エンド ローダーコールバックタグ送信コード */
100 }
この時点で、JavaScriptファイルがロードされ、conversionCode
条件が満たされるとtrackConversion
がトリガーされます。クエリ文字列ですべての値が予想通りに通過したことを確認し、必要に応じて個々のコードを調整します。
例2:初期化、ロード、トラッキング
コードスニペット
以下のコードはベンダーから提供され、タグテンプレートに組み込む必要があります。このコードスニペットは4つの部分、つまりパートA、パートB、パートC、パートDに分けられています。
このコードは、JavaScriptタグの以下の一般的なパターンを示しています:
- パートA:初期化されたベンダーオブジェクト変数を最初に。
- パートB:外部のJavaScriptファイルをロードします。
- パートC:動的な値を持つトラッキングコールをトリガーします。
- パートD:JavaScriptを実行しないページのためのタグのiframeバリアントを提供します。
/* パートA */
<script type="text/javascript">
if (!window.mstag) mstag = {loadTag : function(){},time : (new Date()).getTime()};
</script>
/* パートB */
<script id="mstag_tops" type="text/javascript" src="//flex.msn.com/mstag/site/b7381bb8-71e7-408c-91d0-3adb90b5c736/mstag.js">
</script>
/* パートC */
<script type="text/javascript">mstag.loadTag("analytics", {dedup:"1", domainId:"1516122", type:"1",revenue:"", actionid:"264766"})
</script>
/* パートD */
<noscript> <iframe src="//flex.msn.com/mstag/tag/b7381bb8-71e7-408c-91d0-3adb90b5c736/analytics.html?dedup=1&domainId=1516122&type=1&revenue=&actionid=264766" frameborder="0" scrolling="no" width="1" height="1" style="visibility:hidden;display:none"> </iframe> </noscript>
パートA:タグ送信コード
このコードは「タグ送信コード」セクションで使用されます。ベンダーのタグは、ベンダーのURLが呼び出される前に特定のデータを処理またはフォーマットする必要があります。
タグテンプレートを以下のように更新します:
- 行番号76の「// ここにあなたのタグ送信コードを挿入します。」というコメントを削除します。
- パートAの
<script>
タグ間のコードをコピーし、行番号76に貼り付けます。
以下のスニペットは、テンプレート構成ファイルの完成したセクションを示しています:
74 /* スタート タグ送信コード */
75
76 if (!window.mstag) mstag = {loadTag : function(){},time : (new Date()).getTime()};
77
78 /* エンド タグ送信コード */
パートB:ローダー関数呼び出し
このコードはローダー関数呼び出しセクションで使用されます。このスクリプトは同期的であり、次のステップを続行する前に完了します。u.data
にscript_id
という変数を追加し、これは基本URLのクライアント固有の部分(b7381bb8-71e7-408c-91d0-3adb90b5c736
)を格納します。
タグテンプレートを以下のように更新します:
- 行番号99と101-104のコメントを解除します。
- 行101を編集し、“src"の値をベンダーの基本URLとIDに置き換えます。
以下のスニペットは、タグテンプレートの完成したセクションを示しています:
96 /* スタート ローダー関数呼び出し */
97 /* シングルラインのJavaScriptコメント("//")のコメントを解除してローダーを使用します。 */
98
99 if (!u.initialized) {
100 //u.loader({"type" : "iframe", "src" : u.data.base_url + c.join(u.data.qsp_delim), "cb" : u.loader_cb, "loc" : "body", "id" : 'utag_##UTID##' });
101 u.loader({"type" : "script", "src" : "//flex.msn.com/mstag/site/" + u.data.script_id + "/mstag.js", "cb" : u.loader_cb, "loc" : "script", "id" : "mstag_tops" });
102 } else {
103 u.loader_cb();
104 }
105 //u.loader({"type" : "img", "src" : u.data.base_url + c.join(u.data.qsp_delim) });
106
107 /* エンド ローダー関数呼び出し */
パートC:ローダーコールバック関数
このコードはローダーコールバック関数セクションで使用されます。進行する前に、domainId
やactionid
など、動的に見える変数をマッピングします。
タグテンプレートファイルを以下のように更新します:
- 行番号84-85と91のコメントを解除します。
- 行番号88の「// ここにあなたのポストローダータグ送信コードを挿入します」のコメントを削除します。
- パートCの
<script>
タグ間のコードをコピーし、行番号88に貼り付けます。 domainID
とactionid
の値をu.data.~
変数で上書きします。
以下のスニペットは、テンプレート構成ファイルの完成したセクションを示しています:
81 /* スタート ローダーコールバック関数 */
82 /* シングルラインのJavaScriptコメント("//")のコメントを解除してこのローダーコールバック関数を使用します。 */
83
84 u.loader_cb = function () {
85 u.initialized = true;
86 /* スタート ローダーコールバックタグ送信コード */
87
88 mstag.loadTag("analytics", {dedup:"1",domainId:u.data.domain_id,type:"1",revenue:"",actionid:u.data.action_id});
89
90 /* エンド ローダーコールバックタグ送信コード */
91
92 };
93 /* エンド ローダーコールバック関数 */
パートD:No scriptオプション
このコードは、ブラウザがJavaScriptをサポートしていない場合、またはJavaScriptが無効になっている場合のフォールバックオプションを提供します。TealiumはJavaScriptを必要とするため、このフォールバックコードはオプションではありません。したがって、このコードは無視できます。
テンプレートの保存
元のファイルを上書きせずにテンプレートの新しいバージョンを保存するには、バージョンテンプレートを保存をクリックします。それ以外の場合は、プロファイルテンプレートを保存をクリックして元のファイルを上書きします。
最終更新日 :: 2025年January月10日