> 구글 애널리틱스 GA4 적용 (230710)
2023년 7월 1일부터 유니버셜 애널리틱스 속성이 데이터를 수집하지 않습니다.
대신 Google 애널리틱스 4 속성을 만드는 것이 좋습니다.
구글 애널리틱스가 드디어 결국 GA4를 사용해야 하는 날짜가 되었고
그에 따라 기존 유니버셜 ID를 추적했던 react-ga 라이브러리에서 react-ga4로 변경하였다.
https://www.npmjs.com/package/react-ga4
다행히도 변경사항이 그리 많지않아 기존 글에서 수정만 하였다!
1. 리액트와 구글 애널리틱스 연결하기
배포할 때 포함되는 dependencies에 설치
$yarn add react-ga4
$npm install react-ga4 --save
2. 추적 ID를 환경변수로 저장하기
구글 애널리틱스에서 계정 및 속성 추가를 통해 생성한 추적 ID를 복사하여 환경 변수로 관리해준다.
env production파일에만 환경변수를 추가하여 운영서버에서만 적용되도록 하였다.
# .env.prod
REACT_APP_GOOGLE_ANALYTICS=G-BQXxxxxxxx
3. index.js에 초기화 코드를 작성
/* index.js */
import ReactGA from "react-ga4";
// 구글 애널리틱스 운영서버만 적용
if (process.env.REACT_APP_GOOGLE_ANALYTICS) {
ReactGA.initialize(process.env.REACT_APP_GOOGLE_ANALYTICS);
}
4. react router와 통합하기
리액트는 SPA로 하나의 html만 로드하기 때문에 페이지별 방문자 수를 추적하기 어렵다.
그렇기 때문에 react-router-dom 라이브러리를 설치하여 내장된 HOC 기능으로 URL 변경을 감지하는 것이다.
이 정보를 구글 애널리틱스에 전달하면 추적이 가능해진다.
4-1. URL 변경을 감지하는 컴포넌트를 새로 생성
react-ga4에서 ReactGA.pageview()가 deprecated되었으므로 ReactGA.send("pageview")로 대체하자
/* src/RouteChangeTracker.js */
import { useEffect, useState } from "react";
import { useLocation } from "react-router-dom";
import ReactGA from "react-ga4";
/**
* uri 변경 추적 컴포넌트
* uri가 변경될 때마다 pageview 이벤트 전송
*/
const RouteChangeTracker = () => {
const location = useLocation();
const [initialized, setInitialized] = useState(false);
// 구글 애널리틱스 운영서버만 적용
useEffect(() => {
if (process.env.REACT_APP_GOOGLE_ANALYTICS) {
ReactGA.initialize(process.env.REACT_APP_GOOGLE_ANALYTICS);
setInitialized(true);
}
}, []);
// location 변경 감지시 pageview 이벤트 전송
useEffect(() => {
if (initialized) {
ReactGA.set({ page: location.pathname });
ReactGA.send("pageview");
}
}, [initialized, location]);
};
export default RouteChangeTracker;
4-2. 이 컴포넌트를 App.tsx에 연결하면 완성
/* App.tsx */
import { BrowserRouter, Routes, Route } from "react-router-dom";
import RouteChangeTracker from "./RouteChangeTracker";
const App = () => {
RouteChangeTracker();
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<MainPage />} />
</Routes>
</BrowserRouter>
);
};
5. 완성은 개뿔.. 무조건 아래 오류가 뜬다
4-2에서의 이슈인데,
RouteChangeTracker.js에서 useLocation을 사용하려면
해당 컴포넌트가 반드시 BrowserRouter 안에 바인딩 되어야 한다는 뜻이다.
useLocation() may be used only in the context of a <Router> component.
6. 해결
에러 내용대로 App.tsx를 묶어주는 BrowserRouter를 한층 더 상위인 index.js로 이동해주어 해결..!
좀더 나은 해결책을 고민해 볼 예정이다 🤔
/* App.tsx */
import { Routes, Route } from "react-router-dom"; // BrowserRouter를 상위 index.js로 이동
import RouteChangeTracker from "./RouteChangeTracker";
const App = () => {
RouteChangeTracker();
return (
// BrowserRouter를 상위 index.js로 이동
<Routes>
<Route path="/" element={<MainPage />} />
</Routes>
);
};
[참조 URL]
https://github.com/PriceRunner/react-ga4#readme
https://velog.io/@zero-black/Google-analytics-4-with-React
https://fromnowwon.tistory.com/entry/react-ga-google-analytics
'React.js' 카테고리의 다른 글
react PDF 다운로드 (2) | 2023.10.11 |
---|---|
React 모달 밖 영역 클릭시 닫기 (2가지 방법) (0) | 2023.10.10 |
Axios 호출시, Proxy를 이용하여 크로스브라우징(CORS) 해결하기 (0) | 2023.02.01 |
패키지 업데이트하며 발생한 에러 정리 (0) | 2022.11.30 |
운영서버에 SEO 구현이 안되던 이슈 (react-snap) (0) | 2022.04.08 |
댓글