StatelessID

Beacon Fields

Each beacon contains exactly five fields: your site key, the page path, the referrer host, a screen-size class, and a load-speed band. That is the complete payload.

Site key

The value in data-k. It tells the server which site is reporting. The site key routes the incoming count to the right site's totals. Two different people loading the same page send the same site key. The key is not a user identifier — it is a site identifier.

Each site you register in the dashboard gets its own key. If you have three sites, you have three keys. A beacon received with an unknown key or a key that does not match the beacon's origin hostname is rejected.

Page path

The value of window.location.pathname at the moment the beacon fires. Query string is not included. Hash fragment is not included — it is a client-side construct that never travels in an HTTP request. /products/shoes is recorded as /products/shoes regardless of ?sort=price, ?color=red, or #description.

The path is recorded as-is. If your server or framework serves the same content at /blog/ and /blog without a redirect, two distinct path values appear in the board. Canonical redirects on your server — redirecting /blog to /blog/ — ensure that the board shows one row.

Referrer host

The hostname portion of document.referrer. If the referrer is https://news.ycombinator.com/item?id=12345, the beacon records news.ycombinator.com. If it is https://www.google.com/search?q=something, the beacon records google.com. The path, query string, and protocol are discarded. Only the host travels in the beacon.

If document.referrer is empty — the visitor typed the URL directly, used a bookmark, came from an app, or arrived from a source that strips referrers — the source is recorded as a direct marker. Same-site referrers, where a visitor clicks from one of your pages to another, appear as your own hostname in the Sources section.

Screen-size class and load-speed band

Screen width in pixels is read from screen.width and mapped to a named class — a small group containing many different device models. The raw pixel count is not sent. The class name is sent. This coarsens the screen dimension to a level that is useful for layout decisions without being useful for identification.

Load timing is measured from navigation start to approximately DOMContentLoaded and mapped to one of four speed bands. The raw millisecond value is not sent. Only the band name is sent. See the load-bands and resolution-classes articles for the specific boundaries.

Troubleshooting

If sources in the board show a full referrer URL instead of only the hostname, the version of asset.js running on your page may be outdated. Because the script loads from the canonical URL, this should self-correct when the browser cache expires. If the problem persists, open the live source on the Features page and compare it to what your Network panel shows your browser downloading.

If a page's path appears in the board with inconsistent trailing slashes — some loads with a slash and some without — the variation comes from the actual pathname value the browser had at DOMContentLoaded. The script records what it sees. Canonicalize trailing slashes with server-side redirects to ensure one row per page.

Similar pages