DEV Community

Elian Van Cutsem
Elian Van Cutsem

Posted on • Originally published at elian.codes on

Add custom tracking events to your Nuxt site with GA4

Add custom tracking events to your nuxt site with GA4

Sometime ago I wrote an article about pairing Nuxt with GA4 and wanted to try it out after just playing around with it for a bit. The older Universal Analytics (UA) worked fine for me, but after using it rather intensive, I xanted to dive a little deeper into understanding how a user interacts with my website and how I can improve the user experience.

Adding GA4 support to Nuxt

Adding GA4 isn't that hard in Nuxt, if you need a more in-depth guide on that, check out this article. Here follows a little guide without many in-depth descriptions:

Firstly we install Vue-gtag, the documentation of that package can be found here.

yarn add vue-gtag

Enter fullscreen mode Exit fullscreen mode

Now we have to configure the package as a plugin in Nuxt the following way:

// analytics.js

import Vue from 'vue'
import VueGtag from 'vue-gtag'

Vue.use(VueGtag, {
  config: { id: 'G-XXXXXXXXXX' }
})

Enter fullscreen mode Exit fullscreen mode

Fill the G-XXXXXXXXXX with your specific gTag you can create in the Google Analytics dashboard.

Now actually tell Nuxt to use the plugin:

// nuxt.config.js

plugins: [
    '~/plugins/analytics.js'
  ],

Enter fullscreen mode Exit fullscreen mode

That's it for the basic GA4 tracking. You can set more options in analytics.js if you want and can read more about that on the official documentation for vue-gtag or on the gtag.js documentation.

Adding both UA and GA4 support to Nuxt

So if you're using the setup as above, you can also add a UA support tag to take full advantage of the Google Analytics features. Nuxt has it's own module called @nuxtjs/google-analytics module that (right now) only supports UA tracking.

Install the module:

yarn add -D @nuxtjs/google-analytics

Enter fullscreen mode Exit fullscreen mode

Add it as a buildModule

// nuxt.config.js

buildModules: [
  '@nuxtjs/google-analytics',
  // Probably more modules
]

Enter fullscreen mode Exit fullscreen mode

Now you only have to add your own UA tag to complete the setup:

// nuxt.config.js

googleAnalytics: {
  id: 'UA-XXXXXX-X' // or use process.env.GOOGLE_ANALYTICS_ID
},

Enter fullscreen mode Exit fullscreen mode

Now the next time you build your project it will include both the UA and GA4 tracking scripts. The only thing you can add to improve your tracking is adding custom events. More about that below.

Add custom events to GA4

To understand better what actions a user undertakes while roaming around on your website, it can be interesting to define some custom events. On my website I included a custom event for the themeToggle. If a user switches theme, I get a custom event in the Google Analytics Dashboard, so I can see how important this feature actually is. If it nevers gets triggered I know that I can remove the feature without losing users.

Here I'll explain my setup to send a trigger when toggling the darkmode:

In the Vue component you'll have access to the this.$gtag object. So to actually send an event, we can access the following code snippet:

this.$gtag.event('action', {
    'event_category': 'category',
    'event_label': 'label',
    'value': 'value'
})

Enter fullscreen mode Exit fullscreen mode

We can use this snippet in every component since we added vue-gtag as a component.

So to send a custom event trigger we can use the v-on:click or any other directive to call a method. Here's an example:

<template>
  <a v-on:click="activateLightMode" class="" v-if="activeTheme === 'dark'">
    <svg >
        <path />
    </svg>
  </a>
</template>

<script>
export default {
  // ...
  methods: {
    activateLightMode () {
      // Place the logic for dark- or lightmode here
    }
  }
}
</script>

Enter fullscreen mode Exit fullscreen mode

Now we need to only add a custom event to it:

<template>
  <a v-on:click="activateLightMode" class="" v-if="activeTheme === 'dark'">
    <svg >
        <path />
    </svg>
  </a>
</template>

<script>
export default {
  // ...
  methods: {
    activateLightMode () {
      this.$gtag.event('toggleDark', {
        'event_category': 'toggleTheme',
        'event_label': 'dark',
      })
      // Place the logic for dark- or lightmode here
    }
  }
}
</script>

Enter fullscreen mode Exit fullscreen mode

Now you should see the event pop-up in your GA dashboard!

Happy Tracking

Top comments (2)

Collapse
 
slidenerd profile image
slidenerd

how do you add GA 4 to a nuxt 2 webapp, not a single resource is covering this anywhere. vast majority of sites have not migrated yet to nuxt 3

Collapse
 
hjelmdal profile image
Stephan Hjelmdal

I think you are wrong - most siteshave actually migrated - and if you haven’t, now might be a great time to do so, now that Nuxt2 has reached EOL…