A few months ago I was handed the keys to a six-year-old SaaS blog. Three hundred and fifty published posts. A respectable domain rating. Two writers on staff. And, depending on how you counted, somewhere between 70 and 75 percent of those posts pulling in fewer than ten organic visits per month. The team kept publishing two new pieces every week. Traffic had been flat for nearly a year.

This is the most common content problem I encounter. Not “we have no content.” The opposite: we have so much content that nobody can tell what is working anymore. Posts pile up. Old guides get stale. Cannibalization quietly tanks rankings. The team can’t see the forest because the trees are five years deep.

An audit is how you cut through that. Done well, it tells you which 20 percent of your library is doing 80 percent of the work, where you have hidden ranking opportunities, and which posts you should genuinely delete. Done badly, it’s a spreadsheet that nobody opens after week two. This is the seven-step process I use, with the data sources, decision rules, and worked examples from doing this for SaaS companies and digital agencies for the better part of a decade.

When an audit is actually worth doing

A 200-post audit done properly is 25 to 40 hours of work spread across two to three weeks. Don’t do one for the wrong reasons. Strong signals that an audit will pay off:

  • Traffic plateau despite consistent publishing. You ship every week, organic traffic hasn’t moved in 9 to 12 months. New posts aren’t adding anything because old posts are siphoning, decaying, or both.
  • Indexing is dropping. Search Console shows the “crawled, currently not indexed” bucket growing. Google is telling you a chunk of the site isn’t worth its index slots.
  • Keyword cannibalization. Multiple posts ranking on page 2 for the same query, none breaking through. Often the cure is a merge, not a new article.
  • Engagement metrics declining. Average engagement time, scroll depth, internal link clicks — all drifting downward over a 12-month window.
  • Nobody owns the library. When asked “is this guide still accurate?” nobody has a confident answer. That’s a maintenance debt problem.

If two or more of those signals fire, an audit is overdue. If none of them fire and you’re a year-old blog with 40 posts that’s growing nicely — don’t audit. Keep publishing.

Step 1: Inventory — get every URL into one place

An audit starts with a complete list. Sounds obvious. It is the step most teams short-circuit because they assume their CMS export is the truth, and it usually isn’t. Drafts, redirects, custom post types, attachment pages, and orphaned URLs hide in the gaps.

Where to pull URLs from

  • Your sitemap (sitemap.xml). The fastest source. Use a sitemap parser or just paste it into Screaming Frog in list mode.
  • WP All Export for WordPress sites. Export every published post, including custom post types, with publish date, last modified date, author, category, tags, and word count.
  • A full Screaming Frog or Sitebulb crawl. Catches orphan URLs that aren’t in the sitemap but are still indexable.
  • Search Console’s Pages report. Shows what Google has actually crawled, including pages your CMS doesn’t know about.

Cross-reference these. The delta between “CMS says we have” and “Google has actually indexed” is often the most interesting part of the audit before you’ve scored anything.

What to capture in the inventory sheet

For each URL, columns for: URL, page title, H1, primary category, author, publish date, last modified date, word count, and a unique row ID. That’s your base spreadsheet. Don’t add anything else yet — you’ll enrich it next.

Step 2: Enrichment — pull the metrics that matter

The inventory sheet is now joined against three data sources. This step is the most tedious and the one where teams cut corners. Don’t.

From GA4 (rolling 12-month window)

  • Sessions per URL
  • Engagement rate
  • Average engagement time
  • Conversions per URL (whatever your conversion event is — trial signup, demo booking, newsletter subscribe, lead form)
  • Conversion rate (conversions divided by sessions)

From Google Search Console (rolling 12 months)

  • Total clicks
  • Total impressions
  • Average CTR
  • Average position
  • The top five queries the URL ranks for, with click and impression data per query

From Ahrefs, Semrush, or your preferred SEO suite

  • Number of referring domains
  • Number of organic keywords ranking
  • Estimated organic traffic value
  • Top exact-match keyword and its current ranking

The result is one master sheet, one row per URL, roughly 20 to 25 columns. This is your operating document for the rest of the audit. Save it. Version it. Don’t edit it without snapshotting.

Step 3: Classify by purpose — not all posts should be measured the same way

Here is where most audits go off the rails. People look at the master sheet, sort by sessions, and start deleting. That’s a mistake, because not every post is supposed to drive sessions in the first place.

Tag every URL with one of these categories:

  • Rank/SEO. Posts written to win organic traffic on a target query. Measured by clicks, impressions, position, and assisted conversions.
  • Convert. Mid- and bottom-funnel posts whose job is to close visitors who landed elsewhere. Measured by direct conversion rate and assisted-conversion lift.
  • Brand/awareness. Top-of-funnel POV pieces, founder essays, manifestos. Measured by social shares, referring domains, and brand search lift.
  • Educational. Documentation-adjacent content that supports the product. Measured by support ticket deflection, time on page, and existing-customer engagement.
  • News/timely. Reactive content with a short half-life. Measured by traffic spike in the first 30 days, then archived.
  • Archive. Old release notes, retired changelogs, defunct case studies. Should generally be deleted or noindexed.

Tagging takes time. On a 200-post audit, budget two to three hours. Don’t let an LLM do it without review — intent classification is exactly where automated tagging gets things subtly but consistently wrong.

Step 4: Score and bucket — the four-quadrant matrix

For every “rank/SEO” and “convert” post, plot two axes: traffic on one, conversion on the other. That gives you four buckets, each with a clear default action.

Bucket Traffic (sessions/mo) Conversion rate Default action Priority
HERO (high traffic + high conversion) > 500 > 2% Keep, optimize, build clusters around it, refresh quarterly P0 — protect at all costs
OPPORTUNITY (high traffic + low conversion) > 500 < 0.5% Improve CTAs, add a relevant offer, tighten the intent match P1 — biggest ROI of any work in the audit
PROMOTE (low traffic + high conversion) < 100 > 2% Build internal links, target backlinks, refresh for SEO P2 — high-leverage if you can move traffic
DECISION (low traffic + low conversion) < 100 < 0.5% Update, merge, redirect, or delete P3 — the work happens here

The exact thresholds depend on the size of the site. On a small site, “high traffic” might be 100 sessions a month. On a 5-million-pageviews-per-month publisher, it might be 5,000. Set the thresholds at the 75th and 25th percentiles of your own data, not at someone else’s benchmark.

Most of the labor of an audit happens in the DECISION quadrant. That’s where you spend most of the next two steps.

Step 5: Decide actions for the DECISION bucket

For every URL in DECISION, one of four outcomes:

Keep and update

Use when: the post targets a keyword that still has demand, the topic is still relevant, and the underperformance is fixable through better depth, fresher data, or improved on-page SEO. A rule of thumb — if a competitor’s post on the same topic is ranking and getting links, your post probably can too. The fix is execution, not strategy.

Merge into a stronger post

Use when: you have two or more thin posts on overlapping topics that would be stronger as one comprehensive piece. Pick the strongest URL (more backlinks, better rankings, longer history) as the canonical. Pull the unique angles from the others into it. 301 redirect the merged URLs to the canonical. This is the single highest-leverage move on most audits.

Delete with 301 redirect

Use when: the post is genuinely obsolete (defunct product, retired feature, ten-year-old listicle of dead tools), but it has at least one referring domain, internal links pointing at it, or non-trivial historical traffic. Redirect to the closest topical match — not always the homepage. Redirecting everything to / is the lazy move that costs you topical relevance.

Delete and let 404

Use when: the post has zero backlinks, zero internal links, near-zero historical traffic, and no good redirect target. A clean 404 is fine in this case. Google handles 404s gracefully on small volumes. The only reason not to use a 404 is link equity, and if there’s no link equity, there’s nothing to preserve.

Warning — the danger of mass deletion. The single most common mistake I see is teams who decide they’re going to “clean up the blog” and unpublish 80 posts in a weekend without redirects. The downstream damage is usually three things: lost backlinks (a referring domain pointing at a 404 stops passing equity within a few weeks; map every deletion to a redirect using a tool like Redirection or RankMath’s redirect manager), broken internal links (run a Screaming Frog crawl after the deletes and fix every internal 404 within 48 hours), and dropped entity associations (Google’s understanding of your topical authority is built from the corpus; gutting half of it can confuse the entity graph for months). Mass deletion can work, but only with a redirect map, an internal-link audit, and a rollout plan.

Step 6: Execute — the boring part nobody plans for

You now have a master sheet of 100 to 200 actions. The execution phase is where audits go to die. The team finishes the analysis, declares victory, and the action items live in a shared doc that nobody opens. Two rules:

Sequence, don’t bulk

Redirects and deletes go in batches of 20 to 50 at a time, spread across two to four weeks. Never bulk-delete in one day. The reasons are operational: if something breaks (a redirect loop, a chunk of broken internal links, a sudden indexing spike of 404s), you want to be able to spot it before it scales to the whole library. A staggered rollout also helps Google process the changes more smoothly.

Track everything in a project board

Move every action into a real project tool with owners and dates. Linear, Asana, ClickUp — doesn’t matter which. The columns I use are: To Do — In Progress — Awaiting Review — Live. Each card includes: original URL, action type, target URL (for merges and redirects), the writer or developer assigned, and the date the change goes live.

Keep the original master sheet read-only. The project board is the source of truth for the execution phase. Cross-pollinating between the two is how you lose track of which URLs have already been redirected.

Step 7: Measure 90 days later

An audit isn’t finished when the last redirect ships. It’s finished 90 days after the last change goes live, when you can compare a clean before-and-after.

What to re-pull at the 90-day mark:

  • Total organic clicks (GSC) — should be flat to up. A small dip in the first 30 days is normal as Google reprocesses the redirect map.
  • Total indexed pages (GSC Pages report) — should be down (that’s the point) but the indexed-versus-submitted ratio should be up.
  • Average position on top 50 queries — should be improving for queries where you merged thin posts into stronger ones.
  • Sessions and conversions on the URLs you optimized in the OPPORTUNITY bucket — this is where you’ll see the biggest wins.
  • Crawl budget signals — if you can see them in your log files, the share of crawl going to high-value URLs should rise.

Realistic expected outcomes

For a healthy audit on a 200-post B2B SaaS blog, six-month results in a recent project we ran landed roughly here: 40 deletions with redirects, 60 merges, 30 substantive updates, 70 kept as-is. Organic traffic up around 38 percent. Indexed-page count down 35 percent. Conversion rate on the OPPORTUNITY bucket up by half. Editorial bandwidth freed up by retiring posts the team was unconsciously maintaining.

Don’t expect a 200 percent traffic miracle. Honest audits typically deliver between 20 and 60 percent traffic lift over 6 to 9 months on sites with the right preconditions. Less if the underlying content quality is genuinely poor and no amount of pruning will save it.

Tools comparison: which crawler should you use

Three tools cover 95 percent of audit needs. They’re not equivalent.

Tool Crawl size limit JS rendering Price Best for
Screaming Frog 500 URLs free, unlimited paid Yes (Chromium-based) £199/year One-off audits, deep technical inspection, exporting raw data into your own sheet
Sitebulb Unlimited (desktop), 500K+ (cloud) Yes $13.50/mo (desktop) to $40+/mo (cloud) Reports you hand to a client, visual analysis, prioritized hint lists for non-technical readers
Ahrefs Site Audit Tied to subscription tier Yes Bundled with Ahrefs ($129+/mo) Ongoing monitoring, integration with backlink and ranking data, scheduled re-crawls

My default: Screaming Frog for the inventory and technical inspection, Ahrefs Site Audit for the keyword and backlink overlay, and the master spreadsheet stitched together in Google Sheets. Sitebulb is the right choice when the deliverable is a report rather than a sheet of actions.

The gray area: low-traffic informational posts that never had a chance

Every audit surfaces a category that doesn’t fit cleanly into the matrix. Posts written for a real reader question, well-researched, well-written, but pulling 5 sessions a month because the keyword has 80 monthly searches and the post never got internal links or backlinks.

Deleting these feels wrong — they’re objectively useful. Updating them feels pointless — the ceiling is too low. The right call is almost always a merge into a stronger pillar piece. Take five thin posts, each ranking for a different micro-query, and weave their unique sections into one long pillar guide that targets the broader topic. The pillar gets length, internal coverage, and a clear topical signal. The thin posts get redirected, preserving link equity.

This is where the highest leverage on most audits hides. Not in the deletes. In the merges that turn a fragmented topic into a single ranking asset.

An audit isn’t about deleting half your library. It’s about treating each URL as a deliberate choice.

Common mistakes

The mistakes that come up over and over in audit retrospectives:

  • Mass deletion without redirects. The single most expensive mistake. You lose backlinks, internal link equity, and entity associations all at once. Always map deletions to redirects unless the URL has zero links anywhere.
  • Auditing without GSC data. If you don’t have at least 12 months of clean Search Console data, you’re flying blind. Sessions in GA4 are not a substitute — they don’t tell you what people searched for to land on the page.
  • Treating all posts the same. Educational support content fails the “low traffic, low conversion” test almost by definition. So do brand essays. Audit by purpose, not by raw numbers.
  • Auditing too often. Every 12 to 18 months is enough for most sites. Auditing every quarter just churns the library and burns the team out.
  • Deleting top-funnel content because “it doesn’t convert.” Top-funnel content feeds the rest of the funnel. If a popular awareness post never converts directly but supplies 30 percent of newsletter signups that later convert, deleting it craters everything downstream.
  • Skipping the 90-day measurement. Without the after-data, you can’t tell which decisions worked. The next audit will repeat the same mistakes because nobody learned anything from this one.
  • Letting an LLM make the keep/delete call. Use AI for inventory, summarization, and even classification proposals. Don’t let it make final decisions. Intent and brand context need a human.

A practical wrap-up

If you’ve never run an audit before, here’s the smallest version that still works. Pick a 50-post slice of your blog — ideally the oldest 50, or the worst-performing 50 in GSC. Run the seven steps on just that slice. It’s a one-week project for one person. You’ll catch most of the value the full audit would catch, and you’ll learn where your real bottlenecks are before committing the team to a multi-week effort.

The instinct on a struggling content library is to publish more. Sometimes that’s the right answer. More often, the answer is to first understand which 70 percent of what you have is dragging the other 30 percent down. An audit is the cheapest, highest-leverage exercise in content marketing for a mature library, and it’s the one most teams put off until the year their traffic chart goes flat. Don’t wait for that year. Run the audit while the chart is still going up — you’ll get more out of every post you publish next.