A lightweight Next library to implement custom Google Tag Manager events.
Extends @phntms/react-gtm with native support for Next.JS 12, utilizing the new Script Component to automatically prioritize loading of third-party scripts to improve performance.
Install this package with npm.
npm i @phntms/next-gtm| Property | Type | Default | Notes |
|---|---|---|---|
| id | string |
undefined | ID that uniquely identifies GTM Container. Example format: GTM-xxxxxx. |
| disable | boolean |
false | Used to disable tracking events (isGTM=false only). Use if you want user to consent to cookies first |
| isGTM | boolean |
false | Loads the gtag.js script by default (legacy behaviour - compatible with UA/GA4/GTM), else, loads gtm.js. |
| GTMAuth | string |
undefined | (isGTM = true required) Optional parameter to load a non-default GTM environment, e.g. for testing GTM. |
| GTMPreview | string |
undefined | (isGTM = true required) Optional parameter to load a non-default GTM environment, e.g. for testing GTM. |
To initialize GTM, add TrackingHeadScript to the head of the page.
This package utilizes next/script, which means you can't place it inside a next/head. Further, TrackingHeadScript should not be used in pages/_document.js as next/script has client-side functionality to ensure loading order.
The isGTM, GTMAuth and GTMPreview optional properties are a backwards-compatible update to provide multiple GTM environment support to this library. Using multiple GTM container environments allow developers to test different GTM config versions on a preview codebase before publishing the change to the production GTM container.
- If the project is known to be using GTM - the
isGTMshould be set totrueregardless of the environment (the defaultfalsewill continue to function though). - Typically you want to set the
GTMAuthandGTMPreviewproperties (obtained from the GTM preview environment script snippet) via optional environment variables in the applications' preview environments - when left as undefined - GTM will default to the master (production) container config.
Example usage:
import type { AppProps } from "next/app";
import { TrackingHeadScript } from "@phntms/next-gtm";
const GA_TRACKING_ID = process.env.NEXT_PUBLIC_GA_TRACKING_ID || "";
const App = ({ Component }: AppProps) => (
<>
<TrackingHeadScript id={GA_TRACKING_ID} isGTM={true} />
<Component />
</>
);
export default App;Note: If used alongside any cookie consent scripts, <TrackingHeadScript /> must be loaded after.
For how to use trackEvent(), enableTracking(), learn more about EventDataProps and how this library extends window.dataLayer, please reference @phntms/react-gtm.
Want to get involved, or found an issue? Please contribute using the GitHub Flow. Create a branch, add commits, and open a Pull Request or submit a new issue.
Please read CONTRIBUTING for details on our CODE_OF_CONDUCT, and the process for submitting pull requests to us!