개발(Development)/React(리액트)

[React] Next.js 환경 구글 애널리틱스(GA) 적용 방법

카레유 2022. 9. 22. 15:19

# React + Next.js 환경 구글 애널리틱스(GA) 적용 방법

1) 단순 React 환경과 2) Next.js 환경에서 GA 적용 방법을 정리한다.

GA4 기준으로 작성했다.


1) 단순 React 환경(CSR)에서 Google Analytics 적용 방법

1. GA 스크립트 복사

- 애널리틱스 홈 > 관리 > 데이터 스트림 > 웹: 사이트 클릭 > Google태그: 태그안내보기 > 직접설치

 

2. GA 스크립트 적용

- public/index.html 파일의 <head> 내부에 스크립트 적용

끝.


2) Next.js 환경에서 Google Analytics 적용 방법

Next.js 환경의 경우, 추가 작업이 필요하다.

다행히 Next.js 를 만든 Vercel에서 해당 방법을 제공한다.

https://github.com/vercel/next.js/tree/canary/examples/with-google-analytics

 

위 경로의 코드를 그대로 적용해주면 된다.

( 딱 2군데만 건드려주면 된다. 아주 간단하다)

 

1. 측정 ID(G-XXXX) 확인

- 애널리틱스 홈 > 관리 > 데이터 스트림 > 웹: 사이트 클릭 > 스트림세부정보:측정ID

 

2. /lib/gtag.js 파일 생성

- /lib 경로에 아래와 같이 gtag.js 파일을 만들고,

- GA_TRACKING_ID 변수에 측정 ID를 넣어준다.

export const GA_TRACKING_ID = "G-XXXX아이디";  // 측정ID 설정: .env 파일로 관리해도된다.

// https://developers.google.com/analytics/devguides/collection/gtagjs/pages
export const pageview = (url) => {
  window.gtag('config', GA_TRACKING_ID, {
    page_path: url
  });
};

// https://developers.google.com/analytics/devguides/collection/gtagjs/events
export const event = ({ action, category, label, value }) => {
  window.gtag('event', action, {
    event_category: category,
    event_label: label,
    value: value
  });
};

 

3. _app.ts 파일에 스크립트 적용

/pages/_app.tsx 에 아래의 코드를 그대로 적용해준다.

import '../styles/globals.css';
import type { AppProps } from 'next/app';

import { useEffect } from 'react';
import Script from 'next/script';
import { useRouter } from 'next/router';
import * as gtag from '../lib/gtag';
import Head from 'next/head';

function MyApp({ Component, pageProps }: AppProps) {
  // GA 설정 시작
  const router = useRouter();
  useEffect(() => {
    const handleRouteChange = (url: any) => {
      gtag.pageview(url);
    };
    router.events.on('routeChangeComplete', handleRouteChange);
    router.events.on('hashChangeComplete', handleRouteChange);
    return () => {
      router.events.off('routeChangeComplete', handleRouteChange);
      router.events.off('hashChangeComplete', handleRouteChange);
    };
  }, [router.events]);
  // GA 설정 끝

  return (
    <>
      {/* GA 설정 시작 */}
      {/* Global Site Tag (gtag.js) - Google Analytics */}
      <Script strategy="afterInteractive" src={`https://www.googletagmanager.com/gtag/js?id=${gtag.GA_TRACKING_ID}`} />
      <Script
        id="gtag-init"
        strategy="afterInteractive"
        dangerouslySetInnerHTML={{
          __html: `
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag('js', new Date());
        gtag('config', '${gtag.GA_TRACKING_ID}', {
          page_path: window.location.pathname,
        });
      `
        }}
      />
      {/* GA 설정 끝 */}
      
      <Component {...pageProps} />
    </>
  );
}

export default MyApp;

 

기본 끝!

여기까지만 설정해주면, 기본 통계는 모두 적용된다.


클릭 이벤트 등에 추가 태그를 적용하려면

버튼 클릭 이벤트 핸들러 함수 등에서 아래와 같이 적용해주면 된다.

gtag.event({
      action: '액션 이름',
      category: '카케고리 이름',
      label: '라벨 이름',
})

 

진짜 끝!