First CH AppsSmall apps that need a server

日本語

First CH Apps / Redirect Chain Tracer

Redirect Chain Tracer

Enter a URL and our server fetches it one hop at a time (redirect: manual), listing every 301, 302, 303, 307, 308 and meta refresh in order. You get the status, destination and timing of each step, the final URL, and an SEO warning when 3 or more redirects are chained. Up to 5 hops are followed.

Grading the header values themselves belongs to the Security Header Grader; title and canonical checks belong to the Meta Tag & SEO Basics Check. This page answers one question only: what does the URL pass through, and where does it land?

How it is graded

3 or more chained redirects is flagged (Google advises against chains longer than one or two hops; each extra hop costs crawl budget and load time).

302 and 307 (temporary) used for a permanent move is flagged. Permanent moves should be 301 or 308.

A meta refresh is slower than a server-side redirect and handled inconsistently, so we suggest replacing it with a 301.

Timings are measured from our server (Cloudflare Workers) as each hop is fetched. They vary by network and region, so read them as a comparison between hops rather than an absolute number.

Tracing follows at most 5 hops within 10 seconds and re-checks the destination at every hop (if a hop points into a private network, tracing stops there).

SERVER PROCESSING — what we send and what we keep

Sent: only the URL you type. Our server (Cloudflare Workers) fetches it with a public GET and repeats that up to five times while there is a destination to follow. No cookies and no credentials are sent.

Stored: nothing. The trace lives entirely inside one request and writes neither the URL nor the result to any database (no KV, no D1). It leaves memory when the request ends.

Returned: the status, URL and timing of each hop, plus our findings. We never re-serve the fetched page (this app cannot be used to browse other sites through us; we read only the first 64KB of the body, and only to find a meta refresh).

Note: public GET only. URLs pointing at internal networks, localhost or private IPs are rejected. Redirects performed in JavaScript (assigning location.href) cannot be followed server-side.

Use it as an API

POST /redirect-trace/api/trace with JSON ({"url": "https://example.com/"}) or a form body and you get the same trace back as JSON.