• Stars
    star
    298
  • Rank 138,789 (Top 3 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created over 1 year ago
  • Updated 24 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

๐Ÿ”ธ Google Analytics & Ads integration made easy

Nuxt Gtag module

Nuxt Gtag

npm version

Nuxt 3 module to integrate Google Analytics 4.

Features

Setup

# pnpm
pnpm add -D nuxt-gtag

# npm
npm i -D nuxt-gtag

Basic Usage

Add nuxt-gtag to the modules section of your Nuxt configuration and provide your Google Analytics measurement ID.

// `nuxt.config.ts`
export default defineNuxtConfig({
  modules: ['nuxt-gtag'],

  gtag: {
    id: 'G-XXXXXXXXXX'
  }
})

Done! Google Analytics will now run in your application's client.

Note

Ensure that the Enhanced measurement feature is enabled to allow Gtag to automatically track page changes based on browser history events in Nuxt.

To enable this feature:

  1. Go to the GA4 reporting view and click on โ€œAdminโ€
  2. Select โ€œData Streamsโ€ under the โ€œPropertyโ€ column.
  3. Click on your web data stream.
  4. Next, toggle the switch button near โ€œEnhanced measurementโ€.

Configuration

All supported module options can be configured using the gtag key in your Nuxt configuration:

export default defineNuxtConfig({
  modules: ['nuxt-gtag'],

  gtag: {
    id: 'G-XXXXXXXXXX',
    config: {
      page_title: 'My Custom Page Title'
    }
  }
})

Consent Management

If you want to disable tracking by default, you can set the initialConsent option to false. This will prevent the gtag.js script from loading until the user has consented to tracking.

export default defineNuxtConfig({
  modules: ['nuxt-gtag'],

  gtag: {
    id: 'G-XXXXXXXXXX',
    initialConsent: false
  }
})

To manually manage consent, you can use the useGtagConsent composable to set the consent state, e.g. after the user has accepted your cookie policy.

<script setup lang="ts">
function acceptTracking() {
  useGtagConsent({ hasConsent: true })
}
</script>

<template>
  <button @click="acceptTracking">
    Accept Tracking
  </button>
</template>

Runtime Config

Alternatively, leveraging automatically replaced public runtime config values by matching environment variables at runtime, set your desired option in your project's .env file:

# Sets the `gtag.id` module option
NUXT_PUBLIC_GTAG_ID=G-XXXXXXXXXX

With this setup, you can omit the gtag key in your Nuxt configuration if you only want to set the measurement ID.

Module Options

Option Type Default Description
id string undefined The Google Analytics measurement ID.
config Record<string, any> {} The configuration parameters to be passed to gtag.js on initialization.
initialConsent boolean true Whether to initially consent to tracking.
loadingStrategy 'async' | 'defer' 'defer' The loading strategy to be used for the gtag.js script.

Composables

As with other composables in the Nuxt 3 ecosystem, they are auto-imported and can be used in your application's components.

useGtag

The useGtag composable is SSR-safe and can be used to call any of the gtag.js methods.

// SSR-ready
const gtag = useGtag()
gtag(
  // <command>,
  // <command-parameters>
)

โ„น๏ธ Since the Gtag instance is available in the client only, any gtag() (assuming the variable from above) calls executed on the server will have no effect.

Type Declarations

function useGtag(): {
  (command: 'config', targetId: string, config?: Record<string, any>): void
  (command: 'event', eventName: string, eventParams?: Record<string, any>): void
  (command: 'set', targetId: string, config: string | boolean | Record<string, any>): void
  (command: 'set', config: Record<string, any>): void
  (command: 'get', targetId: string, fieldName: string, callback?: (field?: string | Record<string, any>) => void): void
  (command: 'consent', consentArg: string, consentParams: Record<string, any>): void
  (command: 'js', config: Date): void
}

Example

The following event command fires the event screen_view with two parameters: app_name and screen_name.

// SSR-ready
const gtag = useGtag()
gtag('event', 'screen_view', {
  app_name: 'My App',
  screen_name: 'Home'
})

useGtagConsent

If you want to manually manage consent, i.e. for GDPR compliance, you can use the useGtagConsent composable to set the consent state. This composable accepts a single argument, an object with the following properties:

  • hasConsent (optional): Whether to accept or decline the consent. Defaults to true.
  • id (optional): In case you want to initialize a custom Gtag ID. Make sure to set initialConsent to false in the module options beforehand.

If the user has consented, the gtag.js script will be loaded and tracking will begin.

This is only necessary if you have disabled the initialConsent option.

useGtagConsent({
  hasConsent: true
})

โ„น๏ธ Since the Gtag instance is available in the client only, executing the composable on the server will have no effect.

Type Declarations

interface UseGtagConsentOptions {
  /**
   * Whether to accept or decline the consent.
   *
   * @default true
   */
  hasConsent?: boolean
  /**
   * In case you want to initialize a custom Gtag ID. Make sure to set
   * `initialConsent` to `false` in the module options beforehand.
   */
  id?: string
}

function useGtagConsent(options: UseGtagConsentOptions): void

useTrackEvent

Track your defined goals by passing the following parameters:

  • The name of the recommended or custom event
  • A collection of parameters that provide additional information about the event (optional)

โ„น๏ธ Since the Gtag instance is available in the client only, executing the composable on the server will have no effect.

Type Declarations

function useTrackEvent(
  eventName: string,
  eventParams?: Record<string, any>
): void

Example

For example, the following is an event called login with a parameter method:

// Tracks the `login` event
useTrackEvent('login', {
  method: 'Google'
})

๐Ÿ’ป Development

  1. Clone this repository
  2. Enable Corepack using corepack enable
  3. Install dependencies using pnpm install
  4. Run pnpm run dev:prepare
  5. Start development server using pnpm run dev

Credits

License

MIT License ยฉ 2023-present Johann Schopplich

More Repositories

1

unlazy

๐Ÿชง Universal lazy loading library for placeholder images leveraging native browser APIs
TypeScript
736
star
2

nuxt-api-party

๐Ÿฌ Securely connect to any API with a server proxy and generated composables
TypeScript
247
star
3

kirby-vue3-starterkit

โœจ Kirby + Vue SPA starter: automatic routing, i18n, SEO and more!
PHP
207
star
4

unrested

๐Ÿšฅ Minimal, type-safe REST client using JS proxies (36 loc)
TypeScript
158
star
5

nuxt-prepare

๐ŸฆŽ Build actions for Nuxt
TypeScript
96
star
6

kirby-blurry-placeholder

๐Ÿ–ผ Blurry image placeholders for better UX
PHP
65
star
7

kirby-headless-starter

๐Ÿฆญ Headless-first Kirby starter with bearer token authentication and KQL utilities
PHP
64
star
8

pdfjs-serverless

๐Ÿชญ Serverless build of PDF.js for Deno, workers, and other nodeless environments
TypeScript
53
star
9

kirby-nuxt-starterkit

๐Ÿ’š Kirby's sample site โ€“ ported to Nuxt and Kirby Query Language
Vue
52
star
10

nuxt-vitalizer

๐Ÿชฟ Instantly better LCP scores in Google Lighthouse
TypeScript
52
star
11

kirbyup

๐Ÿ†™ Official bundler for Kirby Panel plugins
TypeScript
51
star
12

nitro-test-utils

๐Ÿงช Testing environment and utilities for Nitro
TypeScript
51
star
13

petite-vue-starter

๐Ÿฆ‹ Petite Vue + Vite + UnoCSS + TypeScript Starter
HTML
47
star
14

vue-signals

๐Ÿ“ถ Solid and Angular signals for Vue.js
TypeScript
46
star
15

loadeer

๐ŸฆŒ Tiny, performant, SEO-friendly lazy loading library. Deprecated, please use https://unlazy.byjohann.dev
TypeScript
44
star
16

kirby-vue-lightkit

โ›บ๏ธ Minimal Kirby + Vue starter: File-based routing, UnoCSS, SEO & more
TypeScript
43
star
17

nuxt-kql

๐Ÿซง Kirby's Query Language API for Nuxt
TypeScript
42
star
18

kirby-locked-pages

๐Ÿ” Password-protect pages, Panel blueprint included
PHP
41
star
19

kirby-writer-marks

Custom marks for Kirby's writer field โ€“ footnote mark included
JavaScript
35
star
20

kirby-content-translator

๐ŸŒ Moved to: https://kirby.tools/content-translator
PHP
34
star
21

kirby-punctuation-section

โœ’๏ธ Insert punctuation marks into your text with a single click
Vue
33
star
22

apiful

โœด๏ธ Unified, pluggable API client management for ofetch, route building and typed OpenAPI clients
TypeScript
33
star
23

cacao-kit-frontend

๐Ÿซ Best practice Nuxt and KQL starter for your headless Kirby CMS
TypeScript
30
star
24

kirby-headless

๐Ÿฆญ Kirby, but headless first with bearer token authentication and KQL utilities
PHP
30
star
25

kirby-vite-unocss-kit

๐ŸŽจ Minimal Vite + UnoCSS + Kirby integration
PHP
29
star
26

kirby-helpers

๐Ÿฌ Dotenv support, meta tag generation and more for Kirby CMS
PHP
26
star
27

animere

๐Ÿƒ CSS-driven scroll-based animations
TypeScript
26
star
28

unocss-cli

๐ŸŽจ Deprecated โ€” moved to @unocss/cli
TypeScript
25
star
29

kirby-algolia-docsearch

๐Ÿ”ฆ Index and search your Kirby site with Algolia DocSearch
PHP
25
star
30

kirby-hashed-assets

๐Ÿ›ท File name hashes support for css() and js() helpers. Without rewrite rules!
PHP
22
star
31

kirby-highlighter

๐ŸŒ Server-side syntax highlighting for the code block & KirbyText
PHP
20
star
32

vue-stickers

๐Ÿฆ One component, multiple fancy sticker variants
Vue
20
star
33

kirbylog

๐Ÿชƒ Zero-dependency global `kirbylog()` helper for any content
PHP
20
star
34

buldy

๐ŸŽˆ Modern CSS framework distilled from the best of larger frameworks
SCSS
18
star
35

kirby-serp-preview

๐Ÿ” Kirby Panel plugin for search engine result page previews
PHP
16
star
36

duecss

๐Ÿงถ Minimal CSS framework built upon & extended by UnoCSS
CSS
14
star
37

nuxt3-starter

๐ŸŒฌ Opinionated Nuxt 3 starter โ€“ incl. modals and more
Vue
14
star
38

plain-spa

๐Ÿฆข Modern SPA deployable as-is without any bundlers
JavaScript
14
star
39

kirbyuse

๐ŸŽ›๏ธ Collection of Vue Composition utilities and typed `window.panel` for Kirby CMS
TypeScript
14
star
40

tokenx

๐Ÿ“ GPT token estimation and context size utilities without a full tokenizer
TypeScript
13
star
41

kirby-types

๐ŸŽŠ A Collection of TypeScript types for the Kirby CMS
TypeScript
12
star
42

unacl

๐Ÿ™…โ€โ™€๏ธ๐Ÿ™†โ€โ™‚๏ธ Minimal, type-safe and reactive access control
TypeScript
12
star
43

cacao-kit-backend

๐Ÿซ Headless Kirby instance for the Cacao Kit frontend
PHP
12
star
44

vue-unquery

๐Ÿชบ Lightweight data management for Vue in suspense & non-suspense contexts
TypeScript
12
star
45

nuxt-i18n

๐Ÿ’ฌ Minimal module for i18n with locale auto-imports & localized routing
TypeScript
11
star
46

raster-sass

๐Ÿ“๏ธ Sass port of the Raster Grid System by Rasmus Andersson
SCSS
9
star
47

kirby-copilot

๐Ÿช AI-powered content generation for Kirby CMS
Vue
9
star
48

johannschopplich.com

๐Ÿ‚ My personal website โ€” built with Kirby & Vite
TypeScript
8
star
49

rollup-pluginkit

A boilerplate for a Kirby panel plugin using Rollup bundler
JavaScript
7
star
50

resultx

๐Ÿค Minimalist, strongly-typed result pattern for TypeScript
TypeScript
6
star
51

unjwt

๐Ÿ†“ Easy creation and verification of JWTs for Node.js, browser and workers
TypeScript
6
star
52

vue-i18n

๐ŸŒ Lightweight internationalization plugin for Vue
TypeScript
6
star
53

nuxt-plausible

๐ŸŽŸ๏ธ Nuxt 3 module to natively integrate Plausible analytics
TypeScript
4
star
54

kirby-seo-audit

๐Ÿƒ State-of-the-art SEO analysis for Kirby CMS
Vue
4
star
55

hashup

๐Ÿ”ข CLI to hash your Kirby build assets
TypeScript
3
star
56

kirby-modern

๐Ÿš€ Kirby starterkit enhanced with public folder setup, env variables, static site generator & more
PHP
3
star
57

utils

๐Ÿงฌ A collection of utilities for my projects
TypeScript
3
star
58

dachsbau-backend

๐Ÿฆก Kirby headless backend for dachsbau-tautenhain.de
PHP
3
star
59

a11y-kirby-vue-starterkit

โ™ฟ Kirby + Vue starterkit w/ accessible routing & SEO-friendliness
PHP
3
star
60

realtroll.de

๐ŸŽฎ Website fรผr den Spieleentwickler real Troll
CSS
3
star
61

kirby-vite

โšก๏ธ Vite integration for Kirby CMS
PHP
3
star
62

wordle-pwa

๐ŸฆŠ Wordle app to fork and customize for your friends
Vue
3
star
63

11th

๐Ÿงฐ Generic Eleventy starterkit with an emphasis on hashing assets and SEO
JavaScript
2
star
64

git-webhooks-auto-deployment

๐Ÿค– Auto deploys with one script. Compatible with GitHub, GitLab, Gitea and direct URL.
PHP
2
star
65

deno-deploy-docker

๐Ÿฆ• Run your Deno Deploy scripts in a Docker container
JavaScript
2
star
66

nitro-starter

๐Ÿ›Ž๏ธ Best practice Nitro Starter with full Vitest coverage
TypeScript
2
star
67

nuxt3-fetch-error-repro

Vue
2
star
68

bildhauer-volkmar-kuehn.de

๐Ÿฐ Personal website for German sculpting artist Volkmar Kรผhn
TypeScript
2
star
69

vitesse-prettier

๐ŸŒฌ Opiniated Vitesse variation
Vue
2
star
70

ui

A collection of Vue.js components for my projects
Vue
1
star
71

dachsbau-frontend

๐Ÿฆก Nuxt 3 & KQL frontend for dachsbau-tautenhain.de
Vue
1
star
72

kirby-nuxt-template-starterkit

๐Ÿ’š Kirby's sample site โ€“ ported to Nuxt 3 using Kirby templates
Vue
1
star
73

byjohann.link

๐Ÿ”— Personal linktree page
Vue
1
star