DEV Community

Cover image for Google Tag Manager with Next.js (TypeScript/Bangla)
Muhid Hossain
Muhid Hossain

Posted on • Edited on

4

Google Tag Manager with Next.js (TypeScript/Bangla)

এই ব্লগটিতে আমরা শিখব কিভাবে Next.js প্রোজেক্টে গুগল ট্যাগ ম্যানেজার ইমপ্লিমেন্ট করতে হয়।

এজন্য আমাদের প্রয়োজন হবে,

  • Next.js প্রোজেক্ট
  • গুগল ট্যাগ ম্যানেজার অ্যাকাউন্ট

ধাপসমূহ

১/ .env ফাইলে গুগল ট্যাগ ম্যানেজার আইডি ডিফাইন করা
২/ pages ফোল্ডার এর মধ্যে _document.tsx ফাইল তৈরি করা
৩/ lib/gtm/index.tsx ফাইল তৈরি করে প্রয়োজনীয় ফাংশন ডিফাইন করা
৪/ _app.tsx ফাইলে রাউট পরিবর্তন ট্র্যাক করা

১ম ধাপঃ

রুট ডিরেক্টরিতে .env ফাইলর মধ্যে আপনার প্রোজেক্টের গুগল ট্যাগ ম্যানেজার আইডি অ্যাড করুন।

NEXT_PUBLIC_GOOGLE_ANALYTICS = GTM-XXXXXXX
view raw .env.gtm hosted with ❤ by GitHub

GTM-XXXXXXX এর স্থলে আপানর গুগল ট্যাগ ম্যানেজার আইডি লিখুন।

২য় ধাপঃ

pages ফোল্ডারের মধ্যে _document.tsx ফাইল তৈরি করে গুগল ট্যাগ ম্যানেজার কনফিগার করুন।

_document.tsx সম্পর্কে বিস্তারিত জানতে Next.js documentation পড়তে পারেন।

import Document, { Html, Head, Main, NextScript } from "next/document";
export default class MyDocument extends Document {
render() {
return (
<Html>
<Head>
<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', '${process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS}');
`,
}}
/>
</Head>
<body>
<noscript>
<iframe
src={`https://www.googletagmanager.com/ns.html?id=${process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS}`}
height="0"
width="0"
style={{ display: "none", visibility: "hidden" }}
/>
</noscript>
<Main />
<NextScript />
</body>
</Html>
);
}
}

সমস্যাঃ

গুগল ট্যাগ ম্যানেজার শুধুমাত্র পেইজ রিলোড করলে ট্যাগ ফায়ার করে। যেহেতু React/Next.js এরমতো সিঙ্গেল পেইজ অ্যাপ্লিকেশানে রাউট পরিবর্তন হলেও পেইজ রিলোড হয় না। ফলে প্রথমবার ওয়েবসাইটে ঢুকলে ট্যাগ ফায়ার হয় পরবর্তীতে রাউট পরিবর্তন করলেও ট্যাগ ফায়ার হয় না।

সমাধানঃ

এই সমস্যার থেকে পরিত্রান পাওয়ার জন্য আমাদেরকে ম্যানুয়াল ভাবে প্রতিবার রাউট পরিবর্তন হলে নিম্নউক্ত pageview ফাংশন কল করতে হবে এবং গুগল ট্যাগে হিস্টরি চেইঞ্জ ট্রিগার অ্যাড করতে হবে।

হিস্টরি চেইঞ্জে ট্রিগারঃ documentation

৩য় ধাপঃ

রুট ডিরেক্টরিতে lib/gtm ফোল্ডার তৈরি করে তার মধ্যে index.tsx ফাইল তৈরি করুন এবং pageviews এবং events ট্রাক করার জন্য কাস্টমে ফাংশন লিখুন।

declare global {
interface Window {
dataLayer: any;
}
}
export const pageview = (url) => {
window.dataLayer.push({
event: "pageview",
page: url,
});
};
view raw gtm_index.tsx hosted with ❤ by GitHub

৪য় ধাপঃ

এখন রাউট পরিবর্তনে pageview ফাংশন কল করার জন্য _app.tsx ফাইলে useEffect হুক ব্যবহার করুন।

import type { AppProps /*, AppContext */ } from "next/app";
import { useEffect } from "react";
import { useRouter } from "next/router";
import * as gtm from "../lib/gtm";
function MyApp({ Component, pageProps }: AppProps): JSX.Element {
const router = useRouter();
useEffect(() => {
router.events.on("routeChangeComplete", gtm.pageview);
return () => {
router.events.off("routeChangeComplete", gtm.pageview);
};
}, [router.events]);
return <Component {...pageProps} />;
}
export default MyApp;
view raw gtm_app.tsx hosted with ❤ by GitHub

ব্যাস হয়ে গেলো ইমপ্লিমেন্টেশন।

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay