웹 사이트 및 앱의 트래픽, 사용자의 행동을 분석하는 데 사용되는 google의 무료 웹 분석 도구(https://analytics.google.com/)
웹 사이트나 앱의 성능 향상
에 도움을 준다.사용자 경험을 개선
할 수 있다.트래픽 분석
: 웹 사이트나 앱에 어떤 트래픽 소스에서 사용자가 유입되는지 추적할 수 있다,페이지 분석
: 어떤 페이지나 화면이 사용자에게 가장 많이 방문되는지 어떤 컨텐츠가 인기 있는지 파악할 수 있다.전환률 분석
: 원하는 동작(가입, 다운로드 등)을 완료한 사용자의 비율을 계산하고 개선 방법을 고려할 수 있다. https://analytics.google.com/analytics
yarn add -D @types/gtag.js
"types": ["@types/gtag.js"],
pageview 함수
event 함수
export const GA_TRACKING_ID = process.env.NEXT_PUBLIC_GA_ID;
export const pageview = (url: URL | string) => {
if (process.env.NODE_ENV !== "development") {
window.gtag("config", GA_TRACKING_ID as string, {
page_path: url,
});
}
};
type gtagEvent = {
action: string;
category: string;
label: string;
value: number;
};
export const event = ({ action, category, label, value }: gtagEvent) => {
if (process.env.NODE_ENV !== "development") {
window.gtag("event", action, {
event_category: category,
event_label: label,
value: value,
});
}
};
import { pageview } from "@/lib/gtag";
import Script from "next/script";
import { useEffect } from "react";
import { usePathname } from "next/navigation";
function GoogleAnalytics({ GA_TRACKING_ID }: { GA_TRACKING_ID?: string }) {
const pathname = usePathname();
useEffect(() => {
if (pathname) {
pageview(pathname);
}
}, [pathname]);
if (process.env.NODE_ENV !== "production") {
return null;
}
return (
<div className="container">
<Script
strategy="afterInteractive"
src={`https://www.googletagmanager.com/gtag/js?id=${GA_TRACKING_ID}`}
/>
<Script id="google-analytics" strategy="afterInteractive">
{`
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '${GA_TRACKING_ID}');
`}
</Script>
</div>
);
}
export default GoogleAnalytics;
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body>
<GoogleAnalytics GA_TRACKING_ID={process.env.NEXT_PUBLIC_GA_ID} />
<NextProvider>
<NextLayout>{children}</NextLayout>
</NextProvider>
</body>
</html>
);
}
const toggleLike = async () => {
// 찜하기 / 찜 취소
if (session?.user && store) {
try {
...생략
event({
action: "click_like",
category: "like",
label: like.status === 201 ? "create_like" : "delete_like",
value: storeId,
});
refetch();
} catch (e) {
console.log(e);
}
} else if (status === "unauthenticated") {
toast.warn("로그인 후 이용해주세요.");
event({
action: "click_like",
category: "like",
label: "need_login_like",
value: storeId,
});
}
};
여기까지 설정은 끝이났고 적용이 잘 되었는지 확인해봅시다!
먼저 event를 적용한 찜 하기 기능을 테스트 하기 위해 가게 하나를 찜하고 찜을 삭제한 후
Google 애널리틱스의 프로젝트 보고서를 확인하니 사용자 수가 측정된 것을 확인할 수 있었습니다.
찜하기와 찜삭제 기능이 몇 번 발생했는지 측정되었습니다!