301→302
A temporary redirect where a permanent one belongs. Found by Redirect checker →
redirect loop
The URL redirects back to itself and never settles. Found by Redirect checker →
Data sources

CrUX Core Web Vitals report

Field Core Web Vitals from the Chrome UX Report, kept separate from lab timings so the two are never confused.

CrUX Core Web Vitals report

Credential-gated

crux-report needs your API key; without it the report says it did not run.

How it works

Three steps, one saved scan

  1. Add your Google API key

    Store a Chrome UX Report API key in the config path or CRUX_API_KEY. Without it the report says it did not run.

  2. Pull field p75 for one URL

    Run crux-report on a URL, optionally with --form-factor PHONE or DESKTOP, and get LCP, INP and CLS at the 75th percentile.

  3. Read the verdicts against official thresholds

    Each metric is marked good, needs improvement or poor using the web.dev limits (LCP 2.5/4 s, INP 200/500 ms, CLS 0.1/0.25). Missing data is shown as unavailable, never as passing.

How to run it

One command

bash
seohead crux-report --url https://example.com/

Install first: installation guide. Every command also runs as an MCP tool for AI agents.

FAQ

Questions

CrUX Core Web Vitals report
You need a Google Cloud API key with the Chrome UX Report API enabled. The calls are free within Google's API quota.
CrUX has no current record for that URL or form factor, the collection period is invalid, or the provider call failed. An unavailable metric is never counted as a pass.
Use --origin for an origin-level aggregate. It is labelled as an origin aggregate and does not stand in for missing URL data. For several pages, pass --urls with a sample of up to 25 URLs.
No. CrUX is field data from real Chrome users. PSI and Lighthouse are lab measurements and stay separate in the reports.
Save the crux-report JSON, then pass it to site-audit with --crux-evidence. The audit reads the saved file locally and does not call Google.

Check your redirects locally