First CH Apps / 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?
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).
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.
POST /redirect-trace/api/trace with JSON ({"url": "https://example.com/"}) or a form body and you get the same trace back as JSON.