Googleタグマネージャーを使用して、Googleアナリティクスのeコマーストラッキングを設定しました。
コード:
$tracking_script = "
dataLayer.Push({
'transactionId': '$ref',
'transactionAffiliation': '$cartec_name',
'transactionTotal': '$amount',
'transactionTax': '',
'transactionShipping': '',
'transactionProducts': [{
'sku': 'DD-{$amount}-{$currency}',
'name': '{$cartec_name}_Deposit',
'category': '',
'price': '$amount',
'quantity': 1
}],
'event': 'deposit_successful'
});
";
<script type="text/javascript">
if (typeof(dataLayer) !== 'undefined') {
<?php echo $tracking_script; ?>
}
</script>
追跡は機能しますが、データベースレコードと比較して1日あたり約200(30%)のトランザクションが欠落しています。
考えられる原因と、この問題をデバッグするための最良の方法は何ですか?
GTMのdataLayerオブジェクトが非同期で取得されるため、準備が完了する前にスクリプトが実行されています。つまり、ロードイベントが発生/トリガーされるのを待つ必要があります。
サーバー側のphpコードは、dataLayerに書き込むのと同様に適切ではなく、このコードがGTMのデータレイヤーオブジェクトを待っていない根本的な問題です。これの代わりに、jsに対応する変数を作成するだけです。
$tracking_script = "var myObject = {your object code}";
プッシュコードの前に、変数を作成するためにPHPコードをどこかに配置する必要があります
<script type="text/javascript">
<?php echo $tracking_script; ?>
</script>
次に、loadイベントを使用して、サーバー側のコードをGTMのdataLayerに適切に挿入できます。次の要点を使用できます。
次に、コールバック関数内に行を追加します。
var callBack = function(){
var myObject = myObject || {};
dataLayer = dataLayer || [];
dataLayer.Push(myObject);
};
またはjQueryを次のように使用します
$( window ).load(function() {
// Run code
var myObject = myObject || {};
dataLayer = dataLayer || [];
dataLayer.Push(myObject);
});
多くのユーザーが広告ブロッカーを使用しているため、Googleアナリティクスとデータベースの間の30%の不一致は正常です。