DeepSmith

Oct 26 · Content Operations

19 min read

How to Clean Up Redirect Chains Left Behind by Years of Content Refreshes and Pruning

Avinash Saurabh
Avinash Saurabh · CO-Founder & CEO
A dark abstract diagram of winding gray lines converging into one clean white line that runs straight to a square node, behind the line Collapse Your Redirect Chains.

Years of content refreshes can leave an old article redirecting to a replacement that now redirects to another replacement. Each decision made sense on the day someone made it, and nobody went back to check what the earlier ones were pointing at. This guide shows agency teams how to clean up old redirects: find the chains and loops, send every retained old URL straight to the approved live page, and prove the result with a public test, without changing the content strategy underneath.

You'll need access to the client's redirect configuration, a crawler, Search Console, whatever records of old URLs the client has kept, and someone who is allowed to deploy and roll back changes.

The short answer to how to clean up old redirects without losing rankings is to trace each old URL to where it actually lands, confirm the page that should survive, and change every retained old URL to a single permanent server-side redirect to that page. Keep the old entry points working, update the links you control, test the routes, and then watch search performance and AI citations.

Google says permanent redirects do not cause a loss of PageRank. That isn't a promise that rankings, traffic, or AI citations stay exactly where they were, because the destination page and how each search system behaves still matter. You can promise a clean route, but you can't promise an outcome.

Assemble the historical URL inventory before you crawl

A crawl of the current site can't find every old redirect, because many old URLs aren't linked from anywhere on the live site anymore. So the first job is a list, one per client, built from every place an old URL might be written down.

Pull in redirect exports from the CDN or edge platform, the hosting setup, the CMS, and any redirect plugin. Add earlier crawl exports, refresh and pruning logs, old URL mapping spreadsheets, past sitemap files, Search Console and analytics exports, external link records, and request logs if you can get them. Screaming Frog's documentation suggests adding XML sitemaps, Analytics, and Search Console to a crawl to find orphan pages, and the same idea applies here, because a crawl of current navigation misses whatever nothing links to anymore.

Keep the raw inputs and write down where each URL came from. Remove exact duplicates only, and keep protocol, host, letter case, trailing slash, and meaningful query string variants separate until you've tested them. Don't lowercase everything, because URLs are case sensitive. Keep wildcard rules in their own list, since one pattern can touch URLs that never showed up in any export.

If you already run a content decay audit for the client, its inventory is a good starting point, since it already lists the pages that were refreshed or retired.

You're done when you can explain what the inventory covers and what it leaves out, and you have a deduplicated list of candidates. People go wrong here by treating the current XML sitemap as the whole history, assuming that no internal links means nobody uses the old URL, or auditing only the CMS rules when the first redirect happens at the edge.

Save the search and citation baseline, then rank the risk

Before you change a single rule, capture what things look like now. Without that, you won't be able to say later whether anything moved.

For each affected group of URLs and its survivor, record the current redirect trace, the Search Console clicks, impressions, CTR, and average position for the survivor, the known external references, and any AI answers that cite these pages.

Most Search Console performance data is attributed to the final canonical URL after redirects, so an old URL with almost no reported performance can still be an important entry point.

Work in this order, which is an agency triage habit and not a scoring model published by any search engine. Loops, broken destinations, and routes that can't finish come first. Next come routes that carry important citations, backlinks, or conversions, then chains that end on a page with indexing or relevance problems, and last the longer but otherwise healthy chains. Group overlapping routes together, since several rows in your sheet can be symptoms of one chain and the client shouldn't read them as separate incidents.

This is a step where DeepSmith does real work. Its AI visibility area shows which of your pages AI engines cite, each page's share of the total citations, and the prompts driving them, with the answer history and trends behind it. For a client workspace, that tells you which old URLs are being cited today and gives you a prompt and engine baseline to compare against after the change. It doesn't run an HTTP audit or promise that a citation survives. The walkthrough on how to [audit content for AI citations] before you rewrite anything(https://deepsmith.ai/blog/ai-citation-content-audit) covers the citation side in more depth.

A DeepSmith AI Visibility Pages view listing the cited pages of a demo site with citations, citation rate and prompts won, and a detail card for one page showing 62 citations, a 7.2% citation rate, 8 of 10 prompts won and the two prompts it is cited for. All figures are demo data.

You're done when every high-priority chain has an owner, an observed route, a baseline for its survivor, and a note on what is known about outside references. Anything you couldn't get is marked unavailable.

People go wrong here by promising a ranking lift for removing a specific number of hops, or by changing content, canonicals, URLs, and redirects all at once and then crediting every movement to the cleanup.

Run a redirect chain audit on the live site and the historical list

You need both. The site crawl finds redirects that your current pages still link to. The historical list finds routes the crawl can't discover. Screaming Frog is the default tool here, and the menu paths below are the documented ones, so minor wording can differ by version.

  1. Start a normal crawl of the site.
  2. Open Response Codes and select Redirection (3XX).
  3. Export the links that point at them from Bulk Export > Response Codes, choosing Redirection (3XX) Inlinks. This is your list of internal links to fix later.
  4. Export Reports > Redirects > Redirect Chains to see chains and loops.

Part B: trace the historical inventory

  1. Switch to Mode > List and upload or paste the old URLs.
  2. Turn on Configuration > Spider > Advanced > Always Follow Redirects.
  3. Check Configuration > Spider > Limits > Limit Max Redirects to Follow and write down the value.
  4. Run the audit, then export the All Redirects report and the Redirect Chains report.

List mode sets crawl depth to zero, so without Always Follow Redirects the audit can stop short of the real destination.

All Redirects includes every URL you uploaded, so it's how you check coverage. Redirect Chains is the fix list for multi-hop routes and loops.

A few limits matter:

  • List mode ignores robots.txt by default, so a diagnostic fetch doesn't prove production crawlers are allowed to fetch the page.
  • A crawl cap is a diagnostic limit and not proof of a loop. Mark a capped trace as unresolved and look at it by hand.
  • The free version stops at 500 URLs, so don't hand the client a truncated crawl as a whole-site audit. Paid licences are $279 per user per year for one to four users.

You're done when every old URL on your list has a result or an explicit unresolved status.

People go wrong here by leaving Always Follow Redirects off, treating a successful first redirect as proof the whole route works, or exporting only the failures and losing the count of everything they tested.

Approve one suitable survivor for each chain

Collapse each chain to the page that is supposed to survive, and not to whatever URL happens to be last. The last URL in a trace might be a 404, or a page that has nothing to do with the old one.

This step doesn't reopen the decision about whether a page should be consolidated, redirected, or deleted. That was made earlier. Here you're only checking that the approved destination is a sound place to send people.

For each chain, confirm that the survivor:

  • Returns a successful response when you request it directly.
  • Is the relevant replacement for the old content, and not a home page or a loosely related category page.
  • Still supports any passage or statistic that a known citation relied on.
  • Has a canonical pointing to itself, no accidental noindex, and no extra normalization redirect.

Then sort the exceptions, so nothing gets forced:

What you seeWhat to do
Relevant live survivor, unnecessary middle hopsPrepare direct mappings
Loop, with a documented approved survivorMap each retained source directly to that survivor
Loop with no survivor, or a chain that ends in an error or unrelated pageHold for owner review
Deliberate temporary redirectGet owner approval before making it permanent

Google warns against sending many old URLs to an irrelevant destination such as the home page, because the routes may be treated as soft 404s. Sending several pages that were genuinely merged to the page they were merged into is a different case, and that one is fine.

A loop deserves a note of its own. Take /old-guide redirecting to /combined-guide, which redirects back to /old-guide. There's no last page to pick automatically, so find the survivor that was approved earlier or get the owner to approve one, and then point both old entry points at it. If nobody can say what the survivor was meant to be, hold the group for review. A canonical tag won't fix a loop either, since it isn't an HTTP redirect.

You're done when every group has a documented approved final page, or is marked as blocked pending review.

People go wrong here by sending everything to the home page to make the error report look clean, or by swapping a redirect chain for a canonical tag and leaving users on the same route.

Rewrite every retained source straight to its survivor

Now you change the rules. The aim is to keep every old entry point alive while removing its dependence on the other old URLs.

Here's a worked example. The paths are made up, and it assumes the first three responses are permanent redirects and the final page returns 200. Before the fix, /guide-2019 goes to /guide-2021, which goes to /guide-2023, which goes to /evergreen-guide.

Entry pointBeforeAfter
/guide-2019Three redirects before the survivorOne permanent redirect to /evergreen-guide
/guide-2021Two redirects before the survivorOne permanent redirect to /evergreen-guide
/guide-2023One redirect before the survivorKeeps its direct permanent redirect
/evergreen-guideSuccessful final pageStays the successful final page

All three old URLs keep working, and the fix only removes their reliance on each other.

A before-and-after routing diagram: on the left, three old guide URLs redirect one after another before reaching the evergreen guide, and on the right each old URL redirects directly to the evergreen guide.

Use server-side permanent redirects wherever you can. Google recommends HTTP permanent redirects such as 301 and 308, and treats a 308 like a 301 for crawling. A 302 or 307 is a temporary move with a weaker interpretation, but don't switch it to permanent without asking, since someone may have set it that way on purpose.

Be sure you've found the layer that controls the first response. A redirect that looks like it lives in the CMS can sit behind an edge, host, scheme, or path rule, so look at the public response. Cloudflare's documentation shows why: Single Redirects run before Bulk Redirects, and the first matching redirect wins, so editing a later rule may change nothing if an earlier one still matches.

Before you deploy, export the previous configuration and have a rollback ready. Keep the change about routing, and avoid editing survivor content or canonicals at the same time. Review exact matches before you add broad patterns, and test a few nearby URLs a pattern shouldn't match. Make sure the destination is already the final normalized URL, because a content redirect followed by a scheme, host, or slash redirect is still a chain. No single Apache, Nginx, or CMS syntax is given here, since rule order and matching differ between them.

Common mistake: deleting the middle redirects after fixing the earliest source. Those intermediate URLs may have their own backlinks, bookmarks, or AI citations. Collapse their routes too, and keep their entry points.

You're done when each retained source reaches its approved survivor with exactly one permanent redirect, and the survivor answers directly with no further redirect.

The links you control should go straight to the survivor and need no redirect at all.

Use the redirecting inlinks export from step 3 to fix links in article bodies, navigation and related-content blocks, shared templates, canonical annotations, and any sitemap entries that still list a redirecting URL. Google recommends putting preferred canonical URLs in sitemaps and not every alternate route to the same content, and your XML sitemaps should be doing that for the survivors.

When the volume is large, treat it like any other retrofit of links across a big back catalog, in batches, with the smallest safe edit on each page. An internal link audit gives you the same before-and-after proof for links that the redirect trace gives you for routes.

For important external links, ask the publisher to update to the direct URL when that's practical, but don't wait on a reply before you deploy.

On retention, Google's guidance says to keep redirects for as long as possible, generally at least a year, and to think about keeping them indefinitely for users. That line comes from advice about URL changes. It isn't evidence that an old redirect is safe to delete after a year, and it isn't a timer that resets when you collapse a chain. For this kind of hygiene work, keep the useful old routes.

You're done when a recrawl finds none of the targeted old URLs in the repaired internal references, and the historical external entry points still resolve.

People go wrong here by removing the old rules once the internal links are updated, or by expecting the old redirecting URLs to become indexed pages again.

Test the public routes and the destinations separately

A rule change isn't finished until a public request proves the route, and a second check proves the survivor. Do these as two different tests.

Start with the bulk check. Run the same historical list again and compare each result against the approved mapping. Each source should still respond, use the intended permanent status, reach the approved survivor in exactly one redirect, and show no loop or capped trace. The survivor should answer directly. Then recrawl the live site to confirm the repaired internal links no longer enter the old routes.

For high-priority sources, trace them yourself with curl so you aren't relying on one tool's view. Set SOURCE to the real absolute address and use a separate header file for each source.

curl --silent --show-error --location --max-redirs 10 \
  --dump-header redirect-headers.txt \
  --output /dev/null \
  "$SOURCE"

Read the status lines and Location headers. A collapsed route shows one redirect to the approved target followed by a successful response. Run the same command against the target itself, and it shouldn't add another redirect. The --max-redirs 10 value is a cap you chose for the test and doesn't mean ten hops is acceptable. Googlebot generally follows up to 10 redirect hops and curl's own default is 50, and neither is a target. A capped trace is unresolved, and a loop is only established when the route repeats an address it already visited.

Next, check the survivor in Search Console by itself. The URL Inspection result for a redirecting source describes that source and not the target's indexed state, so use the survivor's own result to look at its Google-selected canonical, and remember that a valid live result doesn't guarantee indexing.

Read the page indexing report with care. "Page with redirect" is normally expected for an old non-canonical source that redirects, and it isn't a broken-route finding. "Redirect error" is a real problem, and Google lists a chain that is too long, a loop, a redirect URL over the maximum length, or a bad or empty URL as causes. Once you've fixed every known instance, use Validate fix and don't restart validation while it's running. Google says validation typically takes up to about two weeks and sometimes much longer, and that has nothing to do with how fast rankings recover.

If AI search matters to the client, confirm the crawlers can reach the survivor. OpenAI treats OAI-SearchBot, which supports ChatGPT search, separately from GPTBot, so a site can allow one without the other.

You're done when every changed source passes the routing checks, the survivor checks are written down, and any report delays or unrelated issues are kept apart from deployment failures.

Pro tip: prove the HTTP change right away, then watch indexing separately. A fresh public trace shows the route is fixed even while Search Console still displays an older crawl result.

Monitor the survivors and stop the next chain from forming

The last step has two parts: watch what happens after the change, and make future refreshes update the old URLs before a chain can grow.

Use a written schedule, and don't promise a universal recovery time. A reasonable one for an agency is to save the public traces at deployment, check priority entry points the next working day, review Search Console issues and citation evidence around days 7 and 14, and around day 28 compare a suitable period with your saved baseline, allowing for weekdays, seasonality, and other changes. These are working intervals and not search engine requirements. If you see a drop, a triage for an organic traffic drop helps you separate a routing problem from a demand shift before you decide to undo anything.

Watch whether tracked AI answers cite an old address, the survivor, some other source, or nothing at all. A citation that still shows the old address but whose click lands on the survivor isn't the same event as a new citation that names the survivor directly, so record both.

DeepSmith is the second place the product does real work. Use the same tracked prompts and engines you used for the baseline. DeepSmith shows page-level citation information, the prompts behind those citations, answer history, and visibility trends, which supports a clear before-and-after comparison for the client. Keep mention rate and citation rate apart, because a brand mention isn't necessarily a link to the repaired page. Answer composition, prompt changes, and other site changes all move these numbers, so this is monitoring evidence and not proof of cause.

To stop the next chain from forming, add this to every future refresh that retires a destination:

  1. Search the redirect register for every source that currently leads to that destination.
  2. Update those earlier sources to point directly at the new survivor, and keep their entry points.
  3. Fix the internal references you control.
  4. Add the changed sources and the survivor to the regression list.
  5. Record the owner, the reason, the approval, and the test result.

Run a check after every large batch of refreshes. Once the routes are fixed, you can also get AI crawlers to recrawl your updated pages faster. If your team already works through how to refresh existing articles for AI citations, add the predecessor check to that same checklist so it happens each time. For the client report, give counts such as affected entry points, affected chains, maximum hops observed, loops, and unresolved exceptions, and say what each count is out of.

You're done when you have a repeatable report, a maintained redirect register, a named owner, and a refresh checklist that includes updating predecessors. People go wrong here by promising that every citation will update within a set number of days, or by keeping an audit spreadsheet nobody opens during the next refresh.

What to do next

Save the tested mapping as the client's redirect register, then add a predecessor check to the next refresh batch. The lasting result is a routing system someone maintains, and not just a cleaner crawl report. Teams that treat old content redirects SEO work as a one-off task end up back here in a year or two.

If you also want to know which of those old URLs AI engines cite today, and whether the survivors pick up those citations over the following weeks, you can start a DeepSmith free trial and track page-level citations and answer history for each client workspace while your team handles the redirect work.

Frequently asked questions

Do redirect chains automatically reduce rankings or lose link equity?

There's no universal ranking-loss percentage. Google says permanent redirects do not cause a loss of PageRank, but chains add routing work and can lead to crawl or access problems. Collapse unnecessary chains to the relevant survivor without promising unchanged rankings.

Should I delete old redirects after pointing the first URL to the final page?

No. Intermediate URLs can have their own backlinks, bookmarks, and citations, so keep each one as a direct redirect to the survivor.

Why does Search Console still show "Page with redirect" after the cleanup?

That's normally expected for an old non-canonical source that redirects. Inspect the survivor separately. "Redirect error" is a different state and can point to a loop, an overly long chain, or an invalid redirect address, and reports update as pages are recrawled and validated.

Will old AI citations automatically become citations to the new page?

That isn't guaranteed. A retained redirect keeps an old citation's click useful, but which source an engine picks next time is its own decision. Make sure the survivor is accessible and relevant, then watch the same prompts and engines before and after the change.