Core Web Vitals Diagnostic & Field-Data Audit Checklist
Interactive diagnostic scorecard targeting Interaction to Next Paint (INP), Largest Contentful Paint (LCP) sub-parts, and Cumulative Layout Shift (CLS).
GA4 & Server-Side Tagging Health Check Suite
Progress is saved locally in your browser. Complete each checkpoint to calculate your audit score and export a compliance report.
1. Property Configuration & Governance
Core GA4 data stream setup, retention limits, and BigQuery export linkage.
Default is 2 months. Change to 14 months in Admin > Data Settings > Data Retention.
Ensure raw unthresholded event tables stream to BigQuery GCP project.
Set Reporting Identity to Device-based or Blended to avoid 100% thresholding on low-volume custom dimensions.
Traffic filters set to Active to exclude office and staging hits from production views.
Domains listed in Data Stream > More Tagging Settings > Configure your domains.
2. Data Layer & Event Architecture
Timing, casing and dataLayer structure verification.
window.dataLayer = window.dataLayer || [] declared in head before gtm.js loads.
All custom event names and parameters use lowercase snake_case (no camelCase or spaces).
Single-page app route changes do not fire native and manual page_views simultaneously.
Items array contains item_id, item_name, price, quantity, and item_category as strings/numbers.
Purchase event deduplicated in sGTM and GA4 to prevent repeat counts on order confirmation refreshes.
3. Enhanced Conversions & Consent Mode v2
First-party data normalisation and DMA compliance signals.
gtag("consent", "default", { ad_storage: "denied", ... }) executes before container loads.
Consent update push verified in Tag Assistant with correct gcd parameter.
Email lowercased and trimmed, phone in E.164 (+61...) before hashing.
Meta CAPI and Google Ads match browser and server hits with identical event_id.
Optimising Interaction to Next Paint (INP)
INP measures page responsiveness by observing the latency of all user interactions. The most common bottlenecks stem from heavy JavaScript execution inside click listeners and unoptimised third-party tags executing on the main browser thread.
Implementation Code & Script
Logs long interaction tasks directly in DevTools console with duration and target element details.
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
if (entry.duration > 50) {
console.warn('Long Interaction Task detected:', {
duration: Math.round(entry.duration) + 'ms',
startTime: Math.round(entry.startTime) + 'ms',
name: entry.name,
target: entry.target,
});
}
});
});
observer.observe({ type: 'event', buffered: true, durationThreshold: 50 });How to cite and attribute this tool
MIT LicenceThis resource is free, open and un-gated under the MIT Open Source Licence. You are encouraged to use, integrate and cite it with attribution:
@misc{geraghty_core_web_vitals_audit,
author = {Geraghty, Gordon},
title = {Core Web Vitals Diagnostic & Field-Data Audit Checklist},
year = {2026},
url = {https://gordongeraghty.com/resources/technical-seo/core-web-vitals-audit},
note = {Head of Performance, Empire Amplify}
}Changelog & Version History
v1.0.0Initial release of interactive CWV scorecard with INP task breakdown.