Initialize and configure the web trackers
Initialize the tracker by calling the newTracker function. It takes three arguments:
- The tracker namespace
- The Collector endpoint
- An optional configuration object containing other settings
Here is a simple example of how to initialise a tracker, setting a few configuration options:
- JavaScript (tag)
- Browser (npm)
// The tracker namespace is 'sp' in this example
snowplow('newTracker', 'sp', '{{collector_url_here}}', {
appId: 'my-app-id',
appVersion: '0.1.0',
cookieSameSite: 'Lax', // Recommended
contexts: {
session: true
}
});
// The tracker namespace is 'sp' in this example
newTracker('sp', '{{collector_url_here}}', {
appId: 'my-app-id',
appVersion: '0.1.0',
cookieSameSite: 'Lax', // Recommended
contexts: {
session: true
}
});
The tracker will send events to the Collector URL you specify by replacing {{collector_url_here}}. The final argument is the configuration object. Here it's used to set the app ID and enable the session entity for each event. Each event the tracker sends will have an app_id field set to my-app-id.
If your code calls newTracker multiple times with the same namespace, only the first call is taken into account.
Initialize one tracker per initial page load.
The following table shows all the configuration parameters. These are all optional: you aren't required to provide any configuration object at all.
| Property | Description | Default (if applicable) | Type |
|---|---|---|---|
appId | Set the application ID. | string | |
appVersion | Set the application version. | string | |
platform | Set the application platform. | web | string enum |
cookieDomain | Set the cookie domain. | Current domain | string |
discoverRootDomain | Automatic discovery and setting of the root domain, to facilitate tracking over multiple subdomains. | true | boolean |
cookieName | Set the cookie name prefix. | _sp_ | string |
cookieSameSite | Set the cookie SameSite attribute. | Lax | string enum |
cookieSecure | Set the cookie Secure attribute. | true | boolean |
encodeBase64 | Enable Base64 encoding for self-describing event and entity data. | true for GET, false for POST | boolean |
respectDoNotTrack | Respect the browser Do Not Track setting. | false | boolean |
eventMethod | Send events by GET or POST. | post | string enum |
bufferSize | Number of events to buffer before sending. | 1 | int |
maxPostBytes | Maximum size in bytes for POST requests. | 40000 | int |
maxGetBytes | Maximum size for GET request URLs. | int | |
postPath | Custom collector POST path. | /com.snowplowanalytics.snowplow/tp2 | string |
crossDomainLinker | Function to determine which links to decorate for cross-domain tracking. | function | |
useExtendedCrossDomainLinker | Use extended format for cross-domain linker with additional user/session data. | false | boolean or object |
cookieLifetime | Set the cookie lifetime in seconds. | 63072000 (2 years) | int |
sessionCookieTimeout | Set the session timeout in seconds. | 1800 (30 minutes) | int |
stateStorageStrategy | How to store tracker state. | cookieAndLocalStorage | string enum |
maxLocalStorageQueueSize | Maximum events to queue in local storage when they are failing to send. | 1000 | int |
resetActivityTrackingOnPageView | Reset page ping timers when a page view is tracked. | true | boolean |
connectionTimeout | Request timeout in milliseconds. | 5000 | int |
anonymousTracking | Enable anonymous tracking (do not track user identifiers). | false | boolean or object |
customHeaders | Custom headers to add to POST requests. | object | |
credentials | Whether to send credentials (cookies) with requests. | include | string enum |
contexts | Configure context entities to add to all events. | { webPage: true } | object |
plugins | Plugins to extend tracker functionality. | [] | BrowserPlugin[] |
retryStatusCodes | HTTP status codes to retry requests on. | int[] | |
dontRetryStatusCodes | HTTP status codes to never retry. | [400, 401, 403, 410, 422] | int[] |
retryFailedRequests | Retry failed requests (timeouts, network errors). | true | boolean |
onSessionUpdateCallback | Callback executed when the session identifier updates. | function | |
onRequestSuccess | Callback executed when a request succeeds (2xx status). | function | |
onRequestFailure | Callback executed when a request fails (non-2xx status). | function | |
preservePageViewIdForUrl | Control when a new page view ID is generated based on URL changes. | false | boolean or string enum |
customFetch | Override the default fetch function with a custom implementation. | function | |
eventStore | Custom EventStore implementation for storing events before sending. | object | |
keepalive | Allow requests to outlive the webpage. Enables requests to complete even if the page is closed. | false | boolean |
synchronousCookieWrite | Write cookies synchronously (blocks main thread). | false | boolean |
Here is a longer code example in which every tracker configuration parameter is set:
- JavaScript (tag)
- Browser (npm)
snowplow('newTracker', 'sp', '{{collector_url_here}}', {
appId: 'my-app-id',
appVersion: '0.1.0',
platform: 'web',
cookieDomain: null,
discoverRootDomain: true,
cookieName: '_sp_',
cookieSameSite: 'Lax', // Recommended
cookieSecure: true,
encodeBase64: true,
respectDoNotTrack: false,
eventMethod: 'post',
bufferSize: 1,
maxPostBytes: 40000,
maxGetBytes: 1000, // available in v3.4+
postPath: '/custom/path', // Collector must be configured
crossDomainLinker: function (linkElement) {
return (linkElement.href === 'http://acme.de' || linkElement.id === 'crossDomainLink');
},
useExtendedCrossDomainLinker: {
userId: true,
},
cookieLifetime: 63072000,
sessionCookieTimeout: 1800,
stateStorageStrategy: 'cookieAndLocalStorage',
maxLocalStorageQueueSize: 1000,
resetActivityTrackingOnPageView: true,
connectionTimeout: 5000,
anonymousTracking: false,
// anonymousTracking: { withSessionTracking: true },
// anonymousTracking: { withSessionTracking: true, withServerAnonymisation: true },
customHeaders: {}, // Use with caution. Available from v3.2.0+
credentials: 'include', // Available from v4+
contexts: {
webPage: true, // Default
session: false, // Adds client session context entity to events, off by default. Available in v3.5+.
browser: false, // Adds browser context entity to events, off by default. Available in v3.9+.
performanceNavigationTiming: true, // Adds performance navigation timing entity. Available in v4.0.2+
performanceTiming: true,
gaCookies: true,
// gaCookies: { ga4: true, ua: false, ga4MeasurementId: "", cookiePrefix: "_ga_" }, // Optional
geolocation: false,
clientHints: true,
// clientHints: { includeHighEntropy: true }, // Optional
},
retryStatusCodes: [],
dontRetryStatusCodes: [],
retryFailedRequests: true,
onSessionUpdateCallback: function(clientSession) { }, // Allows the addition of a callback, whenever a new session is generated. Available in v3.11+.
onRequestSuccess: function(data) => { }, // Available in v3.18.1+
onRequestFailure: function(data) => { }, // Available in v3.18.1+
preservePageViewIdForUrl: false,
keepalive: false, // Introduced in v4
customFetch: undefined, // Introduced in v4
eventStore: undefined, // Introduced in v4
synchronousCookieWrite: false,
});
newTracker('sp', '{{collector_url_here}}', {
appId: 'my-app-id',
appVersion: '0.1.0',
platform: 'web',
cookieDomain: null,
discoverRootDomain: true,
cookieName: '_sp_',
cookieSameSite: 'Lax', // Recommended
cookieSecure: true,
encodeBase64: true,
respectDoNotTrack: false,
eventMethod: 'post',
bufferSize: 1,
maxPostBytes: 40000,
maxGetBytes: 1000, // available in v3.4+
postPath: '/custom/path', // Collector must be configured
crossDomainLinker: function (linkElement) {
return (linkElement.href === 'http://acme.de' || linkElement.id === 'crossDomainLink');
},
useExtendedCrossDomainLinker: {
userId: true,
},
cookieLifetime: 63072000,
sessionCookieTimeout: 1800,
stateStorageStrategy: 'cookieAndLocalStorage',
maxLocalStorageQueueSize: 1000,
resetActivityTrackingOnPageView: true,
connectionTimeout: 5000,
anonymousTracking: false,
// anonymousTracking: { withSessionTracking: true },
// anonymousTracking: { withSessionTracking: true, withServerAnonymisation: true },
customHeaders: {}, // Use with caution. Available from v3.2.0+
credentials: 'include', // Available from v4+
contexts: {
webPage: true, // Default
session: false, // Adds client session context entity to events, off by default. Available in v3.5+.
browser: false // Adds browser context entity to events, off by default. Available in v3.9+.
},
plugins: [],
retryStatusCodes: [],
dontRetryStatusCodes: [],
retryFailedRequests: true,
onSessionUpdateCallback: function(clientSession) { }, // Allows the addition of a callback, whenever a new session is generated. Available in v3.11+.
onRequestSuccess: function(data) => { }, // Available in v3.18.1+
onRequestFailure: function(data) => { }, // Available in v3.18.1+
preservePageViewIdForUrl: false,
keepalive: false, // Introduced in v4
customFetch: undefined, // Introduced in v4
eventStore: undefined, // Introduced in v4
synchronousCookieWrite: false,
});
You can further extend the tracker functionality by installing plugins. Read more about them here.