How to check a redirect
Type or paste the address you want to test and press Check redirects. Our server requests that URL the way a desktop browser would, but it does not follow the redirect automatically: it stops at every hop, notes the status code, the Location it points to and how long the server took, then requests the next one. It also reads the HTML of each page for a <meta http-equiv="refresh"> tag, which a plain HTTP check would miss.
The result shows the chain from top to bottom. Green is the final page, gold steps are redirects and red means an error. Below the chain you get the final URL, the total time and a list of anything worth fixing, with what it means for visitors and for Google. To check a site migration, switch to Up to 10 URLs and paste a sample of old addresses, one per line.
What a URL redirect is
A redirect is the server's way of saying "this page lives somewhere else now". When a browser asks for the old address, the server answers with a status code in the 300s and a Location header holding the new address, and the browser requests that instead. Visitors usually never notice, apart from the address bar changing.
A typical example: you type http://example.com, the server answers 301 Moved Permanently with Location: https://www.example.com/, and the browser loads the secure www version. Other common cases are a renamed blog post, a product moved to a new category, a page merged into another one, or a whole domain moved after a rebrand.
301, 302, 307 and 308: which redirect means what
The status code tells browsers and search engines whether the move is for good, and whether the browser may change the request method (a form sent with POST, for example) when it follows the redirect.
| Code | Meaning | Method kept | How Google treats it |
|---|---|---|---|
301 | Moved permanently | Not guaranteed | Strong signal that the target should be the indexed URL |
308 | Moved permanently | Yes | Same as 301 |
302 | Found (temporary) | Not guaranteed | Weak signal: the old URL may stay in results |
303 | See other (temporary) | No, becomes GET | Same as 302 |
307 | Temporary redirect | Yes | Same as 302 |
For a page that has moved for good, use 301 or 308. For a short-term detour (a seasonal page, a maintenance notice, an A/B test) use 302 or 307, and remove it when you are done. Google's own documentation lists 301 and 308 as permanent and 302, 303 and 307 as temporary, and says it uses a permanent redirect as a signal that the target should be canonical, while a temporary one is not.
A 307 can also appear without your server sending it. When a site uses HSTS, the browser upgrades http:// to https:// on its own and shows that step as a 307 "Internal Redirect" in its developer tools. This checker talks to the server directly, so it reports what the server really sends.
Meta refresh and JavaScript redirects
Some redirects are not HTTP redirects at all. A meta refresh is a tag in the page's HTML that tells the browser to load another URL, either at once or after a delay. Google reads an instant meta refresh as a permanent redirect and a delayed one as a temporary redirect. They work, but a server-side 301 is faster for visitors and clearer for every crawler, so use meta refresh only when you cannot change the server.
JavaScript redirects (window.location and similar) run only after the page loads and its script executes. Google recommends them only when neither a server redirect nor a meta refresh is possible, because it may never see them if rendering fails. This checker does not run JavaScript, so a JavaScript redirect shows up as a normal 200 page: if a URL lands where you did not expect, open it in a browser to check.
Redirect chains and loops
A chain is a redirect that points at another redirect: http://example.com to https://example.com to https://www.example.com/. Each extra hop is another round trip to the server, so pages load later, especially on mobile. Google's crawlers follow up to 10 hops by default and then stop, and long chains are easy to break during the next migration.
Chains usually build up over years: an HTTPS move, then a www change, then a new URL structure, each adding a hop on top of the last. The fix is the same every time: point every old URL straight at its final destination, and update internal links so they never go through a redirect.
A loop is a chain that comes back to an address it already visited, so it never ends. Browsers give up with a "too many redirects" error and nobody can open the page. Loops usually come from two rules fighting each other, such as a plugin forcing www while the server forces no-www, or HTTPS settings in both a CDN and the site.
Checking redirects after a site migration
When you move a site, every old URL that had traffic or links should answer with a single 301 or 308 to the most relevant new page. Before launch, export your old URLs from your sitemap, your analytics and your backlink tool. After launch, check a sample here, ten at a time, and look for four things:
- One hop: old URL straight to the new one, with no chain.
- Permanent codes: 301 or 308, not 302, unless the move really is temporary.
- A live destination: the final status is 200, not a 404 or a redirect to the homepage for everything.
- HTTPS all the way: no step back down to
http://.
Then keep the redirects in place. Google's guidance is to use permanent redirects when you are sure the move won't be reverted; old links on other sites and in bookmarks keep arriving for years.
Once redirects work, run the pages through the broken link checker to find internal links that still go through a redirect or hit a 404.
Methodology and limits
- How a URL is followed
- Our server requests the URL with automatic redirects turned off, records the status code, the
Locationheader and the time, then requests the next address itself. Addresses withouthttp://orhttps://are tried ashttps://. - Hop limit
- Up to 10 hops, the same default Google documents for its crawlers. Past that the result says too many hops. A chain that returns to an address it already visited is reported as a loop.
- Meta refresh
- On HTML pages we also read
<meta http-equiv="refresh">and report its delay. A refresh that reloads the same URL is not counted as a redirect. - Timeouts
- 10 seconds per hop. A hop that does not answer in time stops the chain with a timeout error.
- Timings
- Measured from Cloudflare's network to your server, so they show how fast the server answers, not what a visitor in a given city will see.
- What is flagged
- Two or more redirects (chain), 302, 303 or 307 (temporary), meta refresh, a step from
https://down tohttp://, a final page onhttp://, a final status of 4xx or 5xx, loops and more than 10 hops. - Not covered
- JavaScript redirects (we do not run scripts), redirects your browser remembers from an earlier visit, the HSTS upgrade a browser does on its own, and redirects that depend on cookies, location or language. Some sites also refuse automated requests with 403 or 429.
- Safety
- Every
Locationis checked again before we request it. Private, loopback and reserved network addresses are never requested. - Daily limit
- Up to 10 URLs per check, duplicates removed. Each URL uses 1 of 100 free units per day per IP address, reset at midnight UTC.
Sources
- Google Search Central, Redirects and Google Search
- Google Search Central, How HTTP status codes, and network and DNS errors affect Google Search
- IETF, RFC 9110, HTTP Semantics, section 15.4: Redirection 3xx


