Signal · signalsVersion 5

private_click

Whether the browser supports WebKit's Private Click Measurement, read from a link element that is never attached to the page.

private_click at a glance (from the library code, signalsVersion 5)
Component nameprivate_click
In the visitorIdyes
structuredId groupbrowser (engine and build)
Hashingplain value; a digest only when longer than 128 characters or not printable ASCII
Excluded underno browser class
Inner timeout1000 ms
Added insignalsVersion 2
In plain words

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

  1. One <a> element is created with document.createElement('a'). It gets no href and is never attached to the document.
  2. The property is read. If it is undefined or null, the value is none; otherwise it is the property’s value as a string (for a fresh element usually 0).

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

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.