Measuring
Filtering traffic
Three separate problems, three separate tools: keeping your own visits out of your numbers, never measuring certain pages at all, and measuring a page without recording who it was about.
Exclude your own visits
Opening your own site all day skews your own data. Visit any page on your site once with:
https://example.com/?vitrus_ignore=1
That browser stops being measured — permanently, across sessions, until you undo it:
https://example.com/?vitrus_ignore=0
localStorage key named
vitrus.ignore holding the literal string "1".
It is not an identifier, it is never sent anywhere, and clearing site data removes it. This is the
only value Vitrus ever writes to a browser.It is per browser and per device, so each one you use needs the visit once. In private mode, where storage is unavailable, the exclusion simply does not apply — the tracker fails quietly rather than breaking your page.
Skip pages entirely
data-skip-patterns takes a JSON array of path patterns. A matching page
sends nothing at all — no pageview, no custom event, no Web Vitals, no exit summary.
<script defer data-site="SITE_ID" data-skip-patterns='["/admin/**", "/preview/*", "/internal"]' src="https://app.vitrus.dev/v.js"></script>
Pattern syntax
| Pattern | Matches | Does not match |
|---|---|---|
/admin | /admin | /admin/users |
/admin/* | /admin/users | /admin, /admin/users/7 |
/admin/** | /admin and everything under it | /administration |
* matches exactly one path segment; **
matches the rest of the path. Matching is segment by segment, never a regular expression — a regex
supplied through an HTML attribute would be a denial-of-service against your own visitors' browsers.
Mask identifying paths
Some paths carry personal data in the URL itself: /invoice/8841/pdf,
/u/[email protected]/settings. Once written to an analytics database, no
policy text removes it. data-mask-patterns rewrites those segments
in the browser, before anything is sent.
<script defer data-site="SITE_ID" data-mask-patterns='["/invoice/*/pdf", "/u/**"]' src="https://app.vitrus.dev/v.js"></script>
| Actual URL | What we receive |
|---|---|
/invoice/8841/pdf | /invoice/*/pdf |
/u/[email protected]/settings | /u/** |
The masked path is used everywhere — the pageview URL and the path
property on every event — so a masked segment cannot leak through a rage click or an error report.
Query strings are untouched; if those carry identifiers too, strip them at the source or switch the
site to strict mode, which drops referrer query strings server-side.
Bots
You do not need to filter these. Bots are detected and labelled at ingest, and human metrics always exclude them — see bot detection.