×marble
all posts
May 25, 2026·14 min read

Anonymous User Personalization in 2026: What You Can Still Infer Without Identity

Third-party cookies are gone and fingerprinting is legally toxic — but anonymous users emit a rich contextual signal stack that most personalization systems ignore entirely. Here's how to use it.

Alex Shrestha·Founder, ×marble

Anonymous User Personalization in 2026: What You Can Still Infer Without Identity

TL;DR.

  • Third-party cookies are gone and fingerprinting carries GDPR enforcement risk — but anonymous users emit a rich contextual signal stack that survives every privacy regime.
  • Referrer, landing page, device class, coarse geo, and real-time session behavior are first-party signals you can use today, in every jurisdiction, with no consent requirement.
  • The right framing is not "who is this person?" but "what cohort does this session look like?" — that shift unlocks segment-level priors from your known-user graph without any identity reconstruction.
  • In 2026, Google's Privacy Sandbox Topics API gives you browser-inferred interest categories for Chrome sessions — use it as a weak signal, not a load-bearing one.
  • If you only remember one thing: an anonymous user's first three clicks tell you more about their current intent than their demographic profile ever did.

The average e-commerce site converts 2–4% of visitors. The other 96–98% leave without logging in, creating an account, or accepting a cookie banner — and most personalization systems treat them as a black box labeled "serve global popularity ranking." That framing is the bug. Anonymous users are not unknown; they are partially known from the moment their first request hits your server, and the signals they emit in the first thirty seconds of a session are structurally sufficient to move relevance metrics. In 2026, with third-party cookies fully deprecated across all major browsers and probabilistic fingerprinting under active regulatory pressure, the engineering question is not "how do we recover what we lost?" but "what have we always had, and are we actually using it?"

What signals does an anonymous user actually emit?

The signal stack for an anonymous session is wider than most teams realize. The mistake is conflating "no persistent identity" with "no signal." Identity and signal are orthogonal properties.

Acquisition context. The referrer URL and UTM parameters tell you how this person arrived — organic search, a paid social campaign, a newsletter, a specific partner link, direct. A user landing from a search query for "noise-canceling headphones under $200" is a fundamentally different distribution than one arriving from a brand retargeting ad. This is pre-session declared intent, encoded in a string you already have access to, no consent required, derivable on the server before the page renders.

Landing page. Where a user enters your product is a strong prior on their current goal. A user landing on your pricing page is not in the same state as one landing on a feature comparison post or a documentation page. The URL path is a feature you can act on in every jurisdiction with no legal complexity.

Device class and operating system. Mobile Safari on iOS, Chrome on Android, and desktop Chrome are not interchangeable user cohorts. Device correlates with session intent (mobile users scan and compare; desktop users compare and transact), screen real estate constraints, input modality, and which browser APIs are available. It also tells you something about the user's context — mobile at 7 PM is a different use case than desktop at 10 AM.

Coarse geography. IP-based geolocation to the region or city level is broadly permissible as a legitimate interest under GDPR when not stored at the individual user level, because aggregate geographic context is necessary for basic service delivery. Timezone alone is meaningful: a session at 2 PM on a Wednesday implies a different use-case distribution than one at 11 PM on a Saturday. Regional preferences, local pricing, and language defaults are all downstream of a signal you have for free.

Session-level behavioral signals. Scroll depth, dwell time per section, hover patterns, and click sequence are real-time features that accumulate within a session without any persistent profile. After two clicks, you have enough signal to update a session-level embedding. After five, you can run lightweight nearest-neighbor inference against your known-user corpus and start producing recommendations that are specific to this session's revealed preferences rather than a segment prior. This is not a research-grade technique — it is standard online learning, scoped to a session instead of a user profile.

Topics API. Google's Privacy Sandbox Topics API, now stable in Chrome for desktop and Android, provides up to three browser-inferred interest categories from the IAB content taxonomy for the current weekly epoch. These are intentionally coarse — "Sports > Basketball," not "user who reads five NBA articles per day" — and they are computed on-device, not shared across sites, and carry no fingerprinting surface. Use them as a weak prior on interest space. Do not architect your system to depend on them; Topics API is unavailable in Safari, Firefox, and any non-Chromium browser.

Why "who is this person?" is the wrong question for anonymous sessions

Most personalization systems start by asking: who is this user? For authenticated users, that question has a clean answer — a user ID maps to history, preferences, and a rich feature vector. For anonymous users, it tempts engineers toward fingerprinting: combining device, browser version, screen resolution, installed fonts, and timing side-channels to probabilistically reconstruct identity across sessions.

Fingerprinting works technically. It is also increasingly illegal. GDPR Recital 26 explicitly covers probabilistic re-identification — the fact that you didn't use a cookie doesn't mean you didn't create a profile. Apple's Intelligent Tracking Prevention actively blocks the most common fingerprinting surface APIs in Safari. Firefox has followed. The UK ICO and several EU data protection authorities issued enforcement guidance in 2025 treating canvas fingerprinting as unlawful processing without consent. The technical path is closing; the legal path is already closed for serious products.

The reframe that actually scales: "what cohort does this session look like?" You do not need to know that this is Maria, 34, Austin, buys hiking gear to serve her a relevant experience. You need to know that this session looks like the cluster of sessions where users arrived from organic search on a mobile device in the Mountain time zone, landed on a trail gear comparison page, and scrolled past the price table. That cluster has known downstream behavior from your authenticated users. You just need to project the anonymous session into it.

This is cohort-based cold-start. It is a strictly easier problem than identity reconstruction. It requires no cross-site data, no persistent identifiers, no consent beyond what is already necessary for service delivery. It requires only that you have enough historical behavior from known users to build meaningful segment priors.

How cohort inference works at serving time

The mechanics are implementable in a single sprint. During an offline training job, take your authenticated user sessions — complete with eventual outcomes (purchase, churn, upgrade, content completion) — and extract the contextual features that are also observable for anonymous users: acquisition source category, landing page category, device class, geo region, time-of-day bucket, and early-session behavioral features (scroll depth at 30 seconds, first click target category).

Train a clustering model — k-means or HNSW-indexed embeddings work well here — to group sessions by contextual feature similarity, then label each cluster with its aggregate outcome distribution and its associated item or content affinity vectors. Publish these cluster centroids as a lookup table that your serving infrastructure can hit at request time.

At anonymous session start, you compute the contextual features from the first request (referrer, landing page, user-agent, coarse geo, time features) and look up the nearest cluster centroid. That centroid's item affinity vector becomes your default ranking prior — the items and content that sessions in that cohort engaged with and converted on. This is not the same as global popularity ranking; it is cohort-specific popularity, which is meaningfully more relevant.

The critical implementation constraint is latency. This lookup is in the critical path of page render or API response. The contextual feature computation must complete in single-digit milliseconds; the nearest-neighbor lookup must be pre-computed or approximate. Hierarchical Navigable Small World (HNSW) graphs (Malkov & Yashunin, 2018) are the standard data structure here — they support approximate nearest-neighbor search at sub-millisecond latency per query, which is what you need to stay under a 30 ms total serving budget. Exact exhaustive search does not scale at production QPS.

The cold-start window: what happens in session minutes 0–3

The first three minutes of an anonymous session are your highest-leverage window. Before the user has made any explicit interactions, you are relying entirely on contextual features and your cohort prior. This is also where most personalization systems serve the global popularity ranking to everyone — the cheapest, most defensible implementation, and the worst one.

The synthetic user clone approach initializes a session-level embedding from contextual features at session start — before any clicks. The embedding is drawn from the distribution of known authenticated users whose acquisition context and entry point match the current session, weighted by how close those users' first-session behavior was to the current session's contextual features. This gives you a day-zero personalization signal that is already better than global popularity, with no identity requirement and no persistent profile.

As the session progresses, this synthetic prior updates with real behavioral signals. Transformer-based session recommendation models like SASRec (Kang & McAuley, 2018) and BERT4Rec (Sun et al., 2019) demonstrate that within-session item sequences carry strong predictive signal for next-action recommendation — signal that is available for anonymous users with no identity requirement, because it comes from the sequence of interactions in the current session, not from a persistent history.

For production systems where full transformer inference is too expensive in the serving path, a simpler recency-weighted item embedding average is a strong baseline: maintain a running average of the embeddings of items the user has interacted with, weighted so recent interactions count more heavily than earlier ones. This runs in microseconds, updates on every interaction, and shifts the session representation from "cohort prior" toward "this specific session's revealed preferences" over the course of the visit.

What you can and cannot do under 2026's privacy regime

The constraints are sharper than they were two years ago. Here is the practical breakdown, written for engineers who need to know what is actually safe to ship.

You can:

  • Use sessionStorage to maintain session state across page loads without consent in most jurisdictions. Session storage is ephemeral — it expires when the browser tab closes — which places it in the "strictly necessary for service delivery" category under the ePrivacy Directive.
  • Use server-side session IDs that expire at browser close. Same legal basis: these are functionally required to maintain session continuity.
  • Request Topics API interest categories for Chrome sessions. This requires no additional consent under the current Privacy Sandbox consent model, because the API is designed to be privacy-preserving by construction.
  • Build contextual personalization based on current URL, referrer, and user-agent. None of these require consent because they are properties of the current request, not a stored user profile.
  • Use aggregate, anonymized signals — cohort-level click-through rates, segment-level engagement distributions — without consent, because aggregate statistics over groups are not personal data under GDPR Article 4.

You should not:

  • Attempt canvas fingerprinting, AudioContext fingerprinting, or battery API fingerprinting. Safari actively blocks these. Firefox logs warnings. GDPR enforcement treats the intent — reconstructing a cross-session identifier without consent — as unlawful regardless of the technical method.
  • Stitch anonymous sessions across devices using IP + user-agent hash combinations. This is probabilistic re-identification under Recital 26, and IP addresses are personal data in the EU.
  • Store anonymous session profiles in a persistent cross-session store — Redis with a multi-day TTL, a database with an indexed anonymous ID, a CDN edge cache keyed on a fingerprint — without consent. Persistence creates a profile; a profile is personal data.
  • Append third-party data enrichment (firmographic or demographic data purchased from a data broker) to anonymous sessions. This is increasingly the subject of enforcement, particularly when it creates a profile more detailed than what the user provided.

The practical line: ephemeral session state built entirely from first-party contextual features is legally safe everywhere. Persistent cross-session profiling without consent is not, regardless of whether you call the identifier a "cookie" or an "anonymous ID."

Contextual ranking as the floor, not the ceiling

When session-level behavioral signals are thin — the user just arrived, has made zero interactions, and the Topics API returned nothing — you fall back to contextual ranking. This is not a failure state; it is a valid strategy that, done well, meaningfully outperforms global popularity.

Contextual ranking scores your item or content catalog against the features of the current context: the landing page content, the search query if any, the referrer, and time features. A basic implementation uses BM25 to match landing page content against your item corpus by keyword overlap. A more sophisticated implementation trains a contextual bandit or lightweight cross-encoder on (context features, item features) pairs with click-through labels.

The 2026 improvement over classic contextual targeting is dense embedding retrieval. A sentence transformer encodes both the landing page context and your item descriptions into a shared embedding space, enabling semantic matching instead of keyword matching. A user landing from a blog post about "asynchronous team communication" should surface productivity tools and async video software even if those items don't contain the exact phrase "async communication." Dense Passage Retrieval (Karpukhin et al., 2020) is the technique; inference is cheap enough in 2026 to run in the serving path at production latency if you pre-compute item embeddings and index them with FAISS or a vector database.

This is also the right architecture for zero-shot personalization — the case where you have no behavioral signal at all. The contextual embedding retrieval is your baseline; the session-level updates are layered on top as signal accumulates.

When an anonymous user authenticates: closing the loop

The moment an anonymous user logs in or creates an account is structurally important. You have a join point: the session ID maps to the new user ID. The session-level embedding and the behavioral sequence from the anonymous session are now first-party user data that can be written to the user profile. This means the user's first authenticated experience can be personalized from their anonymous session — no cold-start for new authenticated users who were already active as anonymous users.

Most systems drop this signal. The anonymous session gets discarded at login, and the new user starts from scratch. That is a straightforward engineering failure: you had behavioral data on this person, you chose not to use it. The fix is a session transfer endpoint that accepts an anonymous session ID and a newly authenticated user ID, validates that they map to the same browser session, and migrates the session context to the user profile. It is a one-day implementation that eliminates cold-start for a meaningful fraction of new account registrations.

The secondary value is training data. Every anonymous session that converts to an authenticated user is a labeled example for your cohort model: you can look back at what contextual features were present at anonymous session start and what the user's eventual behavior looked like. This is how your cohort priors improve over time — every conversion event is supervision signal.

Where to start: the right build order

The common mistake is starting with the hardest problem — cross-session anonymous identity reconstruction or real-time transformer inference — and ignoring the easy wins that are available today with a few days of engineering.

1. Instrument acquisition context end-to-end

Before you can use referrer and UTM data as personalization features, you need to be capturing and forwarding them correctly. Most teams drop UTM parameters at the first internal navigation. Fix this first: persist acquisition context in sessionStorage at session start and pass it as a header or request parameter with every call to your recommendation or ranking API. This is a one-day implementation and it unlocks the most durable anonymous signal you have.

2. Build cohort priors from authenticated sessions

Take your last 90 days of authenticated user sessions. Extract contextual features that are observable at anonymous session start: acquisition source category, landing page category, device class, geo region, and time bucket. Cluster these sessions by eventual outcome or engagement quality. Publish cluster centroids and associated item affinity vectors as a lookup table in your feature store. At anonymous session start, find the nearest centroid and use its affinity vector as the default ranking prior. This is one sprint and produces measurable lift over global popularity baseline.

3. Implement session-level embedding updates

Add a session context object to your recommendation API contract: a list of interacted item IDs in order, acquisition source, landing page, and device class. Use a recency-weighted average of interacted item embeddings as a session-level signal that re-ranks candidates on each subsequent request. Measure ranking quality improvement after five interactions versus session start — you will see the distribution shift toward relevance as the session accumulates signal.

4. Add Topics API as an optional feature

Request Topics API categories for Chrome sessions as an additional feature input to your ranking model. Weight it lightly — these categories are coarse and the API has strict rate limits and availability constraints. Do not gate your personalization architecture on it; treat it as a bonus feature that improves ranking quality in the sessions where it is available.

5. Wire the anonymous-to-authenticated transfer

Implement the session transfer endpoint so that every converting anonymous user carries their session context into their authenticated profile. Measure cold-start latency — the number of interactions it takes for a new authenticated user's recommendations to reach a relevance threshold — with and without session transfer. This is usually a dramatic improvement for users who were active as anonymous users before registering.

Anonymous users are not a privacy-constrained edge case you deal with later. They are the majority of your traffic, and they are emitting usable signal right now that most personalization systems are leaving on the floor. The tools are stable. The legal path is clear. The build order is not complicated. What has been missing, for most teams, is the framing shift from identity-first to session-context-first — and once you make that shift, the signal stack for anonymous users is more than sufficient to build personalization that competes with logged-in experiences.

the product behind these notes

×marble is the personalization graph.

One API. A living knowledge graph per user. Day-zero ready, explainable by construction. We built it so you don't have to.

See ×marble