Skip to main content

Nuxt 3 Integration

Nuxt module for privacy-first, cookieless analytics in Nuxt 3 applications.

Installation

npm install @sealmetrics/nuxt
# or
yarn add @sealmetrics/nuxt
# or
pnpm add @sealmetrics/nuxt

Setup

Add the module to your nuxt.config.ts:

export default defineNuxtConfig({
modules: ['@sealmetrics/nuxt'],

sealmetrics: {
accountId: 'YOUR_ACCOUNT_ID',
// Optional:
// pixelUrl: 'https://t.sealmetrics.com',
// debug: false,
// disabled: false,
},
});

That's it! The tracker will be automatically loaded on all pages.

Configuration Options

OptionTypeDefaultDescription
accountIdstringrequiredYour SealMetrics Account ID
pixelUrlstringhttps://t.sealmetrics.comCustom pixel URL
debugbooleanfalseEnable debug logging
disabledbooleanfalseDisable tracking

Content Groups

Using Route Meta

Set content groups using route meta:

// pages/products/[id].vue
definePageMeta({
sealmetricsGroup: 'product',
});

Automatic Detection

Content groups are automatically detected based on path:

PathGroup
/home
/blog/*blog
/products/*product
/cartcart
etc.

Tracking Events

Using the Composable

<script setup>
const { micro, conv, isReady } = useSealMetrics();

// Track product view on mount
onMounted(() => {
if (isReady.value) {
micro('view_item', {
product_name: 'Product Name',
product_id: '123',
price: '99.99',
});
}
});

// Track add to cart
const handleAddToCart = () => {
micro('add_to_cart', {
product_name: 'Product Name',
quantity: '1',
});
};

// Track purchase
const handlePurchase = (total: number) => {
conv('purchase', total, {
currency: 'EUR',
});
};
</script>

Using the Plugin

<script setup>
const { $sealmetrics } = useNuxtApp();

// Track event
$sealmetrics.micro('cta_click', { button_text: 'Sign Up' });

// Track conversion
$sealmetrics.conv('lead', 0, { source: 'contact_form' });
</script>

useTrackOnMount Helper

<script setup>
// Automatically tracks event when component mounts
useTrackOnMount('view_item', {
product_name: 'Product Name',
product_id: '123',
});
</script>

Common Events

Microconversions

const { micro } = useSealMetrics();

// Form submission
micro('form_submit', { form_name: 'contact' });

// Newsletter signup
micro('newsletter_signup', { form_location: 'footer' });

// Product view
micro('view_item', {
product_name: 'Product Name',
product_id: '123',
price: '99.99',
});

// Add to cart
micro('add_to_cart', {
product_name: 'Product Name',
quantity: '1',
});

// CTA click
micro('cta_click', {
button_text: 'Get Started',
button_location: 'hero',
});

Conversions

const { conv } = useSealMetrics();

// Purchase
conv('purchase', 149.99, {
currency: 'EUR',
});

// Lead
conv('lead', 0, {
source: 'contact_form',
});

// Signup
conv('signup', 0, {
plan: 'free',
});

Environment Configuration

Disable tracking in development:

// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@sealmetrics/nuxt'],

sealmetrics: {
accountId: process.env.SEALMETRICS_ACCOUNT_ID || '',
disabled: process.env.NODE_ENV === 'development',
debug: process.env.NODE_ENV === 'development',
},
});

TypeScript

The module includes full TypeScript support. Types are auto-imported.

Type Declarations

// types/sealmetrics.d.ts
declare module '#app' {
interface NuxtApp {
$sealmetrics: {
micro: (name: string, props?: Record<string, any>) => void;
conv: (name: string, value: number, props?: Record<string, any>) => void;
isReady: () => boolean;
};
}
}

declare module 'vue-router' {
interface RouteMeta {
sealmetricsGroup?: string;
}
}

Privacy

  • No cookies used
  • No personal data collected
  • GDPR compliant by design
  • No consent banner required