Works on the free plan

301 redirect checker
permanent or temporary?

Find out which status code a redirect really sends, what that code tells browsers and search engines, and how to fix the mistakes that turn a permanent move into a temporary one.

Quick answer

Paste the old URL into the checker below. The label on the first hop tells you the type: 301 Permanent or 308 Permanent means the move is permanent; 302 Temporary, 303 See Other or 307 Temporary means it is temporary. For a page or domain that has moved for good, every hop should be a 301 or 308 and the chain should end on a 200. The checker needs no account.

Traced server-side, so there are no CORS errors. Follows every 301, 302, 307, and 308 hop — up to 15 redirects.

Example
Terminal

$ curl -I https://example.com/old-page

HTTP/2 301

location: https://example.com/new-page

content-type: text/html; charset=utf-8

Status line: 301, permanentlocation: where it points

Add -L (curl -IL) to print the headers of every hop.

PermanentTemporary
301Permanent

May change to GET

A page or domain that has moved for good

302Temporary

May change to GET

A short-term detour: maintenance, a promotion, a test

308Permanent

Method kept

A permanent move where a form or API POST must stay a POST

307Temporary

Method kept

A temporary move where the method must stay the same

curl shows the status line and the location header, and the code says whether the move is permanent (301, 308) or temporary (302, 307).

What each redirect code means

All of these send the visitor on to the address in the Location header. They differ in what they say about the move, and in whether the browser must repeat the original request method. For ordinary page visits, which are GET requests, 301 and 308 behave the same, and so do 302 and 307.

CodeTypeRequest methodUse it for
301PermanentMay change to GETA page or domain that has moved for good
308PermanentKeptA permanent move where a form or API POST must stay a POST
302TemporaryMay change to GETA short-term detour: maintenance, a promotion, a test
307TemporaryKeptA temporary move where the method must stay the same
303See otherAlways GETSending someone to a result page after a form submission

When the code matters for SEO

Google treats a permanent redirect (301 or 308) as a signal that the target should be the canonical URL, the one shown in results. A temporary redirect (302, 303 or 307) doesn't carry that signal, so the old URL can stay the one Google shows.

So the code matters whenever a page has truly moved: a new URL structure, two pages merged, a switch to https, a new domain. A temporary redirect is right when the original URL is coming back: maintenance, a seasonal offer, a language switch, an A/B test.

Browsers can also cache a permanent redirect and send returning visitors straight to the target without asking your server. That is what you want after a move, and a problem if you change your mind, so test a 301 before you ship it.

Common redirect mistakes

Most broken migrations come down to the same few errors. Run each old URL through the checker and look for these.

  • A 302 left in place after a migration. Several common defaults are temporary: Apache's Redirect directive, PHP's header('Location: ...') and Express's res.redirect() all send a 302 unless you set the code.
  • Every old URL sent to the homepage. If a page has no direct replacement, send it to the closest match or let it return a 404 or 410. A homepage standing in for hundreds of unrelated pages helps neither visitors nor search engines.
  • A permanent move done with a meta refresh or JavaScript. Those run after the page loads with a 200, so this checker shows that page as the final destination. Google can process them, but recommends server-side redirects where you can set them up.
  • Mixed codes in one chain, such as 301 then 302 then 301. Collapse them into one permanent redirect; the redirect chain checker covers how.
  • A correct 301 to a page that returns a 404. Check the final status, not just the first code.

Double-check with curl

To see the raw response from your own machine, run curl -I https://example.com/old. The first line shows the status, such as HTTP/1.1 301 Moved Permanently or HTTP/2 301, and the location: line shows where it points. Add -L (curl -IL) to print the headers of every hop.

-I sends a HEAD request rather than a GET. A few servers answer the two differently, and the checker on this page uses GET.

If your browser's developer tools show a 307 Internal Redirect from http to https while the checker shows a 301, that is HSTS: the browser remembered the site is https-only and upgraded the request itself. The server's real answer is the one the checker and curl report.

Why Track Link's short links use a 302

Our own short links answer with a 302, on purpose. A destination can change after the link is printed on a QR code or shared in a post, and a temporary redirect tells browsers and search engines not to treat the first destination as permanent.

It also keeps the count honest: a browser that cached a permanent redirect would skip our server on the next click, so that click would go unrecorded. Crawlers and link previews always get the plain 302. On the free plan, people see a short Track Link notice before they continue; paid plans send them straight on.

The checker doesn't trace gettrack.link addresses, so run curl -I on one of your short links to see its 302, or check a link on your custom domain here.

How to check if a redirect is a 301

  1. 1Paste the old URL into the checker above and press Check.
  2. 2Read the label on the first hop: 301 Permanent or 308 Permanent is permanent; 302 Temporary, 303 See Other or 307 Temporary is temporary.
  3. 3Check the rest of the chain. For a permanent move every hop should be permanent, and ideally there is only one.
  4. 4Confirm the final status is 200 and the final destination is the page you meant.
  5. 5To double-check from your own machine, run curl -I on the old URL and read the status line and the location header.

What this check can't confirm

  • Meta refresh and JavaScript redirects. The checker reads HTTP status codes only, so a page that moves you after loading shows as a 200.
  • What every visitor gets. The request comes from our server, without cookies and with a bot user agent, so redirects by country, device or login may differ from what you see.
  • What browsers have cached. A visitor's browser may keep following an old 301 or an HSTS upgrade after you change the server.
  • gettrack.link addresses and private network URLs, which the checker won't trace.

Questions people ask

How do I check if a redirect is a 301?

Paste the URL into the checker on this page. Each hop is labelled with its status code, so a permanent redirect shows as 301 Permanent. From a terminal, curl -I followed by the URL prints the same status line.

What's the difference between a 301 and a 302?

A 301 says the page has moved for good, so search engines treat the new URL as the canonical one and browsers may remember the move. A 302 says the move is temporary and the original URL stays the one that counts.

What's the difference between a 301 and a 308?

Both are permanent. A 308 requires the browser to repeat the same request method, so a POST stays a POST; after a 301 a browser may switch to GET. For ordinary page visits they behave the same.

Why does my browser show a 307 when the server sends a 301?

That's usually HSTS. The browser knows the site is https-only and rewrites http to https itself, which developer tools show as a 307 Internal Redirect. Check the server's real answer here or with curl.

Does a 302 hurt SEO?

Not when the move really is temporary. It becomes a problem when a permanent move is left on a 302, because Google doesn't take a temporary redirect as a signal that the new URL should replace the old one in results.

Does the checker detect meta refresh or JavaScript redirects?

No. It follows HTTP redirects, the 3xx responses with a Location header. A page that redirects with a meta tag or a script shows as the final destination with a 200.

Is the 301 redirect checker free?

Yes, and it needs no account. Paste a URL and check it.

Short links you can re-point, with the clicks counted

Start free with 10 tracked links and click analytics, no credit card.

Create a tracked link