dotvitals

The redirect chain is longer than it needs to be

LowConfirmedQuick winhttp.redirects.chain-too-long

What this check looks for

Visitors are bounced through several addresses before reaching the page. Each bounce is a full round trip they wait for.

Why it matters

Every hop is a DNS lookup, a connection and a round trip — most noticeable on mobile. Search engines also pass less signal through each hop and stop following after a handful.

When the check passes, your report says: “The redirect chain is as short as it needs to be”.

What it costs your score

When this check fails it removes 6 points from your HTTP score, before the status, confidence and repeat multipliers are applied. HTTP carries a weight of 7 in the overall score.

It shares the http.redirects family ceiling of 45 points: however many findings that family produces, together they cannot remove more than that from HTTP. One underlying problem showing up in several places is still one problem.

Severity
low
Default confidence
confirmed
Status when triggered
warn
Deduction
6 points
Family cap
http.redirects · 45
Category
HTTP
Module
Http redirects
Fix owned by
user
In the ruleset since
2026.09

How the whole score is calculated

How to fix it

Collapse the chain so each starting URL reaches its destination in one hop.

Each extra hop is a round trip for every visitor who starts there.

  1. Decide the canonical form once: scheme, host and trailing-slash convention.

  2. Write one rule per non-canonical starting form that jumps straight to the final URL.

  3. Keep the path and query string through the redirect.

How to confirm it worked

  • curl -sIL https://‹host›/ | grep -c '^HTTP/' — expect no more than ‹recommended› plus the final response

A named slot like ‹domain› — and the braces left in the configuration below — is filled in with your own values when this rule appears on a report.

Remediation by platform

nginx
# One hop, straight to the canonical origin. Not http -> https -> www -> path.
server {
	listen 80;
	listen 443 ssl;
	server_name ‹host›;
	return 301 https://www.‹host›$request_uri;
}
Apache
<VirtualHost *:80 *:443>
	ServerName ‹host›
	RedirectMatch 301 ^/(.*)$ https://www.‹host›/$1
</VirtualHost>
Caddy
‹host› {
	redir https://www.‹host›{uri} permanent
}
Cloudflare
Rules → Overview → Create rule → Redirect Rule (path as at 2026-09) → single rule: When hostname equals ‹host›, Static/Dynamic redirect to https://www.‹host›/${http.request.uri.path}, status 301, preserve query string.
  • Collapse the chain into a single redirect per source host rather than chaining them.

  • Shown because the response identified Apache. Prefer the virtual host over .htaccess: .htaccess is re-read on every request and its rules run after the virtual host's, which is how these chains get long in the first place.

  • Cloudflare Redirect Rules run at the edge and apply only to requests that arrive through it. An origin reachable directly — by IP, or through a DNS record that is not proxied — still produces the chain measured here. Fix the origin's own configuration as well.

Technical detail

The chain took ‹redirects› redirects; ‹recommended› or fewer is the target. The usual shape is httphttpswww → path, each step a separate rule. It collapses into one hop per starting URL: send http://host/path straight to https://www.host/path rather than through the intermediate forms.

Standards and references

Test this on your domain

Run the check that produces this finding, on its own, against any domain.

Open the http redirects checkerBuild the fix

Other http redirects checks