FROM A VISIT TO A BETTER WEBSITE

Understand what happened
and what the numbers mean

Visitor insights brings acquisition, interaction, masked replay and conversion reporting into one workspace. Reports use events received from your website after consent.

A small setup, then one place to look

  1. Open Visitor insights, sign in and choose Connection. Enter the name and HTTPS address of your website.
  2. Copy the installation snippet into your site-wide HTML header. Use the exact same origin, including www if your site uses it.
  3. Run the analytics consent code only after the visitor accepts analytics. The tracker respects browser Do Not Track and Global Privacy Control signals.
  4. To record masked replay, enable it in Connection and use the replay consent code only after separate visitor agreement.
  5. Open your site, accept collection and use Check connection. Reports reflect received events, not simulated connection status.
// Analytics after acceptance
window.siteforgeTrackingConsent = true;
window.SiteForgeTracking?.start();

// Analytics and replay after both have been accepted
window.siteforgeTrackingConsent = { analytics: true, replay: true };
window.SiteForgeTracking?.start({ replay: true });

// Consent withdrawn
window.SiteForgeTracking?.stop();

Replay sampling applies to eligible, consenting visits. Turning collection off blocks new events at the server. Calls to stop clear queued events and local tracking IDs on that browser. Already stored records can be removed by deleting a session or the website.

Watch movement without collecting private content

Replay reconstructs recorded page geometry with masked blocks. You can watch pointer movement, clicks, scrolling, navigation and form interaction events, change speed, skip quiet moments and jump along the timeline.

This is a masked layout recording, not a pixel-perfect video. Images, ordinary page text and all field values are omitted. The player does not run a visitor’s HTML or JavaScript. Iframes, shadow DOM and canvas contents are not recorded. Dynamic layout captures are throttled, so very brief UI states may be missed.

<section data-sf-private>Never capture this area</section>
<button data-sf-track="booking-button"
        data-sf-replay-label="Book a place">Book a place</button>

Use static, non-personal labels. The optional replay label is the only displayed text captured for a block. Password, hidden and file fields are excluded from field analytics. Form values, keystrokes, email addresses, full console messages, network bodies, request headers and application tokens are not collected by the tracker. Keep personal data out of page paths, UTM tags, event names and custom labels.

Script and unhandled promise errors appear as category signals without messages or stacks. Your application can explicitly report network failures with SiteForgeTracking.issue('network', 503). Network requests and console logs are not intercepted automatically.

Useful signals, with clear definitions

ReportWhat it measures
Traffic and acquisitionViews, sessions, observed visitors, referrer domains, UTM tags and channel classification, including affiliate. Paid status comes from campaign tags, not an ad-platform connection.
SessionA browser session continues across pages until 30 minutes of inactivity or a new campaign. Duration runs from the first to last observed event.
Active timeVisible-page intervals with user activity in the past 30 seconds. Viewport dwell excludes hidden-tab intervals. This is an engagement estimate, not proof that someone is reading.
Click, hover and scroll mapsNormalised positions and scroll milestones, grouped by page and device. Hover uses pointer samples. A representative captured layout can differ from another visitor’s layout.
AttentionEstimated active viewport exposure by page depth. Section timing requires at least half the marked section in view. This is not eye tracking.
Rage and dead clicksRage: three nearby clicks within 1.2 seconds. Dead: no observed DOM, page or scroll change within 850 milliseconds. Custom controls can produce false positives.
Quality scoreUp to 35 points from active seconds divided by three, 20 from pages, 20 from depth and 25 for any goal. A transparent heuristic, not a predictive model.
Friction score25 points per rage-click signal, 8 per dead-click signal and 12 per error, capped at 100. It highlights sessions to review.
JourneysOrdered pages, exact common-path groups, repeated pages and A → B → A returns within ten seconds. Multi-session paths use the identities described below.
AttributionFirst touch, last touch or equal credit across observed session touches before each goal, within the selected period. Assists count prior channels. This cannot prove incrementality or identify unobserved touchpoints.
FunnelsOrdered page or goal events in a single session. Each step counts a session once. Edit the steps in the current view.
FormsField focus, non-empty status, validation errors, corrected fields, time in a field and browser autofill signals. Submission is distinct from confirmed success.
ContentPage engagement, reaching 90% depth, next-page activity, native video milestones, marked sections and volume change between two halves of a report period. Trend changes can reflect acquisition, not content decay alone.

Tell the tracker what matters to your business

// Call after your app confirms the action
SiteForgeTracking.goal('booking-confirmed', {
  level: 'macro', value: 85, currency: 'GBP'
});

// A smaller action
SiteForgeTracking.goal('brochure-downloaded', { level: 'micro' });

// Call after a successful form response
SiteForgeTracking.formComplete('Book a seat');

// Use a category, not a visitor's raw search text
SiteForgeTracking.search('Dietary options', 3);

// Report a known failure without private payloads
SiteForgeTracking.issue('network', 503);
<form data-sf-form="Book a seat">
  <input data-sf-field="Email" type="email">
</form>
<section data-sf-section="The evening">...</section>
<video data-sf-video="A night at Gather">...</video>
<button data-sf-goal="ticket-button">View tickets</button>

Button goals are clicks, not completed payments. Revenue uses values you send after your own app confirms an action. Reports keep currencies separate and do not reconcile payments or refunds. Embedded video players need explicit integration with their player APIs.

Recognise a customer when they identify themselves

// Use a stable, opaque application identifier, 16–80 characters
SiteForgeTracking.identify('customer_29d50780ef014d99', {
  accountId: 'company_86d33a624dc14df0',
  tier: 'Paid'
});

// On sign-out or account switching
SiteForgeTracking.resetIdentity();

Anonymous IDs are randomly generated after consent and kept in that browser for up to 90 days since the last visit. User and account IDs are hashed per website before storage. Never supply an email address, name, password, access token or API key as an identity.

The same explicit user ID can connect signed-in activity across devices. There is no fingerprinting, household inference or probabilistic device stitching. On shared browsers, call resetIdentity when signing out so the next visitor starts fresh. Identity stitching is limited to the events in the loaded report. Country, where available, comes from the hosting edge; raw IP addresses are not saved in analytics records.

Segments include device, browser, operating system, country, channel, campaign, new or returning, signed-in or anonymous, supplied tier and observed behaviour. Predictive segments require a separate validated model and are not included.

Recording and reporting limits

Events are retained for 90 days, up to 100,000 per website. A report displays the newest 20,000 events; an explicit warning appears when it is incomplete. The session view loads up to 2,500 events separately. The tracker caps its session output at 2,500 events and keeps a bounded retry queue.

Masked replay layouts are retained for 14 days, with up to 24 captures per session and 600 frames per website in that window. Captures hold up to 140 blocks. Layout changes are sampled at most every five seconds, with additional navigation captures. Heavy traffic can reach the limits before the retention window ends. Use a lower recording sample when appropriate.

Data is not retroactive. Browser restrictions, consent refusal, network failures, ad blockers and collection limits can create gaps. The tracker does not verify bots. No report claims to represent all website visitors.

Deleting a session removes its events and frames and blocks delayed events from restoring it for 90 days. Removing the website deletes its analytics, frames and exclusions. Public collection is origin-scoped and bounded; viewing and deletion require the site owner’s signed-in account.

Clearspan · Updated 17 October 2026