Reputation: 662
I'm having issues setting up a new Google Analytics 4 (GA4) account with Nuxt. Everything seems configured ok based on tutorials, however my traffic doesn't show up in GA (dev & production)
In nuxt.config.js I have the following
buildModules: [
'@nuxtjs/tailwindcss','@nuxtjs/google-analytics'
],
googleAnalytics: {
id: 'G-HWW3B1GM6W'
},
The google id is a GA4 Data Stream id with my production website. I tried 2 different streams, with www and without, but the traffic doesn't show up in GA4.
Upvotes: 37
Views: 28093
Reputation: 1
step 1: install this from terminal "npx nuxi@latest module add gtag"
step 2: add the modules in nuxt module
export default defineNuxtConfig({
modules: ['nuxt-gtag'],
})
step 3: add the gtag id
export default defineNuxtConfig({
modules: ['nuxt-gtag'],
gtag: {
enabled: process.env.NODE_ENV === 'production',
id: process.env.GTAG_ID_MAINDOMAIN || 'G-XXXXXX'
config: {
anonymize_ip: true
}
},
})
Upvotes: 0
Reputation: 3109
Nuxt2 + GA4 solution in pure JavaScript.
nuxt.config.js
export default {
...
head: {
...
script: [
{
vmid: 'g-tag',
src: 'https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXX',
async: true,
callback: () => {
window.dataLayer = window.dataLayer || []
function gtag() {
window.dataLayer.push(arguments)
}
gtag('js', new Date())
gtag('config', 'G-XXXXXXXX')
},
},
],
...
},
...
}
And make sure that you have replace 'G-XXXXXXXX' with your Google Analytic Measurement ID.
Upvotes: 2
Reputation: 691
I found this way more simpler with Nuxt 3, Vue 3 and Google analytics 4.
First you will need to add this latest plugin for vue-gtag
npm add --dev vue-gtag-next
Then create a plugin file plugins/vue-gtag.client.js
In this file, add this code
import VueGtag, { trackRouter } from 'vue-gtag-next'
export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.vueApp.use(VueGtag, {
property: {
id: 'GA_MEASUREMENT_ID'
}
})
trackRouter(useRouter())
})
You can also use optin/optout feature if you want to disable that plugin at any time using isEnabled
flag.
https://matteo-gabriele.gitbook.io/vue-gtag/v/next/opt-in-out
Here is the link to documentation.
https://nuxt.com/docs/guide/directory-structure/plugins#vue-plugins
https://matteo-gabriele.gitbook.io/vue-gtag/v/next/
Upvotes: 2
Reputation: 17132
I had the same problem, and I solved it by just using the vanilla JavaScript:
/static/js/ga.js
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX');
/nuxt.config.js
export default {
head: {
script: [
{
src: "https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX",
async: true,
},
{
src: "js/ga.js",
}
]
},
}
Upvotes: 28
Reputation: 14179
[UPDATE]
If you want to use GA4 Property (which is what has the ids in the format G-XXXXXXXXXX) you can try to use vue-gtag package by creating a plugin:
import Vue from 'vue'
import VueGtag from 'vue-gtag'
Vue.use(VueGtag, {
config: { id: 'G-XXXXXXXXXX' }
})
Add this in nuxtconfig.js
plugins: ['@/plugins/gtag']
About the problem indicated in your message, that plugin you mentioned works with the Universal version of Google Analytics (which is what has the ids in the format UA-XXXXXXXXX-X
), like the example in your link:
buildModules: [
'@nuxtjs/tailwindcss','@nuxtjs/google-analytics'
],
googleAnalytics: {
id: 'UA-XXXXXXXX-X'
},
The code you entered in the example, G-HWW3B1GM6W
, refers to the new Google Analytics 4 which, being a different system from the previous one and does not work (yet) with that plugin.
So I suggest you to create a Universal Analytics type Property and use its ID (UA-XXXXX-X) with the plugin you indicated. You can find it by clicking on Show advanced options
(when you create a new property):
Upvotes: 52
Reputation: 1841
I came here since I had no results in GA when I was in development or production mode.
The first thing you need to do is to disable any AdBlockers or Anti-trackers for the website you want to test.
Secondly, you need to be in production mode (npm run build
and then npm start
).
If you wish to be in development mode and still get results in GA then passdebug: { sendHitTask: true }
in the GA configuration inside nuxt.config.js:
publicRuntimeConfig: {
googleAnalytics: {
id: process.env.GOOGLE_ANALYTICS_ID,
debug: {
sendHitTask: true
}
}
},
Upvotes: 2
Reputation:
You can use vue-gtag
package by creating a plugin.
import Vue from 'vue'
import VueGtag from 'vue-gtag'
Vue.use(VueGtag, {
config: { id: 'G-XXXXXXXXXX' }
})
Remember to add it in nuxtconfig.js
plugins: ['@/plugins/gtag']
Upvotes: 27