Redirect chain checker

ToolPetal's server requests each URL as ToolPetalBot from a Cloudflare datacenter, follows up to 10 redirects without cookies, and stores nothing. It reads response headers, plus the first 64 KB of the final HTML page to spot a meta refresh. The notes are worked out in your browser.

A bare domain such as example.com is checked over HTTPS. Type http:// to include the plain HTTP hop.

Check a list of URLs (up to 10)
Checked one after another. Duplicates are skipped. Each URL counts toward the limit of 20 checks per minute.

By Cobra · Last updated

A four-hop chain, taken apart

This is the shape that turns up after a site has had two or three owners. Each rule made sense when someone added it:

1. 301  http://www.example-shop.com/sale    -> https://www.example-shop.com/sale
2. 301  https://www.example-shop.com/sale   -> https://example-shop.com/sale
3. 302  https://example-shop.com/sale       -> https://example-shop.com/sale/
4. 200  https://example-shop.com/sale/

Hop 1 is the host's "force HTTPS" switch. Hop 2 is a CDN rule that drops www. Hop 3 is the CMS adding a trailing slash, and it uses a 302 because that is the framework default. None of them is wrong alone. Together they mean three extra requests, and the 302 tells Google the final URL might be temporary.

The checker marks it "Worth fixing". Its notes name each problem: three redirects where one would do, a temporary code at hop 3, the host dropping www after the HTTPS switch, and a trailing slash added at the very end. The fix:

ToolPetal had a smaller version of this. A request for https://www.toolpetal.com/page.html got a 301 to the apex and then a 308 to strip .html. One rule now does both in a single 301. The plain http://www form still takes two hops, because Cloudflare's own HTTP to HTTPS upgrade answers before that rule runs. The second sample button above shows it: a chain that works, and one hop longer than it needs to be.

301, 302, 303, 307 and 308 side by side

CodeMeaningPermanent?POST stays POST?What Google doesUse it for
301Moved PermanentlyYesNot guaranteed. Browsers usually switch to GETStrong signal to index the targetPage moves, domain moves, HTTPS and www rules
308Permanent RedirectYesYesSame as 301Permanent moves of API endpoints and form targets
302FoundNoNot guaranteed. Browsers usually switch to GETWeak signal; keeps the source URL unless the redirect stays for a long timeShort campaigns, A/B tests, a page that will come back
307Temporary RedirectNoYesSame as 302Temporary moves where the method matters; also what Chrome shows for an HSTS upgrade
303See OtherNoNo, always GETSame as 302Sending a browser to a result page after a form submit

The checker marks 301 and 308 hops green and 302, 303 and 307 hops amber. Amber is not an error, but for a page that moved for good, it is the wrong code.

What a long chain actually costs

Google has said that 3xx redirects do not lose PageRank, so the old fear of a percentage lost per hop is out of date. The real costs are plainer:

Collapsing a chain at the source

The goal is one rule that knows the final scheme, host and path. On Nginx, give the variants their own server blocks and redirect to the final host with the path intact:

server {
    listen 80;
    listen 443 ssl;
    server_name www.example-shop.com;
    # ssl_certificate lines for www go here
    return 301 https://example-shop.com$request_uri;
}
server {
    listen 80;
    server_name example-shop.com;
    return 301 https://example-shop.com$request_uri;
}

On Apache, one condition block catches both plain HTTP and www, so neither needs a second hop:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://example-shop.com%{REQUEST_URI} [L,R=301]

On a CDN, the trap is a scheme setting in one layer and a host rule in another, each adding its own hop. Put both into one redirect rule in the same layer, or turn one of them off. Page-level moves in a _redirects file (Cloudflare Pages, Netlify) should point at the final URL, not at another old one:

/old-sale   /sale/   301
/summer     /sale/   301

Then run the variants button and the list mode again. All four host variants should end at the same URL with one hop each, or zero for the preferred one.

What the checker cannot see

Questions people ask

How many redirects is too many?

For links you control, more than one. Googlebot follows up to 10 hops and then reports a redirect error, and Chrome and Firefox give up after 20, so a chain of three still works. It just costs a request per hop on every crawl and every first visit, and each extra rule is another place for a loop to start.

Should I use 301 or 308 for a permanent move?

Either works for pages. Google treats 308 like 301. The difference is the method: after a 301 a browser may turn a POST into a GET, while a 308 keeps the POST and its body. Use 308 for API endpoints and form targets, and 301 anywhere old clients or tools might not know 308.

Why does my browser show fewer hops than this checker?

Usually HSTS. Once a browser has seen your Strict-Transport-Security header it rewrites http:// to https:// on its own, so the first hop never reaches the network. Browsers also cache 301 and 308 responses. This checker sends a fresh request with no cache, no cookies and no HSTS memory, which is what a crawler or a first-time visitor gets.

Does it follow meta refresh and JavaScript redirects?

Meta refresh, partly. The final page's first 64 KB is scanned for a meta refresh tag and a Refresh header, and if one is found you get a button to check its target. JavaScript redirects such as window.location are not run or detected, because the page is never rendered.

Can I check redirects on a staging site or localhost?

No. ToolPetal's server only fetches public hosts on ports 80 and 443 and refuses private, loopback and internal addresses, including when a redirect points to one. Use curl -sIL on your own machine for those.

Why is the whole chain flagged when only one hop is a 302?

Because the verdict is for the chain, not the hop. One temporary redirect in an otherwise permanent chain still tells search engines the move might be undone, so the chain is marked worth fixing. Each hop's own status is shown in its row.