| Component name | private_click |
|---|---|
| In the visitorId | yes |
| structuredId group | browser (engine and build) |
| Hashing | plain value; a digest only when longer than 128 characters or not printable ASCII |
| Excluded under | no browser class |
| Inner timeout | 1000 ms |
| Added in | signalsVersion 2 |
Apple’s WebKit engine has a privacy-preserving way to measure ad clicks, called Private Click Measurement. Browsers that support it give every link element an extra property. WhiskerJS checks whether that property exists on a fresh link that it never shows. It tells WebKit browsers that support the feature apart from all others.
What it reads
The attributionSourceId property (or its lower-case form attributionsourceid) of a new <a> element.
How the technique works
- One
<a>element is created withdocument.createElement('a'). It gets nohrefand is never attached to the document. - The property is read. If it is
undefinedornull, the value isnone; otherwise it is the property’s value as a string (for a fresh element usually0).
Why it helps
Only WebKit builds with the feature have the property, so the value splits browsers into two groups along an engine and version line. It adds little within a group but is very stable, which is why it is in the visitorId’s browser group.
For your server it is also a consistency check: a result that claims to be Safari (by user agent or vendor) but has none here, or a Chromium user agent with a WebKit attribution value, deserves a closer look. Combine it with apple_pay, the other WebKit-only signal in the group.
Stability
Very stable: it changes only if the browser adds or removes the feature in an update.
Browser support and what blocks it
- Safari on macOS and Safari on iOS: the property exists when the WebKit build has the feature. Other iOS browsers share WebKit, but whether they expose it can depend on how they embed it.
- Chromium browsers (Chrome, Edge, Brave) and Firefox:
none.
No browser class excludes it.
Privacy
The value is a feature flag of the browser build. The element is never attached, so no click attribution data is created, read or sent.
How WhiskerJS handles noise and failures
| Status | ruleId | When |
|---|---|---|
ok |
none or the property value |
|
unavailable |
no_document |
no document or no createElement |
blocked |
threw, security_error |
creating the element throws |
excluded |
caller_excluded |
you excluded it |
timed_out |
timeout, aborted |
budget or abort |
Never hashed in practice (the value is short ASCII).
Example value
In the container test, headless Chromium and Firefox reported none and headless WebKit reported 0: the property existed on the fresh link.
Questions and answers
Does private_click measure clicks or ads?
No. It creates one link element without an address, reads one property and throws the element away. It never attaches it, never clicks it and never sends anything.
Why is the value none in Chrome?
Private Click Measurement is a WebKit feature. Browsers without it have no attributionSourceId property, so the component reports none, which is an ok value.