Redirect Checker
Check redirects for any URL or short link: each hop's status code (301, 302, 307, 308 or meta refresh) and what it means, where it points and how long it took, followed up to 20 hops like a browser, with the point where Googlebot stops and all four http/https and www versions.
A bare domain starts at https://. Type http:// to test the HTTP-to-HTTPS hop too.
What does a redirect checker show?
A redirect checker asks a URL the way a browser would, then follows every Location header it gets back, one hop at a time, until a page answers. For each hop you see the status code, where it pointed, how long it took and which network answered.
This one times every hop: DNS, connect, TLS and first byte for a new connection, the first byte alone when the hop reuses an open connection to the same host, as browsers do. It keeps cookies per host like a browser, reads the final page for a meta refresh, a canonical tag and noindex, and marks where Googlebot would give up.
- 13301PermanentPOST may become GET4368 mshttp://google.com/
- 2302TemporaryPOST may become GET537 mshttp://www.google.com/
- 3200FinalOK393 mshttps://www.google.com/?gws_rd=ssl“Google”
- 1Total time of every hop together, before the page can start.
- 2The hop budget one cell per redirect; Googlebot's limit at 10, browsers' at 20.
- 3Each hop's site a new icon means the link left the site.
- 4The status in its kind's colour, and what it means in words.
- 5Where the time went DNS, connect, TLS and first byte on one clock.
How do I check a 301 redirect?
Paste the URL above and select Check redirects: this 301 checker asks it, follows every redirect to the final page and names each hop's status. A 301 or 308 shows green as permanent; a 302, 303 or 307 amber as temporary. A bare domain starts at https://; type http:// to test the HTTP-to-HTTPS hop too.
The verdict sums the chain up in words, the navy column draws it hop by hop on one clock, and the Chain view lists each hop's request, its status line, the Location as sent and as resolved (a relative one is allowed), and all its headers.
URL redirect checker: one link, every hop
Any URL or short link, up to 20 hops, with each hop's network, TLS version and HTTP version, and the four http/https and www ways in checked beside it.
Bulk redirect checker: up to 50 URLs
Switch to Bulk and paste a migration list, one URL per line: a table of hops, final status, final URL and verdict, ready to download as CSV.
Redirect test as Googlebot, an iPhone or Bingbot
Pick the user agent under the field: some sites send crawlers or phones somewhere else, and the chain shows exactly what that agent got.
HTTP status checker for every hop
Each status code in words, with what it means for browsers and for Google. A bot wall is called a block, not a broken page, and Cloudflare's own 52x errors are named as Cloudflare's.

The verdictWhere the URL ends, in how many hops, and whether each one is permanent or temporary, in words.The hop budgetOne cell per redirect in its kind's colour, against Googlebot's 10 and browsers' 20.Each hop's statusThe code as the server sent it, and what it means: permanent or temporary, and what happens to a POST.Where the time wentDNS, connect, TLS and first byte for each hop, on one clock from the first request to the page.301 vs 302: which redirect should you use?
Use a 301 (or 308) when a page has moved for good, and a 302 (or 307) only when it's coming back. The code tells browsers and search engines which URL to keep (RFC 9110 §15.4).
For Google, a 301 or 308 signals that the target should be canonical, the URL shown in results; a 302, 303 or 307 doesn't, so results keep the old URL (Google Search Central). A 302 isn't ignored: Google follows it and treats it as a weak signal to process the target (Google's crawler docs); the target may still be indexed if other canonical signals point to it. Bing asks for 302 only for changes shorter than two days.
Browsers cache 301 and 308 by default, so a permanent redirect you undo can stay stuck in visitors' browsers. 307 and 308 keep the request method; 301 and 302 may turn a POST into a GET, and 303 always does.
| Code | Permanent | On a POST | Browsers cache it | Google's signal | Use it for |
|---|---|---|---|---|---|
| 301Moved Permanently | permanent | may become GET | yes | strong | a page that moved for good |
| 308Permanent Redirect | permanent | kept | yes | strong | a form or API that moved for good |
| 302Found | temporary | may become GET | no | weak | a short-lived move (Bing: under 2 days) |
| 303See Other | temporary | always GET | no | weak | the page after a form is sent |
| 307Temporary Redirect | temporary | kept | no | weak | a temporary move that must keep POST |
| meta 0instant meta refresh | permanent | GET | — | strong | when the server can't redirect |
| meta 5delayed meta refresh | temporary | GET | — | weak | avoid: visitors see the old page first |
Refresh header too.Redirect chain checker: how many hops is too many?
More than three. A chain is several redirects in a row, such as http:// to https://, then to www, then to a new path. Google advises linking straight to the final URL, or keeping chains to 3 hops or fewer and always fewer than 5 (Google Search Central).
Googlebot follows up to 10 hops, then gives up, and Search Console reports a "Redirect error" (Google's crawler docs). Chrome and Firefox follow up to 20 before they show ERR_TOO_MANY_REDIRECTS. Every hop is another round trip before the page can start, so update internal links to point at the final URL.
- Google's advice: 3 or fewer
- still followed, slower
- Googlebot never sees these: Search Console shows “Redirect error”
- past 20:
ERR_TOO_MANY_REDIRECTS
How do I fix a redirect loop?
Find the two rules that disagree and make them agree on one final URL. A loop is a chain that comes back to a URL it already asked for; browsers go round until they hit 20 redirects and show ERR_TOO_MANY_REDIRECTS.
Most loops come from a rule that adds www meeting one that removes it, or from HTTP and HTTPS rules fighting behind a CDN: the CDN talks to the server over http://, the server redirects to https://, and the CDN asks again over http://. Browsers keep permanent redirects, so test the fix in a private window.
How the redirect loop checker spots a loop
A URL asked a second time with no new cookie since is a loop: the route draws it back to the hop it repeats and stops there, instead of going round to 20. A site that sets a cookie and redirects to itself gets the cookie back, as a browser would, so a login step isn't mistaken for a loop.
ERR_TOO_MANY_REDIRECTS · after 20
Meta refresh redirect and JavaScript redirects: does Google follow them?
Yes, with conditions. Google treats an instant meta refresh (content="0; URL=…") as a permanent redirect and a delayed one as temporary, and the HTTP Refresh header counts the same (Google Search Central). JavaScript redirects work only if Google renders the page, so use them as a last resort.
Even a 0-second meta refresh fires only after the page has fully loaded (HTML Standard), so visitors may see the old page first. This checker follows a meta refresh and the Refresh header as hops of their own, with their delay. It finds simple JavaScript redirects in the page and offers Check this URL, but never runs scripts: "none found" means none in the HTML, not none at all.
HTTP/1.1 301 Moved Permanently Location: https://example.com/new
- Google: by the code: 301 and 308 permanent, the rest temporary
- This checker: followed hop by hop
<meta http-equiv="refresh" content="0; URL=https://example.com/new">
- Google: 0 seconds: permanent; any delay: temporary
- This checker: followed as a hop, with its delay
window.location.href = "https://example.com/new";
- Google: only if rendering works: a last resort
- This checker: shown with “Check this URL”, never run
Do http, https, www and non-www all go to one URL?
They should. Every site has four ways in, and each should reach the same final URL, ideally in one permanent hop; anything else splits links between versions of the same page.
One exception is fine: http://www. may take two hops if it first goes to https://www. on the same host. hstspreload.org asks for exactly that order, and Mozilla HTTP Observatory takes 5 points when the first hop from http:// goes to another host.
All four reach https://github.com/http://www.github.com takes two hops: https:// on the same host first, as HSTS preload asks
Each way in is followed up to 10 hops beside the main chain.
Why does a URL redirect differently by country?
Because the server picks a country or language version from the visitor's IP address or Accept-Language header and redirects to it, so the same URL ends on different pages for different visitors. www.mozilla.org does it by language: a relative 302 to /en-US/ with Vary: Accept-Language.
Google advises against it: "Avoid automatically redirecting users from one language version of a site to a different language version", because Googlebot usually crawls from the USA and sends no Accept-Language (Google Search Central). Give each version its own URL with hreflang links, and suggest the other version with a banner instead.
From 11 places in the result runs the chain from the Website Down Checker's probes around the world, so a country redirect shows up as a different ending. Those probes follow up to 5 redirects with their own user agent.
Ahttps://shop.example/10 places end here
- youNearest to you20041 ms
San JoseSJC200152 ms
AshburnIAD20096 ms
LondonLHR20022 ms
StockholmARN20031 ms
SingaporeSIN200168 ms
SydneySYD200290 ms
São PauloGRU200201 ms
Cape TownCPT200170 ms
MumbaiBOM200121 ms
Bhttps://shop.example/ja-jp/different
OsakaKIX302200486 ms
The answer only Osaka got
HTTP/1.1 302 Found Location: /ja-jp/ Vary: CF-IPCountry
Recorded on October 24, 2026: www.mozilla.org redirects by language
HTTP/1.1 302 Found location: /en-US/ Vary: Accept-Language
Googlebot crawls mostly from the USA and sends no Accept-Language: it only ever sees https://shop.example/.
Where does this link go? Expanding short links
Paste a short or tracking link above to see where it ends before you open it: each hop's host, the final URL with every parameter added on the way, and the network that answers. It works as a redirect tracker for short links, QR codes and newsletter links alike.
Our server opens the link, not your browser, so the destination never sees your address or your cookies. Each host on the way is also looked up in Cloudflare's malware and adult-content filters: a listed host is flagged in red, with no link to open, and a clean one reads "not on Cloudflare's malware or adult lists". That isn't a promise the site is safe, so use this link redirect checker as one check among several.
Short link
https://youtu.be/jNQXAC9IVRw
303 See Other · 260 msLands on
https://www.youtube.com/watch?v=jNQXAC9IVRw&feature=youtu.be
200 OK · 768 ms- AS15169Google · the network that answers
- TLS 1.3both hops encrypted
- our serveropened it, not your browser
feature=youtu.be on the way: tracking parameters show up in the final URL before you click.How do I set up a 301 redirect in nginx, Apache or Cloudflare?
Redirect on the server and write the 301 out: a return line in nginx, a Redirect line in Apache's .htaccess, a rule in IIS's web.config, a line in a _redirects file on Cloudflare or Netlify, an entry in vercel.json, a call in Express. Pick your platform below and copy the snippet.
Watch the defaults: without a code, nginx, Apache, Express and Cloudflare's _redirects send a temporary 302, and Vercel sends a 308, which Google treats like a 301. After deploying, check the old URL here: it should answer one 301, straight to the new URL.
| Platform | Written as | Sends |
|---|---|---|
| nginx | return URL; | 302 temporary |
| Apache | Redirect /old /new | 302 temporary |
| IIS | action type="Redirect" | 301 permanent |
| Cloudflare | _redirects | 302 temporary |
| Vercel | vercel.json redirects | 308 permanent |
| Netlify | _redirects | 301 permanent |
| Express | res.redirect(path) | 302 temporary |
location = /old-page {
return 301 /new-page;
}Inside the site's server { } block, then reload nginx. A bare `return URL;` with no code sends a 302.
How to check redirects in Chrome or with curl
In Chrome, open DevTools (F12), go to Network, tick Preserve log and load the URL: each hop is a row with its status. With curl, curl -sIL prints every response head as it follows the redirects.
Both run from your own machine, with your cookies and your browser's memory of HTTPS-only sites. That's why Chrome sometimes shows a 307 Internal Redirect no server sent: it upgraded the request to HTTPS itself and says why in Non-Authoritative-Reason (Chromium source). Since Chrome 115 it also tries HTTPS first for typed http:// addresses, so the server's own HTTP redirect may never show.
$ curl -sIL http://google.com | grep -iE '^(HTTP|location)' HTTP/1.1 301 Moved Permanently Location: http://www.google.com/ HTTP/1.1 302 Found Location: https://www.google.com/?gws_rd=ssl HTTP/2 200
307 Internal Redirect isn't from the server: Chrome made it because it already knew the site is HTTPS-only, and says so in Non-Authoritative-Reason: HSTS. A server-side checker shows only what the server sends.
Redirect checker: frequently asked questions
Is a 302 redirect bad for SEO?
How many redirects can Googlebot follow?
How do I test a redirect as Googlebot or on an iPhone?
Is this 301 redirect checker free, and can I check many URLs at once?
Why does Chrome show a 307 the server didn't send?
How long should I keep a 301 redirect?
Where does this link go, and is it safe to open?
Why do I get ERR_TOO_MANY_REDIRECTS?
Should HTTP redirect to HTTPS with a 301?
Does a 301 redirect pass link equity?
Missing something?Suggest a feature or a new tool
Related website tools
HTTP Header Checker
Response headers exactly as sent, with a Mozilla Observatory security grade
Link Analyzer
Analyze all links on a webpage with dofollow/nofollow detection and HTTP status checking
Website Down Checker
Is it down for everyone or just you? Check any site from 11 places and your own connection, with a live screenshot
SSL Certificate Check
Verify SSL certificate validity and security details
DNS Lookup
Every DNS record from the domain's own nameservers, beside Google's and Cloudflare's cache
Hosting Checker
Find out who hosts any website: web host, CDN, CMS, email provider, registrar and SSL issuer
Subdomain Finder
Discover all subdomains of any domain
WHOIS Lookup
Look up domain registration, registrar, and owner details via RDAP