> For the complete Lynkow documentation index in agent-friendly format, see [llms.txt](/llms.txt).

# AnalyticsService

**Publié le** : 2026-08-20
**Catégorie** : Services

# AnalyticsService

Service for client-side analytics tracking via the Lynkow tracker.js script.

Accessible via `lynkow.analytics`. This is a **browser-only** service -- all methods
are no-ops when called on the server (SSR/Node.js). The service lazily loads the
`tracker.js` script from the API, which auto-initializes using the site ID. The
tracker automatically captures pageviews; use `trackPageview()` for manual SPA
navigation tracking and `trackEvent()` for custom events.

The service respects the site's consent mode: if consent mode is `'opt-in'`,
tracking only starts after consent is granted. The consent state is read from
`localStorage` (`_lkw_consent_mode` key).

Access via: `lynkow.analytics`

## Methods

**9** methods

### `destroy`

```typescript
destroy(): void
```

Removes the tracker.js script element from the DOM and resets the service
state. After calling `destroy()`, you can re-initialize by calling `init()`
again. No-op on server.

Returns: `void`

```typescript
// Clean up analytics when unmounting (e.g. React useEffect cleanup)
useEffect(() => {
  lynkow.analytics.init()
  return () => lynkow.analytics.destroy()
}, [])
```

---

### `disable`

```typescript
disable(): void
```

Disables analytics tracking. While disabled, all `trackEvent()` and
`trackPageview()` calls become no-ops. The tracker script remains loaded;
call `destroy()` to fully remove it.

Returns: `void`

```typescript
// Disable tracking when the user revokes analytics consent
lynkow.analytics.disable()
```

---

### `enable`

```typescript
enable(): void
```

Enables analytics tracking. Tracking is enabled by default when the
service is created. Call this to re-enable after a previous `disable()` call.

Returns: `void`

```typescript
// Re-enable tracking after the user grants analytics consent
lynkow.on('consent-changed', (categories) => {
  if (categories.analytics) {
    lynkow.analytics.enable()
  } else {
    lynkow.analytics.disable()
  }
})
```

---

### `getTracker`

```typescript
getTracker(): LynkowAnalyticsGlobal | undefined
```

Return the underlying `window.LynkowAnalytics` global for advanced
use cases that need direct access to the tracker's lower-level API
(e.g. calling `init` again with different options, or invoking
undocumented tracker internals).

Returns: `LynkowAnalyticsGlobal | undefined`

```typescript
const tracker = lynkow.analytics.getTracker()
tracker?.track({ custom: 'payload' })
```

---

### `init`

```typescript
init(): Promise<void>
```

Initializes analytics tracking by loading the tracker.js script into the
page and waiting for it to auto-initialize. This is idempotent -- calling
it multiple times has no effect after the first successful initialization.
No-op on server.

The tracker script is loaded from `{baseUrl}/analytics/tracker.js` with
`data-site-id` and `data-api-url` attributes. If a consent mode is stored
in `localStorage`, it is passed via `data-consent-mode`.

Returns: `Promise<void>`

```typescript
// Manually initialize analytics in an SPA after client-side routing is ready
const lynkow = createClient({ siteId: '...' })
await lynkow.analytics.init()
```

---

### `isEnabled`

```typescript
isEnabled(): boolean
```

Returns whether analytics tracking is currently enabled (i.e. whether
`trackEvent` and `trackPageview` will actually emit). Does not
indicate whether the underlying tracker script has loaded; use
isInitialized for that.

Returns: `boolean`

```typescript
if (lynkow.analytics.isEnabled()) {
  // Safe to track
}
```

---

### `isInitialized`

```typescript
isInitialized(): boolean
```

Returns whether the tracker.js script has been loaded and the
`window.LynkowAnalytics` global is available. Always `false` on the
server.

Returns: `boolean`

```typescript
if (lynkow.analytics.isInitialized()) {
  lynkow.analytics.trackEvent({ type: 'cta_click' })
}
```

---

### `trackEvent`

```typescript
trackEvent(event: EventData): Promise<void>
```

Tracks a custom event via the Lynkow analytics tracker. Automatically
initializes the tracker if not already loaded. No-op on server or when
tracking is disabled.

| Parameter | Type | Description |
| --- | --- | --- |
| `event` | `EventData` | Event data object. Must include a `type` string identifier<br>  (e.g. `'purchase'`, `'signup'`, `'click'`). Additional properties are<br>  passed through as custom event data (any key-value pairs). |


Returns: `Promise<void>`

```typescript
await lynkow.analytics.trackEvent({
  type: 'purchase',
  productId: 'abc123',
  amount: 99.99
})
```

---

### `trackPageview`

```typescript
trackPageview(data?: PageviewData): Promise<void>
```

Manually tracks a pageview event. The tracker automatically captures pageviews
on initial page load, so this method is only needed for SPA client-side
navigation (e.g. Next.js App Router route changes). Automatically initializes
the tracker if not already loaded. No-op on server or when tracking is disabled.

| Parameter | Type | Description |
| --- | --- | --- |
| `data` | `PageviewData` | Optional pageview data:<br>  - `path` — page path (defaults to `window.location.pathname`)<br>  - `title` — page title (defaults to `document.title`)<br>  - `referrer` — referrer URL (defaults to `document.referrer`) |


Returns: `Promise<void>`

```typescript
// After SPA client-side navigation
await lynkow.analytics.trackPageview({ path: '/new-page' })

// Or let it auto-detect from the current URL
await lynkow.analytics.trackPageview()
```