301 redirect checker
Paste a link to see whether it answers with a 301, 302, 307 or 308, every hop it takes with its Location and timing, and where it finally lands.
How to check a 301 redirect
- 1
Paste the link
The old address you want to test, with or without https://. Shortened links, tracking links and campaign URLs work too.
- 2
Press Check
Each hop is requested with HEAD, following the chain by hand rather than letting the browser hide it. The response body is never downloaded.
- 3
Read the chain hop by hop
A permanent redirect shows 301 or 308 under Status and its target under Location. The last row shows where the chain ends; 200 means the page loads. Save it all as CSV.
What the 301 redirect checker shows
Paste an old address and the 301 redirect checker requests it from our server, stopping at each redirect to write it down instead of following it silently. Each row of the result is one hop: the URL requested, the status code it answered with, the Location it points to, how long the answer took, and notes such as a change of domain, a drop from https to http, or a Location header sent without a redirect code. Below the table is the address where the chain ends. A clean move is one 301 row followed by a 200. A 301 that ends in a 404 points at a missing page, a 302 where you meant a permanent move is worth changing, and two or more redirect rows in a row are a chain to shorten.
301, 302, 307 and 308: what each code means
A 301 says the page has moved for good, and Google takes it as a signal to index the new address instead of the old one. A 302 says the move is temporary, so Google does not treat the target as the new address: right for a short campaign or an A/B test, wrong for a site migration, where a 302 can keep the old URL in search results. A 307 is a temporary redirect that promises to repeat the same request method, and a 308 makes the same promise for a permanent move; both matter for form submissions, where an older redirect could turn a POST into a GET and lose the data. A 303 always sends the follow-up as a GET, which is its purpose.
Why a long chain costs you
Every hop is a full round trip: a DNS lookup if the domain changes, a TLS handshake if the scheme does, and the network latency in between, all before the first byte of the real page. On a mobile connection a few hops add up to a wait people notice. Crawlers have a limit too: Google's crawlers follow up to 10 redirect hops, the same number this checker stops at. Chains also rot: remove one hop in the middle and everything after it becomes unreachable. If you find a chain of three or more, point the first link straight at the last one.
The link is checked, not kept
The address you paste travels in the body of the request, not in a URL that would land in access logs. It is used to make the requests and then dropped: no log, no database, no analytics event. The body of every hop is discarded unread, so no content from the sites in the chain reaches us. Checks are counted per visitor through a daily-salted hash from which no address can be recovered.
Frequently asked questions
How do I check if a URL has a 301 redirect?
Paste the old URL and press Check. The first row shows the code the address answered with: 301 or 308 for a permanent redirect, 302, 303 or 307 for a temporary one, 200 if it does not redirect at all. The Location column shows where it points, and the last row shows where the chain ends and whether that page answers 200.
Should I use a 301 or a 302 redirect?
Use a 301 when the move is permanent: a new domain, a renamed page, http to https. Google takes that as a signal to index the new address instead of the old one. Use a 302 only when the old address is coming back, such as a short promotion or a test, because Google does not treat a 302 target as the new address to index. A 308 is a permanent redirect that also keeps the request method, which matters for forms.
Does the checker show the response headers?
It shows the header a redirect depends on: Location, the address each hop points to. Two more are read for the Notes column: Strict-Transport-Security, shown as Sends HSTS, and Refresh, which the checker follows as a redirect when a page answers 200. Other headers, such as cache or cookie headers, are not listed, and the response body is never read.
Can I check how Googlebot or a phone is redirected?
Yes. Under Pretend to be, pick Googlebot or A phone browser instead of a desktop browser, and every hop is requested with that user agent, so a site that sends phones to a mobile address shows it in the chain. The request still comes from our server, not from Google, so a site that verifies crawlers by IP address may treat it as an ordinary visitor.
What is a meta refresh and why is it checked separately?
It is a redirect written into the page rather than into the HTTP response. This checker follows the Refresh header form. It does not read page markup to find the tag version, because downloading arbitrary pages on request is exactly what a public endpoint must not do. A 200 at the end of a chain carries a note saying the markup was not read.
What does a redirect loop look like here?
The chain stops as soon as an address repeats, and the report names both step numbers that point at each other, for example steps 3 and 5, so you can see which pair of rules is fighting.
What are the limits of the checker?
Up to 10 hops, and you can lower the limit; 5 seconds per hop and 20 seconds for the whole chain; http and https links up to 2,048 characters on ports 80 and 443; 60 checks an hour per visitor. If a chain runs past the limit, the hops collected so far are still shown. Localhost, private network ranges and internal hostnames are refused at every hop, because the request is made by our server, and a server that fetched any address could be pointed at the network it lives in.