DEV Community

Riichi Mirza
Riichi Mirza

Posted on

Redirect Chains on Small Sites: How Three Hops Quietly Waste Your Crawl and Your Users' Patience

Most small-site owners I work with don't have a "redirect problem." They have a redirect history. Every redesign, HTTPS migration, slug tidy-up and plugin swap left a rule behind, and nobody ever went back to flatten them. The result is redirect chains: one URL bouncing through two, three, sometimes five hops before a visitor (or Googlebot) reaches the real page.

This post is the practical version: what a chain looks like, why it matters even on a 40-page site, the one pattern that does real damage (mass homepage redirects), and how to fix everything down to a single hop.

What a redirect chain actually is

A chain is any request that needs more than one redirect to resolve. A classic small-business example:

http://example.com/services
  → 301 https://example.com/services
  → 301 https://www.example.com/services
  → 301 https://www.example.com/services/
  → 200
Enter fullscreen mode Exit fullscreen mode

Three hops for one page. Nobody planned that. The HTTPS rule came from the host, the www rule from a plugin, the trailing slash from WordPress permalinks. Each one is "correct" on its own. Together they're waste.

A loop is the nasty cousin: A → B → A. Browsers give up with "too many redirects," and so does Google.

Why it matters even on a small site

You'll read that crawl budget only matters for million-page sites. Mostly true. But chains cost you in other ways:

  1. Latency on every hop. Each redirect is a fresh round trip — DNS (sometimes), TLS, server response. On mobile with a slow shared host, three hops can add close to a second before the first byte of real HTML.
  2. Googlebot stops following eventually. Google follows up to roughly 10 hops in one go, but long chains get deferred, and every hop is another chance for something to break.
  3. Signal dilution and confusion. A 301 passes signals, but chains mixed with 302s, meta refreshes or JavaScript redirects make it harder for Google to be sure which URL is canonical. That's how you end up with the "wrong" version indexed.
  4. Internal links point at old URLs. Chains almost always mean your own menus, footers and posts still link to dead addresses. That's the part you fully control.

The pattern that does real damage: mass 301s to the homepage

During a cleanup, a common shortcut is: "Redirect every deleted page to the homepage." It feels tidy. It isn't.

Google treats a redirect from a specific page (say, an old product or blog post) to an unrelated homepage as a soft 404. The old URL isn't credited as moved — it's treated as gone, but with extra confusion. You lose whatever relevance that old page had, and Search Console fills up with soft-404 reports you can't explain.

The rule I use with clients:

  • Relevant replacement exists? 301 to that exact page.
  • Category or parent exists? 301 to the closest parent (e.g. /blog/ for retired posts).
  • Nothing relevant? Let it return a real 404 or 410. That's honest, and it's fine.

The homepage should be a redirect target only for things that genuinely were the homepage (old index.html, /home, the non-www root).

How to find your chains (free, 20 minutes)

1. curl one URL to see every hop

curl -sIL http://example.com/services | grep -iE "^(HTTP|location)"
Enter fullscreen mode Exit fullscreen mode

You'll see each status code and Location header in order. More than one 301 = chain.

2. Crawl the whole site

Screaming Frog (free up to 500 URLs) → Reports → Redirects → Redirect Chains. On a small site this gives you the full list in minutes. Any free crawler that reports "redirect chains" works.

3. Check Search Console

Pages report → look at "Page with redirect" and "Soft 404." If the soft-404 list is full of old URLs, check whether they're redirecting to the homepage.

4. Check your redirect sources

On WordPress, chains usually come from three places stacked on each other: .htaccess / server config, a redirect plugin (Redirection, Rank Math, Yoast Premium), and the host's own HTTPS/www setting. List what each one does before you change anything.

Fixing chains down to a single hop

Step 1 — Pick one canonical host format. https://www. or https:// without www, with or without trailing slash. Decide once.

Step 2 — Make the protocol + host redirect a single rule. Instead of separate HTTP→HTTPS and non-www→www rules, combine them so any variant goes straight to the final form:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
Enter fullscreen mode Exit fullscreen mode

Turn off duplicate "force HTTPS" toggles in plugins or the host panel if this rule now handles it.

Step 3 — Update old redirects to point at the final URL. If /old-page → /new-page and later /new-page → /newest-page, edit the first rule so /old-page → /newest-page directly. Every redirect should land on a 200.

Step 4 — Fix internal links at the source. Search your content and menus for old URLs and replace them with the final URL. Redirects are for outside links you can't control; your own links should never need one.

Step 5 — Clean up homepage dumps. Go through any bulk "everything → /" rules. Map each URL to a relevant page, a parent section, or let it 404/410.

Step 6 — Re-crawl and verify. Run the crawler again. Target: zero chains, zero loops, every internal link returning 200 directly.

Don't forget canonicals and sitemaps

Redirects, canonical tags and sitemaps should all agree on the same final URL. If your sitemap lists http://example.com/page and your canonical says https://www.example.com/page/, you're sending mixed signals. I wrote a full walkthrough on getting canonicals consistent here: How to fix duplicate content with canonical tags.

A note on short links and campaign URLs

Short links and QR codes are redirects too — usually one hop, which is fine. The problem is when the short link points at an old URL that also redirects. Now a printed QR code on a flyer runs a three-hop chain forever. When you update a page's URL, update the destination of any short links pointing at it. A simple URL shortener where you can edit destinations later saves you from this.

Quick checklist

  • [ ] One canonical host format, enforced by one rule
  • [ ] No redirect points to another redirect
  • [ ] No loops
  • [ ] No mass 301s to the homepage for unrelated pages
  • [ ] Internal links, sitemap and canonicals use final URLs
  • [ ] Short links / QR destinations updated after URL changes

Redirect cleanup isn't glamorous, but on a small site it's one of the few technical fixes you can finish completely in an afternoon. More practical small-site SEO notes on the Riichi Mirza blog.

Top comments (0)