Redirect Checker
Follow every redirect hop with status codes, timing and headers, and spot loops and chains.
About the redirect checker
A redirect tells a browser or crawler that the content it asked for has moved, using a 3xx status code and a Location header pointing at the new URL. This tool follows every hop from the URL you enter through to the final destination, recording the status code, response time and headers at each step, so you see the entire path rather than just the end result.
A redirect chain is more than one redirect in a row before reaching the final page, which happens when, for example, http redirects to https, which redirects to the www subdomain, which redirects to a final canonical path. Each hop adds latency and, for search engines, dilutes some of the ranking signal that would otherwise pass straight through. 301 is a permanent redirect and passes most ranking signals to the target; 302 and 307 are temporary and are meant for redirects that will not stay in place, such as a maintenance page. Using 301 for redirects you intend to keep, like the canonical host or the https upgrade, is generally the right choice.
308 is the one people forget. A 301 permits a client to turn a POST into a GET when it follows the redirect, which is harmless for ordinary page links and destructive for an API endpoint; 308 is the permanent redirect that preserves the method and body. Use 301 for canonical host and HTTPS redirects, and 308 where the request method matters.
Two faults are graded severely rather than as untidiness. A hop that goes from HTTPS back to plain HTTP is a protocol downgrade and puts the request back on the wire in clear text, whatever the final destination does. And a 3xx response with no Location header, or with one containing control characters or a scheme that is not http or https, is reported as malformed and is never repaired into what we guess it meant — a redirect we cannot follow is a redirect a browser may follow somewhere else.
The tool also detects redirect loops, where a chain eventually points back to a URL already visited, which browsers refuse to follow past a limit and show as an error; these usually come from two independent redirect rules, such as a host redirect and a path redirect, that were not tested together. Tracing every hop explicitly, rather than only checking the final destination, is what makes a loop or an unnecessarily long chain visible in the first place, since a browser hides the intermediate steps from an ordinary visit.
Common questions
- What is a redirect chain?
- Several redirects in a row before reaching the final page. Each hop adds latency for visitors and weakens some of the SEO signal that would otherwise pass straight through to the final URL.
- 301 or 302?
- 301 is permanent and passes ranking signals to the target; 302 and 307 are temporary. Use 301 for redirects you intend to keep, such as the canonical host or an HTTPS upgrade, and reserve the temporary codes for things that really are temporary.
- When should I use 308 instead of 301?
- When the request method matters. A client following a 301 is permitted to turn a POST into a GET; 308 is permanent and preserves the method and body, which is what an API endpoint needs.
- Why did a hop show as refused?
- The redirect pointed at an address we will not connect to — a private, loopback, link-local, carrier-grade NAT or cloud metadata address. That is a deliberate limit on the scanner, not a fault in your site, but a public redirect landing on one is worth looking at.
- Why does my site redirect http to https to www?
- That is usually two separate, unmerged rules: one for the protocol and one for the host. Combine them into a single redirect straight to the final URL to remove the extra hop.
- What causes a redirect loop?
- Two redirect rules that each point at a URL the other rule redirects away from, so following them cycles indefinitely. Browsers stop after a fixed number of hops and show an error.
What this tool checks (8 rules)
- http.redirects.chain-too-long — The redirect chain is longer than it needs to be
- http.redirects.cross-host-hop — The chain moves between hostnames
- http.redirects.hop-refused — A redirect pointed somewhere the scanner will not follow
- http.redirects.loop — The redirect chain loops
- http.redirects.malformed-location — A redirect destination is malformed
- http.redirects.missing-location — A redirect response has no destination
- http.redirects.protocol-downgrade — A redirect drops from HTTPS to plain HTTP
- http.redirects.temporary-for-canonical — A permanent redirect is marked temporary