Skip to content

Commit 570366e

Browse files
authored
Merge pull request #156 from Team-INSERT/feat/ga
feat : 구글 애널리틱스 설정
2 parents ca1965c + 46b627e commit 570366e

File tree

5 files changed

+70
-0
lines changed

5 files changed

+70
-0
lines changed

gtag.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
/// <reference types="gtag.js" />
2+
3+
declare module "gtag.js";

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
"@semantic-release/npm": "^9.0.1",
7676
"@semantic-release/release-notes-generator": "^10.0.3",
7777
"@types/graphql": "^14.5.0",
78+
"@types/gtag.js": "^0.0.18",
7879
"@types/jest": "^29.2.4",
7980
"@types/react-beautiful-dnd": "^13.1.3",
8081
"@types/react-slick": "^0.23.12",

src/app/layout.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import Provider from "@/provider/MainProvider";
22
import React from "react";
3+
import * as gtag from "@/hooks/useGtag";
4+
import Script from "next/script";
35

46
export const metadata = {
57
title: "BSM",
@@ -11,8 +13,27 @@ export default function RootLayout({
1113
}: {
1214
children: React.ReactNode;
1315
}) {
16+
gtag.useGtag();
1417
return (
1518
<html lang="en">
19+
<Script
20+
strategy="afterInteractive"
21+
src={`https://www.googletagmanager.com/gtag/js?id=${gtag.GA_TRACKING_ID}`}
22+
/>
23+
<Script
24+
id="gtag-init"
25+
strategy="afterInteractive"
26+
dangerouslySetInnerHTML={{
27+
__html: `
28+
window.dataLayer = window.dataLayer || [];
29+
function gtag(){dataLayer.push(arguments);}
30+
gtag('js', new Date());
31+
gtag('config', '${gtag.GA_TRACKING_ID}', {
32+
page_path: window.location.pathname,
33+
});
34+
`,
35+
}}
36+
/>
1637
<body>
1738
<Provider>{children}</Provider>
1839
</body>

src/hooks/useGtag.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { useRouter } from "next/router";
2+
import { useEffect } from "react";
3+
4+
export const GA_TRACKING_ID = "G-J8DK7F6M37";
5+
6+
export const pageview = (url: URL) => {
7+
window.gtag("config", GA_TRACKING_ID, {
8+
page_path: url,
9+
});
10+
};
11+
12+
export const event = (
13+
action: Gtag.EventNames,
14+
{ event_category, event_label, value }: Gtag.EventParams,
15+
) => {
16+
window.gtag("event", action, {
17+
event_category,
18+
event_label,
19+
value,
20+
});
21+
};
22+
23+
export const useGtag = () => {
24+
const router = useRouter();
25+
26+
useEffect(() => {
27+
if (process.env.NODE_ENV === "development") return;
28+
29+
const handleRouteChange = (url: URL) => {
30+
pageview(url);
31+
};
32+
33+
router.events.on("routeChangeComplete", handleRouteChange);
34+
router.events.on("hashChangeComplete", handleRouteChange);
35+
return () => {
36+
router.events.off("routeChangeComplete", handleRouteChange);
37+
router.events.off("hashChangeComplete", handleRouteChange);
38+
};
39+
}, [router.events]);
40+
};

yarn.lock

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1832,6 +1832,11 @@
18321832
dependencies:
18331833
graphql "*"
18341834

1835+
"@types/gtag.js@^0.0.18":
1836+
version "0.0.18"
1837+
resolved "https://registry.yarnpkg.com/@types/gtag.js/-/gtag.js-0.0.18.tgz#d6bc7cb1acc64ff4f4e4be918d401c53fe9ccf20"
1838+
integrity sha512-GJxnIvuXuVhKaHfsOdzGipoOoXq72y3mdcncc9h6i6E7nlz89zBEj2wrLM7bqO5Xk9Lm2B94MwdQsSwRlaPSWw==
1839+
18351840
"@types/hast@^2.0.0":
18361841
version "2.3.8"
18371842
resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.8.tgz#4ac5caf38b262b7bd5ca3202dda71f0271635660"

0 commit comments

Comments
 (0)