Add the tracker

Install your site's script tag and check that events arrive. Review your consent requirements before enabling collection.

1. Copy your snippet

Sign in, open your website, and go to Settings → Installation → Scripts. Your snippet looks like this, with your own site token. The Minimal style shown here reads its options from Installation → Dashboard; the Explicit style writes the same options as script attributes (see Script options).

<script defer src="https://app.seean.io/k.js"
  data-site="YOUR_SITE_TOKEN"
  data-api="https://app.seean.io"></script>

Keep both script and API addresses on https://app.seean.io, as shown above, unless first-party collect is enabled in Installation; then the generated <slug>-collect.seean.io hostname - or an active custom collection domain of your own - is used for both. An existing snippet using these addresses does not need to change when Seean updates its infrastructure.

2. Paste it before </head>

Use the shared HTML document or root layout for every page you want to measure. Follow your platform guide for the correct placement. Install the tracker once: using both a layout and a tag manager can count visits twice.

The tracker observes supported History API navigation, such as / → /pricing. Query strings are not part of the page path; hash fragments are ignored unless you set data-hash="true". A changed tagged campaign or expired session can still start a new session and count the same pathname again. Load the tracker as a classic external script; do not import it into your application bundle or add type="module".

3. Verify

Open the published site in a normal browser tab, then check Settings → Installation → Setup health for the matching website. Last pageview received shows the newest retained pageview time; before any pageview, Installation verified shows when the published page last passed the check. Use Check installation to inspect the published homepage for the tracker, token and security policy. Seean also checks the published homepage automatically in the background (every minute on the website’s first day), so the installation is verified as soon as the snippet is published, even when the dashboard is closed. The Overview banner then disappears without waiting for a visit.

A source reference or old visit does not prove your latest deployment works. Match a new page path and time in Events using the installation checks. The setup diagnostic guide explains results, permissions and limits.

Script options

Installation → Dashboard holds the tracking options for the website: UTM campaigns (on), hash page paths (off), Web Vitals (on), auto conversions (on for new and never-configured websites), debug logging (off) and cross-domain hostnames. Save tracking options stores them; a minimal snippet applies them on its next page load. The Explicit snippet style writes the same choices as attributes instead:

Attribute Default Effect
data-conversions="true" off in raw HTML Load the enabled automatic conversion presets once per document. Generated explicit snippets include it while Auto conversions is on.
data-hash="true" off Count location.hash changes as pageviews and report the path with its fragment, for example /docs#install.
data-utm="off" on Stop reading utm_source, utm_medium and utm_campaign; a tagged link no longer starts a new session.
data-vitals="off" on Skip Web Vitals measurement entirely (no performance observers).
data-debug="true" off console.debug each payload before it is sent. Safe when the console is unavailable.
data-domains="a.com,b.com" off Cross-domain handoff: links to the listed hosts (and their subdomains) carry the visitor ID, and a landing page adopts an incoming ID.

When any of these attributes is present the dashboard options are ignored for that page. Details and defaults: Script and tracking options.

What the tracker sends

Field What it is
path the page path, no query string (with the fragment when data-hash is on)
hostname the website being measured
referrer the browser’s referring URL; the collector keeps its hostname only
timezone country fallback when the network edge reports none
visitorId, sessionId default identities are derived on the server per website and UTC day; optional cross-domain handoff carries the identity in same-day session storage
campaign UTM source, medium and campaign when present, unless data-utm="off"
Web Vitals LCP, INP, CLS, FCP and TTFB; later measurements can update a sample. Off with data-vitals="off"

The collector reads country, region and city from the network edge headers of the request, uses the user agent for browser, operating system and device categories, and may use its language region as a country fallback. The IP address is compared against exclusion rules only and is never stored. Screen dimensions are not sent by the current tracker.

Default tracking uses a daily website-scoped server hash without cookies or persistent browser measurement storage. Opt-in cross-domain handoff uses same-day sessionStorage. Collection stops for Do Not Track, Global Privacy Control or the browser opt-out described in Exclusions. Where consent or an opt-out applies, control script loading through your site’s consent mechanism. See technical privacy and storage and consent.

Local development

The tracker ignores localhost and 127.0.0.1 unless you add data-local to the script tag. Use a separate Seean website/token for test traffic and copy the API address from that site’s snippet. Automated browsers, Do Not Track, Global Privacy Control and browser opt-out can still stop collection; data-local does not disable those checks.

Remove or update an installation

Remove the script from its layout or tag manager and publish the change to stop future collection from that installation. Existing reports remain. Rotating a site’s tracking token immediately invalidates its old snippets; update every installation with the new token. See website settings.

Something unclear? Contact support.