Google アナリティクスgtag.jsのイベントをサイトに埋め込んでいます。
script1 を <head>内に、 script2 を<body>内に埋め込んだところ、data-gaevent=""を埋め込んだaタグをクリックした際のイベントは発火し、Googleアナリティクスのリアルタイムページや、DebugView.からカウントが確認できています。
ところが、例えばトップページからイベントを仕込んであるaタグをクリック→ページBへ遷移し、その後ブラウザバックでトップページに戻ろうとすると、console上では1度トップページへナビゲートされるのですが、その後すぐに現在のページ(ページB)にナビゲートされてしまい、結果戻るボタンが機能しない事態となっています。
期待する動作は、ページBからボタンを押したらトップページに遷移する、です。
ブラウザにjs系のプラグインを入れているとこのバグは起きないのですが、シークレットモードなどにすると発生します。
Script2を除外してもこの事象は起きません。
Script2にブラウザバックを選択された時のための分岐が必要なのでしょうか。
わかる方がいれば、教えてください。
script1
<!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-XXXXXXXXXX'); </script>
script2
/** * google analytics setting */ jQuery(function ($) { if (typeof gtag === "undefined") { return; } gtag("config", "G-XXXXXXXXXX", { transport_type: "beacon" }); $("a[data-gaevent]").on({ click: function (event) { var href = $(this).attr("href"); var transitioned = false; var is_page_transition = href[0] !== "#" && $(this).attr("target") !== "_blank"; if (is_page_transition) { event.preventDefault(); setTimeout(pageTransition, 1000); } function pageTransition() { if (!transitioned) { transitioned = true; location.href = href; } } var tagStrings = $(this).data("gaevent"); var tagCount = 0; var tagOutput; var isDone = false; tagOutput = tagStrings.split(/\s+/); tagCount = tagOutput.length - 1; for (var i = 0; i <= tagCount; i++) { if (i === tagCount) { isDone = true; } sendGA(tagOutput[i], isDone); } function sendGA(gaEventTag, isDone) { gtag("event", "click_a", { eventAction: gaEventTag, eventLabel: gaEventTag.replace(/-.*$/, ""), eventCategory: location.href.replace(/#.*$/, ""), hitCallback: function () { if (is_page_transition && isDone) { pageTransition(); } }, }); } }, }); });
あなたの回答
tips
プレビュー