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.
$ curl -I https://example.com/old-page
HTTP/2 301
location: https://example.com/new-page
content-type: text/html; charset=utf-8
Add -L (curl -IL) to print the headers of every hop.
May change to GET
A page or domain that has moved for good
May change to GET
A short-term detour: maintenance, a promotion, a test
Method kept
A permanent move where a form or API POST must stay a POST
Method kept
A temporary move where the method must stay the same
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.
| Code | Type | Request method | Use it for |
|---|---|---|---|
| 301 | Permanent | May change to GET | A page or domain that has moved for good |
| 308 | Permanent | Kept | A permanent move where a form or API POST must stay a POST |
| 302 | Temporary | May change to GET | A short-term detour: maintenance, a promotion, a test |
| 307 | Temporary | Kept | A temporary move where the method must stay the same |
| 303 | See other | Always GET | Sending 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
Redirectdirective, PHP'sheader('Location: ...')and Express'sres.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
- 1Paste the old URL into the checker above and press Check.
- 2Read the label on the first hop: 301 Permanent or 308 Permanent is permanent; 302 Temporary, 303 See Other or 307 Temporary is temporary.
- 3Check the rest of the chain. For a permanent move every hop should be permanent, and ideally there is only one.
- 4Confirm the final status is 200 and the final destination is the page you meant.
- 5To double-check from your own machine, run
curl -Ion 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.
More redirect and link guides
What is a tracking link?
How tracking links work, what they record, and real examples.
UTM tracking
Clicks per source, medium and campaign on every link.
Outbound link tracking
GA4 outbound clicks, Adobe exit links, or tracked links.
Link tracer
See every redirect a link takes, without opening it.
Redirect chain checker
Every hop, status code and loop between a link and its page.
TinyURL stats
Where TinyURL clicks live and how to get free stats.
How to track clicks on a link
A free click counter for any URL.
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