Lighthouse audit redirects · Performance

"Avoid multiple page redirects": how to fix it

View raw .md for LLMs / your notes
Quick answer: This audit fails when the requested URL redirects before serving the page, because each hop costs a full round trip before rendering starts. Fix it by collapsing the chain to a single hop, handling it at the CDN or server rather than in application code, and pointing internal links, sitemaps, and canonical tags at the final URL.

Lighthouse fails this audit when the URL a visitor requests is not the URL that finally answers. Every hop in between is a full network round trip before a single byte of your page arrives. GTmetrix reports the same problem as "Avoid landing page redirects", and Lighthouse's own description is "Redirects introduce additional delays before the page can be loaded".

If you are here because a page shows "too many redirects" rather than because Lighthouse flagged a delay, that is a redirect loop, which is a different failure with different causes. Skip to that section.

TL;DR

What does "avoid multiple page redirects" mean?

Lighthouse follows the navigation request for the main document and counts the hops to the final URL. The audit passes only at zero redirects, and the reported cost grows with each one.

The word "multiple" is misleading. A single redirect already fails the audit, and a single redirect is often fine in practice: redirecting http:// to https:// is correct and you should keep it. What you are hunting is chains, where several rules each fire in turn.

How much does each redirect actually cost?

One hop is one round trip: the browser asks, the server says "not here, go there", and the browser starts again. On a fast desktop connection that is tens of milliseconds. On mobile, where round-trip latency is commonly 100 to 300 ms, a three-hop chain can cost most of a second before your HTML even begins downloading.

It gets worse when hops cross origins, because a new host means a fresh DNS lookup, TCP handshake, and TLS negotiation on top of the request itself. This is why link shorteners in ad campaigns are expensive: the shortener, then your marketing domain, then the canonical URL, each on a different host.

How do I check a page's redirect chain?

The fastest check is one command. -L follows redirects, -I keeps it to headers:

curl -sSIL https://example.com | grep -iE '^(HTTP|location)'

Every HTTP/… line after the first is a hop you are paying for. For just the count and the destination:

curl -sS -o /dev/null -L -w 'hops: %{num_redirects}\nfinal: %{url_effective}\n' https://example.com

In DevTools, open the Network tab, tick Preserve log, and load the URL. The redirect responses stay visible instead of being replaced by the final page, and each one shows its status and Location.

Test the URL people actually type. example.com with no scheme, with and without www, and with and without a trailing slash will often reveal a longer chain than the canonical URL you have been pasting.

What causes redirect chains?

Almost always independent rules stacking, each one reasonable alone:

How do I fix multiple page redirects?

  1. Collapse the chain to one hop. Rewrite the rules so the first response goes straight to the final URL. http://example.com should land on https://www.example.com directly, not walk there. Most servers and CDNs let you match protocol and host in a single rule.
  2. Fix it at the outermost layer. A redirect handled at the CDN edge never reaches your origin. A redirect handled in application code costs a full origin request first. Move the rule outward: DNS or CDN, then web server, then the app as a last resort.
  3. Point internal links at the final URL. This is the fix people skip, and it is the one that helps most visitors: if your own navigation, sitemap, and canonical tags all use the final URL, most requests never redirect at all. Chase down absolute http:// links in old content too.
  4. Remove the http:// hop entirely with HSTS. Send Strict-Transport-Security and browsers rewrite http:// to https:// internally on later visits, with no network request. Submitting to the HSTS preload list covers the first visit too. Start with a short max-age while you confirm every subdomain works over HTTPS, because the policy is hard to unwind once browsers have cached it.
  5. Re-check after each change. Rules interact, and it is easy to remove one hop while adding another.

Which redirect status code should I use?

For a permanent host or protocol move, 301 is the right default.

How do I fix "too many redirects"?

This is the error behind "Safari cannot open the page because too many redirects occurred", Chrome's ERR_TOO_MANY_REDIRECTS, and the generic "This page isn't working" message. It is not a slow chain, it is a loop: two rules each sending the request to where the other one sends it back.

The causes, in the order worth checking:

To see it, run the curl -sSIL command above. A loop shows as the same two Location values alternating. Reproduce in a private window, because a stale cookie or a cached 301 can keep a loop alive after you have fixed the cause. If you are a visitor seeing this on a site you do not run, clearing cookies for that site is the only fix available to you.

How do I fix redirect problems in WordPress?

WordPress adds a few of its own, and they account for most of the WordPress-specific variants of this problem:

How do I verify the fix?

  1. Re-run Lighthouse. "Avoid multiple page redirects" should move into the passed audits.
  2. Confirm the chain is gone from every entry point, not just the canonical one:

   for u in example.com www.example.com http://example.com https://example.com/page/; do
     echo -n "$u -> "; curl -sS -o /dev/null -L -w '%{num_redirects} hops, %{url_effective}\n' "$u"
   done
   

  1. Check your sitemap. Every URL in it should return 200 directly, with no redirect.
  2. Spot-check internal links on a few key pages, since those are what most visitors follow.

What mistakes should I avoid?


Audit your URL at https://lighthouse-md.com.

Audit your page now

Paste your URL, get scores plus a CLAUDE.md plan for Claude Code.

Run audit →