
Published on April 02, 2023 by Eunbi.N
Google Analytics GA4 Frontend Web Analytics Performance
<script>
(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" });
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != "dataLayer" ? "&l=" + l : "";
j.async = true;
j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, "script", "dataLayer", "GTM-XXXXXXX");
</script>
document.getElementById("cta-button").addEventListener("click", function () {
gtag("event", "click", {
event_category: "engagement",
event_label: "header_cta",
value: 1,
});
});
window.addEventListener("load", function () {
const perfData = performance.getEntriesByType("navigation")[0];
gtag("event", "timing_complete", {
name: "page_load_time",
value: Math.round(perfData.loadEventEnd - perfData.fetchStart),
});
});
// 구매 완료
gtag("event", "purchase", {
transaction_id: "T12345",
value: 25.42,
currency: "KRW",
items: [
{
item_id: "SKU123",
item_name: "프리미엄 티셔츠",
category: "Apparel",
quantity: 1,
price: 25.42,
},
],
});
// 장바구니 추가
gtag("event", "add_to_cart", {
currency: "KRW",
value: 15.25,
items: [{ item_id: "SKU456", item_name: "스니커즈" }],
});
// 개발 환경 디버깅
if (process.env.NODE_ENV === "development") {
window.gtag = function () {
console.log("GA Event:", arguments);
};
}
// 이벤트 검증
function validateEvent(eventName, parameters) {
const requiredParams = {
purchase: ["transaction_id", "value"],
add_to_cart: ["currency", "value"],
};
const required = requiredParams[eventName] || [];
const missing = required.filter((param) => !parameters[param]);
if (missing.length > 0) {
console.warn(`Missing parameters for ${eventName}:`, missing);
}
}
let maxScroll = 0;
const scrollMilestones = [25, 50, 75, 100];
window.addEventListener(
"scroll",
throttle(function () {
const scrollPercent = Math.round(
(window.scrollY / (document.body.scrollHeight - window.innerHeight)) * 100
);
scrollMilestones.forEach((milestone) => {
if (scrollPercent >= milestone && !window[`scroll_${milestone}_sent`]) {
gtag("event", "scroll", {
event_category: "engagement",
event_label: `${milestone}%`,
value: milestone,
});
window[`scroll_${milestone}_sent`] = true;
}
});
}, 250)
);
// plugins/analytics.js
export default {
install(app) {
app.provide("analytics", {
trackEvent: (action, category, label, value) => {
gtag("event", action, {
event_category: category,
event_label: label,
value: value,
});
},
});
},
};