Self Redirect

No Comments
Self redirect
TL;DR: A self redirect is a URL that redirects to itself. The browser or crawler asks for a page, the server sends it right back to the exact same address, and the loop repeats until the client gives up. The page never loads, and search engines drop it. It is almost always a misconfigured rule, and the fix is to remove or correct that rule.
Check ID
RE-018
Type
Redirect
Severity
Critical
Result
Page dead
Fix effort
Low

What a self redirect is

A self redirect happens when a URL responds with a 3xx status and a Location header that points back to the same URL it was just requested at. Request /pricing/, get a 301 to /pricing/, request /pricing/ again, get the same 301, and so on. Browsers cut this off after a handful of hops and show "too many redirects" (in Chrome, ERR_TOO_MANY_REDIRECTS). Crawlers do the same and simply mark the URL as unreachable.

It is worth being precise about "same URL," because that is where these bugs hide. A redirect from http://site.com/x to https://site.com/x is not a self redirect, it is a valid protocol upgrade. A redirect from /x to /x/ is a trailing-slash canonical, also fine. A true self redirect lands on the byte-for-byte identical URL: same scheme, same host, same path, same casing, same query. If the destination equals the source, the loop can never resolve.

Why it is one of the worst redirect bugs

Most redirect problems are about efficiency. This one is about availability. A self-redirecting URL does not load for anyone. Real visitors hit a dead end, so you lose the traffic and any conversion that page was carrying. Googlebot follows the redirect, comes back to the same URL, and after enough hops treats it as an error; the page falls out of the index and takes its rankings with it. If the loop is on a template that powers thousands of URLs, you can knock a whole section of the site offline in one bad deploy.

It also lies to you in monitoring. A self redirect returns a 3xx, not a 5xx, so naive uptime checks that only alarm on 500s will report the site as "up" while every affected page is unusable. I have watched a team stare at a green status dashboard while their top landing page returned nothing but redirect loops. So the honest severity here is critical, even though the fix is usually a two-line change.

The loop, drawn out

Browser GET /pricing/ /pricing/ 301 to /pricing/ request 301 back to same URL loop repeats until ERR_TOO_MANY_REDIRECTS

How to detect it

  • curl: the fastest single check. Run curl -sIL https://example.com/page/ and watch the trail. If you see the same URL return a 3xx to itself over and over, or curl bails with "Maximum redirects followed," you have a loop.
  • Screaming Frog: crawl, open the Response Codes tab, and look at the "Redirect Loop" filter and the "Redirect URL" column. When the redirect target equals the address, it is a self redirect. Frog also flags loops outright.
  • Chrome DevTools: load the page, and if it fails with ERR_TOO_MANY_REDIRECTS, the Network tab shows the same URL repeating with 3xx status rows.
  • Google Search Console: the Pages report buckets these under "Page with redirect" or as crawl errors, and URL Inspection will show the redirect it followed.
  • Server logs: a spike of 3xx responses on one path from the same client in quick succession is a loop signature.

Common causes and fixes

CauseWhy it loopsFix
Force-HTTPS behind a proxyApp sees http from the proxy, redirects to https, proxy strips it againHonor X-Forwarded-Proto so the app knows the request is already https
Duplicate canonical rulesTwo rules each redirect to what the other undoesKeep one canonical rule; remove the conflicting one
Redirect map with an identity rowA row maps a URL to itselfDelete rows where source equals destination
Trailing-slash rule misfireRule adds and removes the slash on the same requestPick one form and redirect only the other to it
CDN and origin disagreeBoth add their own redirect and bounce the requestSet the canonical redirect in one layer only

How to fix it, step by step

  1. Reproduce it with curl -sIL so you can read the exact hop chain and confirm the destination equals the source.
  2. Find the layer doing the redirect. Work down the stack: CDN or edge rules, then web server config (.htaccess, nginx rewrite), then the application or CMS redirect table, then any plugin.
  3. Identify the rule whose target resolves back to the request URL. In a proxy-HTTPS setup this is usually a force-HTTPS block that ignores X-Forwarded-Proto.
  4. Correct or remove that rule. If a redirect map contains a row where source and destination match, delete the row. If two rules conflict, keep the one that reflects your true canonical and drop the other.
  5. Deploy, purge CDN and page caches, then re-run the curl check. You want a clean 200, or a single legitimate redirect to a genuinely different URL that then returns 200.
  6. Once the page loads, request re-indexing in Search Console for the affected URLs so Google recrawls and restores them.

Do and do not

DO

  • Confirm the loop with curl before touching config.
  • Honor X-Forwarded-Proto behind a load balancer or CDN.
  • Keep exactly one canonical redirect per rule set.
  • Delete any redirect-map row where source equals destination.
  • Re-request indexing once the page loads again.
DON'T

  • Stack force-HTTPS in both the CDN and the app.
  • Add a redirect that targets its own source URL.
  • Run conflicting slash rules that fight each other.
  • Trust an uptime check that only alarms on 5xx.
  • Assume it is fixed before purging every cache.

What good looks like

A curl -sIL on the URL returns a single 200, or one clean redirect to a different, correct URL that itself returns 200. No repeated addresses in the chain. The page renders in the browser, Search Console shows it as indexed rather than "page with redirect," and your traffic to it recovers. That is the whole bar. Self redirects are almost never subtle once you look; the trick is looking before a green dashboard convinces you nothing is wrong.

FAQ

Is a self redirect the same as a redirect loop?
A self redirect is the simplest kind of redirect loop, where a URL points straight back to itself. A loop can also be a longer chain, A to B to A, that never resolves. Both fail the same way for the user, and both are detected the same way.
Why does my site show a loop only in production?
Usually the CDN or load balancer. Locally there is no proxy, so a force-HTTPS rule behaves. In production the proxy terminates TLS and forwards the request as http, and if your app does not read X-Forwarded-Proto it keeps redirecting to https forever.
Does the redirect type, 301 vs 302, matter here?
Not for the loop. Whether it is a 301, 302, 307, or 308, if it targets its own URL the request never completes. The status code only matters once you have a valid, different destination.
Will Google deindex a self-redirecting page?
Yes, over time. Googlebot cannot fetch content it can never reach, so it stops treating the URL as a live page and drops it from the index. Fix the loop and request re-indexing to recover.
How do I stop this from happening on the next deploy?
Add a curl-based redirect check to your deploy pipeline that fails the build if any key URL returns more than one hop or loops. It takes minutes to write and catches the whole class of bug before users do.
Pages stuck in a redirect loop?
An advanced SEO audit finds every self redirect and loop across your stack and pinpoints the exact rule causing it.

Get an Advanced SEO Audit

Claude Vincent is a technical SEO consultant focused on crawlability, rendering, and AI-search visibility. He writes the field guides and case studies at SEO ProCheck, with a bias toward the durable, unglamorous work that decides whether search engines and AI answer engines can actually read and cite a site.

About SEO ProCheck

Technical SEO consulting and GEO strategy with 20 years of enterprise experience. Case studies, resources, and tools for search and AI visibility.

Work With Me

Technical SEO audits, GEO strategy, site migrations, and international SEO. Hourly consulting for teams who need hands-on support, not just reports.

Subscribe to our newsletter!

More from our blog