Next.js에서 GTM(Google 태그 관리자)을 통해 Google Analytics 추가
관심 있는 사람들을 위해 스택은 다음과 같습니다.
문제
GTM이 이미 설정되어 있으므로 GTM 스크립트를 삽입하기만 하면 된다고 생각했습니다. 그래서 우리는 했습니다!
스크립트가 로드되었는지 ✅, Chrome ✅용 Google 태그 관리자 확장 프로그램을 사용하여 GTM이 올바르게 로드되었는지도 확인했습니다.
그런 다음 출시 전 체크리스트를 완료한 후 PROD로 푸시하고 DEPLOY를 실행했습니다 🚀😎
다음날 우리는 Google Analytics를 모니터링하고 인덱스 페이지(경로: /
)의 모든 데이터를 발견하여 조사를 시작했고 다음을 발견했습니다.
해결책
하루 종일 인터넷에서 조사하고 읽은 후 이 문제를 해결하는 방법에 대한 다양한 제안을 찾은 후 아래에서 기존 Google 애널리틱스 태그를 사용한 구현을 보여줍니다.
pages/_document.tsx
에 GMT 스크립트 삽입:
<>
{/* Google Tag Manager */}
<script
dangerouslySetInnerHTML={{
__html: `(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_ID}');`,
}}
/>
{/* End Google Tag Manager */}
{/* Google Tag Manager (noscript) */}
<noscript
dangerouslySetInnerHTML={{
__html: `<iframe src="https://www.googletagmanager.com/ns.html?id=${GTM_ID}" height="0" width="0" style="display:none;visibility:hidden"></iframe>`,
}}
/>
{/* End Google Tag Manager (noscript) */}
</>
교체/정의GTM_ID
를 기억하십시오!
그런 다음 페이지 보기 유틸리티 함수utils/gtm.ts
를 만듭니다.
export const GTMPageView = (url: string) => {
interface PageEventProps {
event: string;
page: string;
}
const pageEvent: PageEventProps = {
event: 'pageview',
page: url,
};
//@ts-ignore
window && window.dataLayer && window.dataLayer.push(pageEvent);
return pageEvent;
};
그런 다음 모든 페이지에서 "pageview"이벤트를 실행해야 합니다. useEffectpages/_app.tsx
를 사용하여 라우터에 리스너(routeChangeComplete)를 설정하면 됩니다.
import { AppProps } from 'next/app';
import Router from 'next/router';
import React, {useEffect } from 'react';
import { GTMPageView } from '../utils/gtm';
function MyApp({ Component, pageProps }: AppProps) {
// ...
// Initiate GTM
useEffect(() => {
const handleRouteChange = (url: string) => GTMPageView(url);
Router.events.on('routeChangeComplete', handleRouteChange);
return () => {
Router.events.off('routeChangeComplete', handleRouteChange);
};
}, []);
// ...
}
export default MyApp;
거의 완료되었습니다. 이제 GA 태그를 실행할 새 맞춤 이벤트를 추가해야 합니다.
GTM 콘솔에서:
<>
{/* Google Tag Manager */}
<script
dangerouslySetInnerHTML={{
__html: `(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_ID}');`,
}}
/>
{/* End Google Tag Manager */}
{/* Google Tag Manager (noscript) */}
<noscript
dangerouslySetInnerHTML={{
__html: `<iframe src="https://www.googletagmanager.com/ns.html?id=${GTM_ID}" height="0" width="0" style="display:none;visibility:hidden"></iframe>`,
}}
/>
{/* End Google Tag Manager (noscript) */}
</>
export const GTMPageView = (url: string) => {
interface PageEventProps {
event: string;
page: string;
}
const pageEvent: PageEventProps = {
event: 'pageview',
page: url,
};
//@ts-ignore
window && window.dataLayer && window.dataLayer.push(pageEvent);
return pageEvent;
};
import { AppProps } from 'next/app';
import Router from 'next/router';
import React, {useEffect } from 'react';
import { GTMPageView } from '../utils/gtm';
function MyApp({ Component, pageProps }: AppProps) {
// ...
// Initiate GTM
useEffect(() => {
const handleRouteChange = (url: string) => GTMPageView(url);
Router.events.on('routeChangeComplete', handleRouteChange);
return () => {
Router.events.off('routeChangeComplete', handleRouteChange);
};
}, []);
// ...
}
export default MyApp;
GTMPageView
.업데이트: 다른 대안
"기록 변경"트리거를 사용하여 동일한 결과를 얻을 수도 있습니다.
그게 다야! 행복한 추적 🙃
Reference
이 문제에 관하여(Next.js에서 GTM(Google 태그 관리자)을 통해 Google Analytics 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ornio/add-google-analytics-through-gtm-google-tag-manager-on-next-js-5e4f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)