← Chrome 151 reference

v151 · origin trial · performance · speculation rules

Prefetch activation beacon

Limited availability

  • Chrome · origin trial 151
  • Edge · not separately reported
  • Firefox · no signal
  • Safari · no signal

Not on the Baseline register: the ChromeStatus API record marks web_feature as “Missing feature” and a webstatus.dev query returns zero matches (2026-07-28). Vendor positions on the record are “No signal” for both Firefox and Safari.

The on-prefetch-activation HTTP response header enables servers to specify a telemetry endpoint that the browser notifies when a prefetched resource is used for navigation. Developers gain a reliable signal to measure the precision and performance impact of their prefetch strategies.

Origin trial — API surface may move This feature is in origin trial (the milestone=151 listing files it as “Origin trial”, verified 2026-07-28). To use it:

Serving the token, and local testing:

<meta http-equiv="origin-trial" content="TOKEN_FROM_DEVELOPER.CHROME.COM/ORIGINTRIALS">

# local development instead of a token:
chrome --enable-blink-features=PrefetchAndPrerenderActivationBeacon

Enrollment notes: no feature-specific error surface exists for enrollment — the trial uses Chrome's standard origin-trial infrastructure, and neither the explainer nor the ChromeStatus record defines feature-specific token-failure behavior (2026-07-28). Enrollment adds no data exposure of its own: the origin-trial token is static and origin-scoped; the privacy-relevant data flow is the beacon itself, analyzed under security and privacy.

at a glance

What it isAn HTTP response header, on-prefetch-activation, that registers a same-origin telemetry endpoint; the browser sends a credentialless HEAD request to that endpoint when the prefetched (or prerendered) document is actually consumed by a navigation
Milestone listingChrome 151 — Origin trial (listing, verified 2026-07-28; the listing is authoritative per gendn invariant #2)
Applies toSpeculation Rules API prefetch and prerender loads — explicitly not legacy <link rel=prefetch>/<link rel=prerender> and not subresource prefetch (explainer non-goals)
Beacon requestHTTP HEAD, credentialless (no cookies/auth headers), dispatched post-commit by the browser navigation stack; not interceptable by Service Workers, page JavaScript, or extensions
Endpoint restrictionSame-origin with the prefetched page (validated against the final response URL after redirects); one-time use; discarded if the user navigates away from the referring page
Runtime featurePrefetchAndPrerenderActivationBeacon (status experimental, public, origin-trial-gated) in runtime_enabled_features.json5
WPTTwo tentative tests: prefetch and prerender activation beacons
ChromeStatus5118934710878208 — Prefetch activation beacon (blink component Blink>Loader>Preload)
Source: chromestatus.com/feature/5118934710878208; explainer; runtime_enabled_features.json5

why it exists

Sites that use the Speculation Rules API need to know how often their prefetches actually pay off. Today that measurement relies on client-side JavaScript (for example a sendBeacon fired when the page becomes visible), which the explainer rejects as unreliable for three reasons:

Because the activation beacon is dispatched directly by the browser's navigation stack when a prefetch is consumed, it is immune to all three failure modes: no script executes, no Service Worker boots, and no extension can block, delay, or tamper with the signal.

Source: explainer — considered alternatives; explainer — browser mechanism

syntax

The server includes the header on the response to the speculative (prefetch or prerender) request. The value is the relative URL of the telemetry endpoint:

on-prefetch-activation: <relative-endpoint-path>

Key properties of the grammar:

Source: explainer — header syntax; WPT beacon server (sets on-prefetch-activation with a relative URL)

browser mechanism

  1. The browser process consumes the header from the prefetch response and associates the endpoint URL with the prefetched document in its internal cache.
  2. Activation is defined as the point at which a document loaded via a speculative trigger transitions to the active state in its browsing context — typically when a user-initiated navigation is satisfied by the previously prefetched response.
  3. The beacon is dispatched after the navigation commits (post-commit dispatch), so the signal means the page was actually shown to the user, not merely speculated.
  4. The browser sends a credentialless HTTP HEAD request to the endpoint — no cookies, no authentication headers, no stored credentials.
  5. Dispatch is non-interceptable: it does not pass through the origin's Service Worker, cannot be observed or modified by client-side JavaScript, and cannot be blocked by browser extensions.
Source: explainer — browser mechanism; explainer — non-interceptable execution; explainer — activation definition & post-commit dispatch

endpoint lifetime and devalidation

To prevent “zombie” beacons from unrelated navigations, the activation trigger has a deliberately short, scoped lifetime:

RuleContract
One-time useThe trigger is valid for a single activation event; once the beacon fires it is devalidated for the page
Referrer-boundThe trigger is tied to the speculative context of the triggering (referrer) document — if the user navigates away from the referrer page to an unrelated destination, the activation metadata is discarded
No general cache persistenceThe beacon does not fire for general navigations that later hit the disk cache after the speculative context expired; it fires only when the speculative loading logic explicitly consumes the response for a predicted navigation
No cross-session stateActivation metadata lives in the browser's speculative loading context and is discarded when that context expires; nothing persists across browsing sessions (Security & Privacy Questionnaire §6)

The explainer's three canonical scenarios:

The same rules as a state summary:

active speculative context + committed navigation → beacon sent once → trigger devalidated
referrer navigated away before activation        → activation metadata discarded (no beacon)
speculative context expired (disk-cache hit)     → no beacon
second navigation to the same prefetched page    → no beacon (one-time use)
Source: explainer — endpoint lifetime; explainer — examples; Security & Privacy Questionnaire §6

origin boundaries

To prevent the API from becoming a cross-site tracking vector, the reporting endpoint must be same-origin with the prefetched page:

Only the site being prefetched — which already learns that the user visited — receives the signal.

Source: explainer — origin boundaries; Security & Privacy Questionnaire §14

redirect rules

PhaseRule
Speculative navigation redirectsOnly the on-prefetch-activation header in the final response is processed
Headers on intermediate redirect responses are ignored and dropped
Same-origin validation is checked against the final response's URL, not the initial request URL
Beacon request redirectsThe beacon HEAD request may only redirect to URLs same-origin with the original beacon URL
A redirect to a cross-origin URL causes the browser to immediately block and discard the request
The method must remain HEAD; a redirect that changes the method (e.g. a 302 that would turn it into GET) is blocked
Source: explainer — redirect behavior

coverage: prefetch, prerender, and explicit non-goals

The Chromium runtime feature is named PrefetchAndPrerenderActivationBeacon and WPT carries both a prefetch and a prerender activation-beacon test, so the feature covers both Speculation Rules load types. One explainer sentence — that the beacon fires when the navigation “is successfully committed in a non-prerender context” — reads against that; the redirect section, the flag name, and the prerender WPT all treat prerender activation as in scope. gendn records the wording difference rather than resolving it.

Explicit non-goals (the header has no effect here):

Source: explainer — non-goals; explainer — browser mechanism; runtime flag name; WPT activation-header directory

examples

A server opting a prefetched page into activation reporting:

# Response to the speculative (prefetch) request
HTTP/1.1 200 OK
Content-Type: text/html
on-prefetch-activation: /telemetry/prefetch-hit?rule=product-page&id=92

When the user later navigates to that prefetched page and the navigation commits, the browser sends — once, with no cookies or authorization headers:

HEAD /telemetry/prefetch-hit?rule=product-page&id=92 HTTP/1.1
Host: shop.example

The page that issues the speculation needs nothing new beyond its normal speculation rules (plus the origin-trial token):

<script type="speculationrules">
{
  "prefetch": [{ "urls": ["/products/92"] }]
}
</script>
Live example from the Chrome Platform Showcase (route HEAD-checked 200, 2026-07-28).Source: chrome-platform-showcase
Source: header grammar per the explainer; server parameters pattern per the Security & Privacy Questionnaire §3/§13; WPT activation_beacon.py (header value, HEAD method assertion)

security and privacy

Source: explainer — security and privacy considerations; Security & Privacy Questionnaire

error and edge behavior

SituationBehavior (per explainer)
Endpoint not same-origin with the prefetched pageReporting prohibited — the cross-origin beacon is not sent (origin boundaries)
Header present on an intermediate redirect responseIgnored and dropped; only the final response's header is honored
Beacon redirect goes cross-originBrowser immediately blocks and discards the request
Beacon redirect would change the method (e.g. 302 → GET)Blocked — the method must remain HEAD
User navigates away from the referrer before activationActivation metadata discarded; no beacon (lifetime rules)
Second navigation to the same prefetched pageNo beacon — the trigger is one-time use
Endpoint failure / network error on the beacon requestNot specified in the explainer; no retry contract is defined anywhere in the sources (recorded as an open question in the critique)
Source: explainer — redirect behavior; explainer — endpoint lifetime

web platform tests

The feature has upstream (tentative) WPT coverage under speculation-rules/activation-header/:

Both tests are tentative, matching the feature's pre-ship status.

Source: WPT activation-header directory, fetched 2026-07-28

browser compatibility

Interim table. There is no BCD entry (BCD http/headers/ has no on-prefetch-activation.json, verified 2026-07-28) and no web-features entry (webstatus.dev query, zero matches). Rows below are compiled from the linked primary sources, not from BCD.

BrowserSupportEvidence
ChromeOrigin trial from 151milestone=151 listing (“Origin trial”); flag record (experimental, origin-trial-gated)
EdgeNot separately reportedChromium-based; no separate position on the ChromeStatus record
FirefoxNo signalChromeStatus API record vendor views
SafariNo signalChromeStatus API record vendor views
Source: chromestatus.com/feature/5118934710878208; runtime_enabled_features.json5

specifications

DocumentStatus
Prefetch Activation Beacon API — explainer (proponent: Jiacheng Guo, Google)The only substantive specification document (header syntax, mechanism, lifetime, redirect and privacy rules)
Security & Privacy QuestionnaireCompleted, in the same repository
WICG/proposals #284Incubation proposal, open
index.bs (Bikeshed)An unfilled template (“The TODO API”) as of 2026-07-28 — no formal spec text exists yet; treat the explainer's contracts as proposal-stage
Source: repository contents fetched 2026-07-28

see also