A redirect checker shows the path an address really takes: every hop, the status code at each one, and the page that finally answers. This guide explains how to read each part of the trace and the notes under it, the four-address test every site should pass, and the exact code to fix chains in .htaccess, nginx and WordPress.
How the trace works
The checker requests the address you typed and, if the server answers with a redirect, follows it to the next address, then the next, recording each status code. It stops at the first address that answers with a page or an error, or after ten redirects.
Each line in the result is one hop:
- Amber badges (3xx) are redirects.
- A green badge (2xx) is the page that finally answered. It’s shown in bold.
- A red badge (4xx, 5xx or ERR) means the trail ends in an error. ERR means no answer at all: a timeout, a loop that never ends, or an address that doesn’t exist.
The checker follows server redirects, the kind sent with a status code. It doesn’t run JavaScript or follow meta refresh tags. If a page sends visitors on with a script, the trace stops at that page with a 200. Search engines handle those redirects less reliably too, so a server redirect is the better choice for any permanent move.
The status codes you’ll see
| Code | Meaning | Rankings move to the new address? | Use it for |
|---|---|---|---|
| 301 | Moved permanently | Yes | New URLs, merged pages, http to https, www to non-www |
| 308 | Moved permanently (keeps the request method) | Yes | Same as 301; some servers and hosts use it by default |
| 302 | Found (temporary) | Not reliably | A short-term change you will undo |
| 307 | Temporary redirect | Not reliably | Same as 302 |
| 200 | OK, the page answered | The end of a healthy trace | |
| 404 | Not found | Point the address at the closest live page, or let it go if nothing replaces it | |
| 410 | Gone on purpose | Content removed for good with no replacement | |
| 5xx | Server error | A hosting or application problem, not a redirect problem |
Our glossary covers the 301 redirect and 302 redirect in more detail.
What each note means
| Note under the trace | What’s going on | Fix |
|---|---|---|
| No redirect: this address answers directly | The address you typed is the final one | Nothing, if this is the address you want people to use |
| One clean redirect. That is fine | A single hop to the final page | Nothing. Update your own links to the final address when convenient |
| 2 (or more) hops | A redirect chain | Point the first address straight at the final one with one 301 |
| Ten or more hops: probably a redirect loop | Two rules keep sending visitors back and forth | Find the two rules that disagree (see loops below) |
| A temporary redirect (302/307) is used | At least one hop says the move is temporary | Change it to a 301 if the move is permanent |
| The site does not redirect to HTTPS | You typed http and the site stayed on http | Add an https redirect for the whole site |
| The last hop is a sign-in page | The page is behind a login | Fine for private pages; a problem if the page should be public |
| A redirect points to an address that is not valid | A rule sends visitors to a broken address | Correct the target in the rule |
The four-address test
Every site can be typed four ways. Run each through the checker:
http://yoursite.comhttp://www.yoursite.comhttps://yoursite.comhttps://www.yoursite.com
All four should end at the same final address, in one hop or none. Pick one version (with or without www) and stick to it everywhere.
Worked example. Coastline Plumbing ran http://coastlineplumbing.com and saw:
301 http://coastlineplumbing.com/
301 http://www.coastlineplumbing.com/
301 https://www.coastlineplumbing.com/
200 https://coastlineplumbing.com/
Three hops: one rule added www, a second added https, and a third, added later by their SEO plugin, removed www again. Each visitor from an old link waits for three round trips, and each hop is a chance for something to break. The fix was to replace the three rules with one that sends every version straight to https://coastlineplumbing.com/.
Fixing it: copy-ready rules
Apache (.htaccess), placed above the # BEGIN WordPress block on WordPress sites:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.coastlineplumbing\.com$ [NC]
RewriteRule ^(.*)$ https://coastlineplumbing.com/$1 [L,R=301]
# Single pages that moved
Redirect 301 /water-heaters/ https://coastlineplumbing.com/water-heater-repair/
nginx:
server {
listen 80;
server_name coastlineplumbing.com www.coastlineplumbing.com;
return 301 https://coastlineplumbing.com$request_uri;
}
server {
listen 443 ssl;
server_name www.coastlineplumbing.com;
# ssl_certificate and ssl_certificate_key lines go here
return 301 https://coastlineplumbing.com$request_uri;
}
# Inside the main server block for coastlineplumbing.com:
location = /water-heaters/ {
return 301 /water-heater-repair/;
}
WordPress plugins: for page-by-page redirects, the free Redirection plugin and Rank Math’s Redirections module both let you add 301s without touching server files. Yoast includes a redirect manager in its Premium version. Use one tool for redirects, not several, or you’ll build chains by accident.
When you change a redirect’s target, search your existing rules for anything pointing at the old address and update those too. That’s how most chains are born: page A was redirected to B, then B was redirected to C, and nobody went back to point A at C.
Loops, and how to break them
A loop means two rules disagree. The usual causes:
- CDN and server both forcing https in different ways. With a CDN set to connect to your server over plain http (Cloudflare’s “Flexible” SSL mode, for example) and the server redirecting http to https, every request bounces forever. Set the CDN to connect over https.
- WordPress Address and Site Address disagreeing with each other or with the server’s rules (Settings › General).
- Two plugins each insisting on a different version of the same address, such as with and without a trailing slash.
Common mistakes
- Redirecting every old page to the homepage. Google treats that as a soft 404: the old page’s value is lost anyway. Redirect each address to its closest match, or let it return 404 if nothing is close.
- Using 302 for a permanent move. Many page builders and hosting panels default to 302. Check the code in the trace, not the setting’s label.
- Fixing the redirect but not your links. Your menus, footer and internal links should point at the final address, so visitors and Google skip the hop entirely and keep the full link equity.
- Forgetting the sitemap. Your XML sitemap should list only final addresses that answer with 200.
Fixing chains across a whole site
The checker traces one address. The Site Audit finds every redirect chain, every internal link that points at a redirect, and every sitemap entry that redirects or breaks. On WordPress, RankThat drafts redirects for broken pages (to the closest matching page, never just the homepage) and updates links that point at redirects, applied through the free Bridge plugin with one-click undo. For a broader checkup of one page, including HTTPS, try the Website SEO Checker, and for 404s and other crawl problems, see how to fix crawl errors.