pixellint

vendor/google-analytics-collect · ecosystem evidence

The /g/collect hit the Google tag actually fires

Google documents the tag and the Measurement Protocol. It does not document this request format. The pack is labeled ecosystem evidence for that reason, and is scoped to what the Google tag generates.

v=1 is Universal Analytics. A tid that is not G- is a stale UA property. Both still 200.

v=1 is Universal Analytics

The collect transport for GA4 is v=2. A leftover UA hit is the usual migration artefact.

Rule: vendor.google-analytics-collect.param.v.invalid

What this pack matches

Hosts
analytics.google.com, google-analytics.com
Paths
/g/collect, /debug/g/collect
Vendor docs
developers.google.com/analytics/devguides/collection/ga4

Rules

Codes are stable. A finding in CI, MCP, or the playground lands on the same id.

Field Required What it checks Rule ids Source
v required GA4 collection uses protocol version 2. Version 1 is Universal Analytics, which stopped processing data. Fix: Send `v=2` from a Google tag configured for a GA4 property. vendor.google-analytics-collect.param.v.missing
vendor.google-analytics-collect.param.v.empty
vendor.google-analytics-collect.param.v.invalid
docs
tid required It is the GA4 measurement ID, which starts with `G-`. A `UA-` value here is a Universal Analytics property that no longer collects data. Fix: Point the tag at a GA4 measurement ID. vendor.google-analytics-collect.param.tid.missing
vendor.google-analytics-collect.param.tid.empty
vendor.google-analytics-collect.param.tid.invalid
docs
cid required It is the client ID that ties events to one browser. Without it, hits cannot be attributed to a session. vendor.google-analytics-collect.param.cid.missing
vendor.google-analytics-collect.param.cid.empty
docs
en recommended It is the event name. vendor.google-analytics-collect.param.en.missing
vendor.google-analytics-collect.param.en.empty
docs

Validate a payload

pixellint validate url "$ARTIFACT" --rulepack vendor/google-analytics-collect

Or paste it into the playground. Same engine, in the browser, nothing sent anywhere.

cargo install pixellint · npm install pixellint