How to Check Redirects: 301 vs 302 and Redirect Chains

28 October, 2026 • SEO & Marketing • 0 views • 9 minutes read

Check if a redirect is 301 or 302, trace redirect chains and fix loops. Step-by-step with a free redirect checker, browser DevTools and curl.

To check whether a redirect is a 301 or a 302, paste the old URL into a URL redirect checker and read the status code on each hop. A 301 or 308 means "moved permanently" and tells Google to show the new URL in search results. A 302, 303 or 307 means "temporary" and tells Google to keep the old URL. While you're there, count the hops: the ideal is one redirect straight to the final page that returns 200. This guide shows you how to check redirects in the browser, on the command line and with our free tool, and how to fix the problems you'll find.

Why the redirect type matters for SEO

To a visitor, every redirect looks the same: they click a link and land somewhere else. Search engines read the status code, though, and treat it as an instruction. Google's own redirect documentation says that permanent redirects are used "as a signal that the redirect target should be canonical," while temporary redirects are followed but not used as that signal. In practice that means:

  • 301 / 308 (permanent): Google shows the new URL in search results and consolidates signals onto it. Use these for site migrations, HTTP to HTTPS, changing slugs, merging pages and choosing between www and non-www.
  • 302 / 303 / 307 (temporary): Google keeps showing the original URL. Use these for short-term situations, like sending people to a maintenance page or running a test you'll undo.

The most common mistake is a migration done with 302s because that's what a plugin or framework uses by default. The new pages work fine for visitors, but Google may keep the old URLs in its index. Checking takes a minute and can save weeks of confusion.

Redirect status codes at a glance

CodeMeaningPermanent?Keeps the request method?
301Moved PermanentlyYesNot guaranteed (browsers may turn POST into GET)
308Permanent RedirectYesYes
302FoundNoNot guaranteed
303See OtherNoNo, always becomes GET
307Temporary RedirectNoYes

For ordinary page links, which are GET requests, 301 and 308 behave the same for SEO, and so do 302 and 307. The method difference only matters for forms and APIs.

How to check a redirect with My Botsy, step by step

  1. Open the URL redirect checker. It's free and doesn't need an account.
  2. Paste the starting URL exactly as people or links use it. Include the protocol, for example http://example.com/old-page. Testing the http:// and non-www versions separately is how you catch hidden extra hops.
  3. Run the check and read each row. Every row is one hop: the URL that was requested and the status code it answered with. The last row should be your final page with a 200.
  4. Look at the codes in the middle. If the move is permanent, every hop should be a 301 or 308. A single 302 in the chain makes that step temporary.
  5. Count the hops. One is ideal. Two is common (for example HTTP to HTTPS, then non-www to www) and worth collapsing. Three or more means rules are stacking up and should be cleaned up.
  6. Confirm the destination. Make sure the final URL is the page you meant, not the homepage or a 404. You can check what that page tells search engines with the meta tags checker, including its canonical tag.

Worked example: a two-hop chain

Say you check http://example.com/pricing and see this:

http://example.com/pricing        301
https://example.com/pricing       301
https://www.example.com/pricing   200

Both hops are permanent, so Google will treat https://www.example.com/pricing as the URL to show. It works, but every old link pays for two round trips. The fix is to make the first rule send http://example.com/* straight to https://www.example.com/* in one step.

Worked example: the accidental 302

https://example.com/blog/old-slug   302
https://example.com/blog/new-slug   200

You renamed the post for good, but the CMS created a temporary redirect. Change the rule to a 301 (or 308), then run the check again to confirm.

Other ways to check redirects

With your browser's developer tools

Open DevTools (F12 in most browsers), go to the Network tab, tick Preserve log, then load the old URL. Each redirect appears as its own request with its status code and a Location response header. One gotcha: if a site uses HSTS, Chrome may show a 307 Internal Redirect from HTTP to HTTPS. That one is generated by the browser itself, not your server, so a server-side checker is a better source of truth.

With curl on the command line

If you're comfortable with a terminal, this shows every hop's headers:

curl -sIL http://example.com/old-page

-I asks for headers only, -L follows redirects and -s hides the progress bar. Look for the HTTP/ status lines and the location: header under each one. Some servers answer HEAD requests differently from normal GET requests, so if the result looks odd, try curl -sL -o /dev/null -D - http://example.com/old-page instead.

With an HTTP headers lookup

To inspect a single response in detail, including Location, Cache-Control and security headers, use the HTTP headers lookup. It's handy for confirming exactly what one hop sends back.

Common redirect problems and how to fix them

Redirect chains

Each extra hop adds a round trip for visitors. Google's crawler documentation says its crawlers follow up to 10 redirect hops by default, but other tools may give up sooner, and long chains are hard to maintain. Point every old URL straight at its final destination, and update internal links so they skip redirects entirely.

Redirect loops

A loop happens when A points to B and B points back to A, often because a CMS setting and a server rule disagree about www, HTTPS or a trailing slash. Browsers show an error like "too many redirects." A redirect checker makes the loop obvious because the same URLs repeat. Decide on one canonical version and remove the conflicting rule.

Redirecting everything to the homepage

When you delete or move many pages, it's tempting to send them all to the homepage. Visitors who wanted a specific page end up confused. Redirect each old URL to its closest equivalent, and let pages with no equivalent return a 404 or 410.

Mixed signals

If a URL 301s to page B but page B's canonical tag points somewhere else, you're giving search engines conflicting instructions. Check the destination's canonical with the meta tags checker and make sure the two agree.

Lost tracking parameters

Some redirect rules drop the query string, which strips UTM tags from campaign links. Test a tagged URL (build one with the UTM link generator) and check that the parameters survive to the final hop. Our guide to UTM parameters in GA4 explains why that matters. To split a long final URL into its parts, paste it into the URL parser.

Certificate problems on the old domain

If you moved domains, the old one still needs a valid HTTPS certificate. Without one, people who type or click https://old-domain.com see a security warning before the redirect can run. Confirm it with the SSL lookup, and if the domain doesn't resolve at all, start with our guide on how to check DNS records.

Meta refresh and JavaScript redirects

Not every redirect is a status code. A <meta http-equiv="refresh"> tag or a window.location script can also move visitors. Google's documentation says it treats an instant (0 second) meta refresh as permanent and a delayed one as temporary, and it recommends JavaScript redirects only when server-side or meta refresh redirects aren't possible, because Google may not see them if rendering fails. Server-side checkers report the page as a 200 in these cases, so if a page "redirects" in your browser but shows 200 in the checker, look at its HTML for a meta refresh or script.

A quick redirect checklist

  • Permanent moves use 301 or 308 on every hop.
  • Each old URL reaches its final page in one hop.
  • The final page returns 200 and its canonical tag points to itself.
  • HTTP, HTTPS, www and non-www versions all end at the same URL.
  • Query strings and UTM tags survive when they should.
  • Internal links point to final URLs, not to redirects.

Frequently asked questions

How do I know if a redirect is 301 or 302?

Run the URL through a redirect checker or look at the Network tab in your browser's developer tools. The status code on each hop tells you: 301 and 308 are permanent, while 302, 303 and 307 are temporary.

Is a 302 redirect bad for SEO?

Not when the move really is temporary. It becomes a problem when it's used for a permanent move, because Google may keep showing the old URL instead of the new one.

What's the difference between 301 and 308?

Both are permanent. A 308 guarantees that the request method and body are kept, which matters for forms and APIs. For normal page links, they work the same way for SEO.

How many redirects are too many?

Aim for one. Google's crawlers follow up to 10 hops by default, but every extra hop slows visitors down and makes problems harder to trace, so collapse chains whenever you can.

Why does my browser show a 307 redirect I never set up?

That's usually Chrome's internal HSTS redirect from HTTP to HTTPS. The browser creates it before contacting your server, so use a server-side redirect checker to see what your server actually returns.

Google uses permanent redirects as a strong signal that the target should be the canonical URL, so signals are consolidated there. Temporary redirects aren't used as that signal, which is why the redirect type matters.

UTM Parameters in GA4: A Practical Campaign Tracking Guide

28 October, 2026

Learn how to build UTM links, name campaigns consistently, avoid common mistakes, and find your campaign data in Google Analytics 4 reports.