Redirect Loop Checker

Redirect Loop Checker

When users see "ERR_TOO_MANY_REDIRECTS," this tool shows you the exact hop that closes the loop. Trace up to 20 hops, see the URL that loops back, and identify the rule to fix.

wifi_tethering
expand_more
link
info For testing self-signed certificates
sync

Loop detection

Flags loops automatically and points to the hop that re-enters the cycle.

account_tree

Visualized chain

Renders every hop so you can spot the misconfigured rule.

devices

Mobile vs desktop

Switch UA to test whether the loop only triggers for a specific bot or device.

What it does

Pinpoints the loop in seconds

A redirect loop is one of the worst user-facing bugs: the browser gives up, displays a blank "too many redirects" page, and the visitor leaves. This tool follows up to 20 hops, detects when a URL repeats, and renders the chain so you can find the rule that needs to change.

sync

Loop detection

When the same URL appears twice in the chain, we stop and flag the loop with the hop number where the cycle closes.

account_tree

Hop-by-hop trace

See every URL the browser would have tried. The pattern (e.g. http ↔ https ping-pong) usually tells you which rule is wrong.

devices

User-agent variants

Some loops only trigger for a specific UA — mobile redirects to /m/, desktop redirects /m/ back to /. Switch UA to reproduce.

cookie

Cookie & header overrides

Test loops that depend on a session cookie or custom header. Paste the cookie string and re-run.

speed

Per-hop latency

See whether the loop adds 200ms per hop or 2 seconds — the latency tells you whether the rule is at the edge or in the app.

webhook

CI-friendly API

Hit /api/check from your pipeline. The response includes loop.detected and loop.start_step so you can fail the build automatically.

How it works

Three steps to find the loop

No installation, no auth — paste the URL that fails in the browser.

  1. 1

    Paste the looping URL

    Use the URL that throws ERR_TOO_MANY_REDIRECTS in the browser. We follow it up to 20 hops.

  2. 2

    Watch the trace

    When a URL we have already visited appears again, we flag the loop and stop. The chain rendering highlights the closing hop.

  3. 3

    Fix the responsible rule

    Read the chain pattern: http ↔ https indicates a TLS-termination misconfig; / ↔ /m/ indicates a UA-detection bug; canonical loops point to bad rewrite rules.

Who uses it

For everyone debugging "too many redirects"

Loops show up at the worst times — after a config change, during a launch, in production only. These are the teams who need them fixed fast.

DevOps debugging a launch

A new ALB rule started looping. The chain shows http → https → http: TLS termination is misconfigured behind the load balancer.

WordPress admins after a plugin update

A redirect plugin and a security plugin both started rewriting URLs. The chain shows which rule fires first and where the loop closes.

CDN administrators chasing a regression

A new CDN edge rule conflicts with origin redirects. The hop pattern reveals whether the conflict is at the edge or origin.

SEO managers auditing migrations

During an http → https migration, a stale www redirect creates a loop. The trace shows the exact hostname pair that fights.

Mobile teams debugging UA-based loops

Switch to the iOS or Android UA and confirm the redirect to /m/ does not bounce back when the cookie says "desktop preferred."

QA validating bug fixes

After a fix lands in staging, paste the URL with a session cookie and confirm the loop is gone.

Best practices

How to avoid redirect loops in the first place

Five preventive habits that keep loops out of production.

rule Pick one canonical URL form, then enforce it

Decide www vs non-www, HTTPS vs HTTP, trailing slash vs none. Then write one rule that handles all four wrong variants. Multiple rules fighting each other is the #1 source of loops.

layers Redirect at one layer, not three

Pick the edge (CDN/load balancer) OR the app — not both. When both layers redirect, they will eventually disagree and loop.

sync_problem Watch for TLS termination mismatches

If your app sees http (TLS terminated at the LB) but your app rule says "redirect to https when not secure," every request will loop. Trust X-Forwarded-Proto, not req.protocol.

cookie Be careful with cookie-based redirects

A redirect that depends on a cookie set by the destination page can loop: visitor lands, cookie not set, redirected away, cookie still not set, redirected back. Set the cookie before the redirect.

verified Test every redirect in CI

Add a check to your deploy pipeline that hits /api/check on representative URLs and fails if loop.detected is true. Loops caught in CI never reach users.

FAQ

Common redirect loop questions

What causes "ERR_TOO_MANY_REDIRECTS" in Chrome? expand_more

A redirect loop. Chrome stops following after about 20 hops. The error means one of your redirects sends the user to a URL that eventually redirects back to the original (or to another URL already in the chain). Common causes: TLS termination mismatch, www / non-www confusion, mobile/desktop UA detection bugs, conflicting plugin rules.

How does this tool detect a loop? expand_more

We follow redirects up to 20 hops. After each hop, we check whether the target URL has appeared earlier in the chain. If it has, we stop and mark the response with loop.detected = true and loop.start_step = the index where the cycle closes. The visualized chain highlights the closing hop.

Can a loop be intermittent? expand_more

Yes. The most common cause of intermittent loops is cookie state: a redirect rule fires when a cookie is missing, then sets the cookie, then re-evaluates on the next request. If something deletes the cookie, the loop re-triggers. Use this tool with the relevant Cookie header set to reproduce.

Why does the loop only happen on mobile? expand_more

Almost always: UA-based redirect logic. The desktop site redirects /m/ URLs back to /, the mobile site redirects / to /m/, and a UA detection rule disagrees with the cookie-based "prefer desktop" override. Reproduce by switching UA in this tool to the relevant mobile user agent.

What is the difference between a loop and a long chain? expand_more

A chain has a final destination — every hop is unique. A loop has no final destination — at some point a URL repeats. Chains over 3 hops are bad for performance and SEO; loops are user-facing errors. This tool flags both: chain length appears in the summary, loop is called out separately.

My chain stops at 20 hops without finding a loop — is it still a loop? expand_more

Probably. We stop at 20 because browsers stop at about 20. If your URL hits the cap without a clear destination, treat it as a loop and trace the pattern — usually two URLs alternating means a ping-pong loop. Increase the maxHops parameter if you genuinely need to follow more than 20 hops.

Can I export the loop trace for a bug ticket? expand_more

Yes — copy the visual chain from the UI, or hit /api/check directly to get JSON. The JSON includes redirects[], loop.detected, loop.start_step, and per-hop status and headers. Paste it into the ticket so the engineer fixing it has the same view you did.

Looping? Find the bad hop now.

Paste the URL that triggers the redirect-loop error in the browser. The visual chain will point to the exact hop where the cycle closes.

north Trace a loop