River
Y CombinatorBacked by Y Combinator
FREE TEMPLATE

Content Audit Template and Redirect Map

Every URL gets a decision, the evidence behind it, and the mechanism that ships it. The redirect map comes out tested.

Free download  ·  No account needed

Redirect Map  ·  Aldermoor Software  ·  staging test run 1 of 2

699 rules in. 693 out. 297 sources changed first.

Rules at staging699  (411 merges, 288 equity retirements)
After variant expansion1,445
Failed an assertion153 rules, plus 214 sources missing a variant

The seven assertions

#AssertionResultWhat was actually wrong
1Code is 301 or 30831 failedThe CDN's bulk importer defaults every uploaded row to a temporary redirect
2Mechanism is server side43 failedThe legacy resource host serves a five second meta refresh, treated as a redirect since 2019
3First hop lands on a 20058 failedChained through rules left over from the 2019 migration
4No loops2 failedTwo duplicate clusters resolved twice, by two people, with no survivor named
5No target is also a source4 failedBorn as chains. Pointed at URLs the same map retires elsewhere
6Target is the nearest surviving page19 failedPointed at the homepage. Thirteen had an obvious target nobody had looked for
7Every source variant covered214 failedTrailing slash form returns 404 on this server rather than resolving to the rule

Resolution

Six of the nineteen rules under assertion 6 had no plausible target and became 410s, which is the honest mechanism for a URL with nowhere to go. The map shipped at 693 rules.

Not one of these failures is visible in a browser. All of them are visible as a traffic loss eight weeks later, in an audit that had already been declared finished.

Every content audit template on offer is an empty spreadsheet with a dropdown. Columns for the URL, the traffic and the word count, then a keep, update, consolidate or delete column somebody fills in by hand. The labels are the easy half. What happens to a page is decided by which mechanism carries the label out, and there are five of them: a permanent redirect, a temporary redirect, a 410, a noindex, and leaving it alone. They do five different things.

Google publishes what each one does. Permanent redirects show the new target in search results and temporary redirects show the source page, so a merge shipped as a 302 leaves the old URL in the index and looks identical in a browser. A 410 and a 404 are handled the same way, so the code everyone agonises over changes nothing. A 410 on a tag archive comes back on the next build. This pack decides the mechanism, then tests it.

The worked example reconciles 2,486 URLs from three sources that disagreed by 639. It retires 63 per cent of a site for nine tenths of one per cent of its traffic, and its redirect map failed 153 rules on the first staging run. Pair it with the full Search Console export past the thousand row cap and the crawl audit ranked on traffic lost. The marketing workspace keeps the inventory between quarters, so the next pass is 200 rows.

Two thousand URLs, a decision on each, and the sheet that says who overruled it

The Content Inventory, the Redirect Map and the Overrides sheet.

Content Inventory

Aldermoor Software, a fictional workforce scheduling product with nine years of blog. 2,486 URLs reconciled 4 August 2026 against Search Console for 1 August 2025 to 31 July 2026.

URLClicksImpr.RateRef. domainsInlinksRuleDecisionMechanism
/blog/overtime-rules-by-state41,200684,0006.0%2141864KeepNone
/blog/how-to-build-a-rota7,31098,4007.4%41634Keep, merge targetNone
/blog/shift-swap-policy-template6114,2000.4%3123UpdateNone
/blog/scheduling-compliance-checklist98,9000.1%7213UpdateNone
/blog/rota-templates-free84026,1003.2%9182Merge301
/resources/wfm-buyers-guide1,41038,2003.7%1702Merge301
/press/aldermoor-series-b61,1000.5%4126Retire301
/blog/best-scheduling-apps-201948800.5%1256Retire301
/blog/team-photo-offsite-2017000.0%007Retire410
/pricing-change-june-20241902,4007.9%101Keepnoindex
/legal/dpa-2021000.0%041Keepnoindex
/tag/scheduling229,8000.2%01481Keepnoindex

The rules, and why the order is the method

#RuleOutcome
1No author created it, or its job is outside searchKeep, or noindex. Runs before a single number is read
2Near duplicate of a better pageMerge. Resolves clusters before any keep or update call
3Distribution with almost no click rateUpdate. Never retire
4Above the click floor, content currentKeep
5Above the click floor, content staleUpdate
6Below the floor, holds equityRetire by permanent redirect to the nearest surviving page
7Below the floor, no equity, no targetRetire by 410

Rule 2 before rule 4 changed 96 decisions here. On its own numbers /blog/rota-templates-free earns 840 clicks and is a keep. Read next to the page answering the same question 6.5 times better, it is a redirect.

Redirect Map

One rule per source, expanded for variants, with the staging test result on the row.

RuleSourceTargetCodeHopsFinalFailedDiagnosis
R-004/blog/rota-templates-free/blog/how-to-build-a-rota3011200Pass
R-018/blog/overtime-2019-update/blog/overtime-rules-by-state30212001Bulk importer default. Shows the source page in results, so the merge never happens
R-047/blog/old-scheduling-tips/blog/how-to-build-a-rota30132003Chains through two rules left from the 2019 migration
R-061/blog/annualised-hours-explainer/blog/annualised-hours3011loop4R-062 maps the target back to this source. Cluster resolved twice, no survivor named
R-088/resources/wfm-buyers-guide/guides/workforce-managementrefresh02002Five second meta refresh on the legacy host, which Google reads as temporary
R-113/blog/holiday-pay-2018/30112006Homepage target. Repointed to /blog/holiday-pay-calculation
R-121/blog/christmas-party-2018/30112006Homepage target and no nearest page exists. Removed from the map, shipped as a 410
R-155/blog/scheduling-software-comparison/blog/best-scheduling-apps-201930112005Target is retired elsewhere in this map. Repointed straight at /compare
R-206/blog/2021-product-roadmap/product30112007Trailing slash form 404s rather than resolving to the rule

The four values every assertion resolves from

ColumnRequirement
First status301 or 308. A temporary code hands the survivor nothing
Hops1. Not a chain that resolves eventually
Final URLEqual to the intended target
Final status200

Collected with a request that reports the whole status chain. The URL inspection panel cannot do this job: Google's status code documentation states that its inspection tooling does not follow redirects at all.

Overrides

Seven overrides across 2,486 decisions. Every row keeps the rule it broke, who broke it and why.

URLRule saidShippedWhoReason
/pricing-change-june-2024410noindexLegalCustomers were emailed this exact URL in June 2024 and still hold the link
/compare301 to /productKeepSalesThree reps send it in every competitive deal. Nobody searches for it and it closes revenue
/blog/nhs-rostering-guidanceUpdate410Content6,400 impressions for a sector we stopped selling to in 2024. Distribution for the wrong audience is not an asset
/blog/overtime-rules-by-state-2024301KeepContentNot a duplicate. 41 referring domains cite the 2024 figures specifically and open payroll disputes still turn on them
/blog/scheduling-glossary301Keep and rewriteContent22 referring domains on a glossary is a link magnet doing its job
/blog/2019-customer-awards301 to /newsroom410CommsBoth referring domains are dead sites. A rule that carries nothing is still a rule somebody maintains forever
/tag/overtimenoindex301ContentThe one tag archive with 3,100 impressions and a real page on exactly that subject. The other 140 stay on noindex

What the pattern across them says

FindingWhat to do about it
Two of the seven turned on business function, which no export containsCollect it before the rules run rather than overruling them afterwards
Two overrides made the outcome more aggressive, not lessAn override sheet that only ever softens decisions is one nobody is really using

This is the sheet you are glad of in six months, when somebody asks why a page they remember is gone and the answer needs to be a sentence rather than an investigation.

What you get

01

Content Inventory

One row per URL with the seven inputs a decision actually rests on, then the decision, the mechanism and a sentence of evidence naming the figures that settled it. Somebody reading only the evidence column can disagree with a specific number, which is the only kind of disagreement worth having about an audit.

02

Decision Method

The seven rules in the order they run, and the order carries more of the value than the rules do. Duplicate clusters resolve before any keep or update call, because a page with real traffic that is a worse version of another page is a redirect, and only cluster-first ordering ever surfaces that.

03

Retirement Mechanics

What a permanent redirect, a temporary redirect, a 410, a noindex and a robots.txt disallow each actually do, with Google's documentation behind every line. Including why disallow is not on the list: Google's own page on removing a page says not to use it to block a page, and a URL that is never crawled never has its noindex read.

04

Redirect Map

One rule per source URL, expanded to cover both slash forms and the case variants your server resolves, carrying the first status, the hop count, the final URL and the final status. A map without those four columns has not been tested, whatever anyone clicked in a browser.

05

Redirect Map Tests

Seven assertions run against a staging deploy before anything ships, each with the diagnosis behind the usual failure. A temporary code means an importer defaulted that way. A chain means an old migration's rules are still live. A loop means a cluster was resolved twice with no survivor named.

06

Retirement Queue

Everything that is not a redirect, batched by mechanism and sequenced, so the work reaches engineering as three deploys rather than sixteen hundred tickets. With the verification and the owner on each batch, and blocked batches visible instead of quietly dropped.

07

Overrides and Inventory Sources

Every row where a human overruled a rule, with the rule, the person and the reason. Plus where the URL list comes from and why one source is never enough: on the worked example the crawl found 565 URLs the CMS export does not list, and 74 more earning clicks appear in neither.

How it works

  1. 1

    Send the exports

    A CMS export, a crawl, twelve months of Search Console performance by page, the page indexing report, and referring domains per URL if a backlink tool is already paid for. A partial set works.

  2. 2

    River reconciles first

    Three sources, one inventory, and the URLs that appear in exactly one of them read individually. A page earning clicks that nothing links to is invisible to a crawl by definition.

  3. 3

    Every URL gets a decision

    The rules run in order, you set the thresholds, and each row carries the numbers that decided it. Then the figure that gets an audit approved: the retire set's share of the year's clicks.

  4. 4

    The map ships tested

    Merges and equity retirements become redirect rules, expanded for variants and run against the seven assertions on staging. Everything else batches by mechanism, with a dated check at fourteen and ninety days.

Frequently asked questions

Is it free, and what format are the downloaded files?

Free, and no account needed for the download. Documents arrive as .docx and every sheet as .csv, so they open in Word, Pages, Google Docs, Excel, Numbers and Sheets with no conversion step. Most people open the inventory and the redirect map first.

What does Edit with AI actually do?

It installs this pack as a private Space and River fills it from your own exports. It reconciles your URL lists, applies the rules at thresholds you set, writes the evidence on every row, builds your redirect map and tests it. The worked example is replaced by your audit.

Should I use a 410 or a 404 for pages I delete?

It changes nothing at Google. The status code reference states that every 4xx except 429 is handled identically, so both remove the URL from the index at the same speed. Use 410 where your platform makes it easy, because it is the honest code for content deliberately removed, and stop worrying about it.

Can I just redirect everything I delete to the homepage?

No, and the assertion that catches it is the reason the map gets tested. A homepage target means nobody looked for a nearest page. On the worked example nineteen rules did this: thirteen had an obvious target somebody had skipped, and the remaining six became 410s, which is the honest mechanism for a URL with nowhere to go.

How do I verify a redirect actually landed?

With a request that reports the whole status chain, not with the URL inspection panel. Google's status code documentation states that its inspection tooling does not follow redirects, so it reports on the URL you gave it and stops. That is the wrong question, and it is why redirect maps ship broken.

My site has thousands of tag and author archives. Do those get deleted?

They cannot be. The theme regenerates them on the next build, so a 410 is a URL that comes back and takes a crawl error with it. noindex is the only mechanism that applies, and rule 1 claims them before any traffic figure is read. On the worked example that was 141 rows.

Does this pick which of two pages ranking for the same query survives?

For near duplicates in your own inventory, yes, and it names the survivor before writing either rule. Where two distinct pages compete on live ranking data across a whole site, the cannibalization review does that job on query-level evidence and hands back the redirect map.

Find out what share of your traffic the deletions actually cost

Send your exports. River reconciles them, decides every URL with the evidence on the row, and hands back a redirect map that has already been tested.

Edit with AI