Every content audit guide ends in the same place. Find the pages that are not working, and delete them. Semrush, Orbit Media, Screaming Frog and most of the agency posts ranking for "seo content audit" all converge on some version of prune, consolidate, move on. The advice is delivered with confidence and almost never with data, because publishing the data means publishing your own numbers.
So we published ours.
We ran a full content audit on our own blog. 187 posts, 90 days of Google Search Console data, every URL joined to its real impressions, clicks, average position and query set. The script that produced it is committed in the repository that builds this site, so the method is rerunnable end to end against any Search Console property you have access to. Every number below comes out of that script.
The headline number matches the premise of every pruning guide. Of the 121 posts that Google had been serving for at least six months, 88 of them, 72.7%, earned fewer than 10 clicks in 90 days. Thirty-eight percent earned none at all. By any revenue test, roughly three quarters of the library was dead weight.
Then we looked at why, and the pruning advice fell apart.
Only 1.7% of those posts were invisible. The dead weight was not sitting unseen. It was being shown to searchers 90,745 times over 90 days and converting 123 clicks out of it, a click-through rate of 0.14%. Deleting those pages would have deleted the single most valuable thing they produced: a precise, free, 90-day signal about which topics have demand and where exactly we are failing to capture it.
This post is the full audit. The method, so you can copy it. The distribution, so you have a benchmark that is not a vendor's marketing number. The four diagnoses we classify every failing page into. And one reporting artefact we found along the way that will quietly corrupt any content audit run from a raw Search Console export.
The short answer
A content audit that ends in "delete the dead weight" is measuring the wrong thing. In our audit of 121 mature posts, 72.7% earned under 10 clicks in 90 days, but only 1.7% earned zero impressions. The underperforming pages were visible 90,745 times and clicked 123 times. Of those 88 failing posts, only 30 had no search demand at all and were genuine deletion candidates, which is 24.8% of the library. The other 58 carried 90,124 impressions of live demand and had a fixable diagnosis: a ranking problem (11.6% of the library, real demand stuck on page two), a relevance problem (34.7%, shown for many queries but nobody's best answer), or a click-through problem (1.7%, ranking on page one and not being clicked). Audit by failure mode, not by traffic threshold. And fold anchor-fragment URLs back into their parent pages before you judge anything: 15.6% of our property's impressions landed on fragment URLs that produced six clicks in total.
What we measured
The method is deliberately simple, because the point is that you can rerun it on Monday.
Inventory. Every published post in the blog, read straight from the content files that build the site: 187 posts at the time of the run. For each one we recorded its slug, category, URL and word count.
Performance. Ninety days of Google Search Console data for the domain property, 21 June to 18 September 2026, pulled at the page level and again at the page-and-query level. The second pull is what lets you separate a page that ranks badly for many things from a page that ranks well for nothing. We also pulled the preceding 90 days, 23 March to 20 June 2026, as a maturity control.
Maturity control. Publication dates in our content files are migration dates, not the dates Google first saw the URLs, so they are useless as an age proxy. Instead we used the data itself: a post counts as mature if Google served it at least one impression in the previous 90-day window as well as the current one. That is direct evidence the URL had been indexed and eligible for at least six months. It leaves 121 mature posts and sets aside 66 that were too new or not yet indexed. Every headline number in this post refers to the 121.
URL folding. This is the step that nearly broke the study, and it gets its own section below.
The 121 mature posts produced 2,241 clicks from 651,198 impressions in the 90-day window, an overall click-through rate of 0.34% at a median average position of 15.6. Median clicks per post: 1. Median impressions per post: 446.
The distribution, and why the median post is not the story
Here is the full click distribution across the mature library.
| Clicks in 90 days | Posts | Share of library |
|---|---|---|
| 0 | 46 | 38.0% |
| 1 to 4 | 32 | 26.4% |
| 5 to 9 | 10 | 8.3% |
| 10 to 49 | 26 | 21.5% |
| 50 or more | 7 | 5.8% |
Concentration is severe and completely ordinary. Fourteen posts, 11.6% of the library, produced 80% of all clicks. The top 10 posts produced 74.7%. If you have ever seen a content library where a handful of pages carry the programme, this is what it looks like in numbers.
That concentration is where the pruning instinct comes from, and it is a reasonable instinct. If 88 posts are generating 123 clicks between them, the editorial time spent maintaining them is hard to defend. The question is what those 88 posts are actually doing, and the answer is not nothing.
The artefact that will corrupt your audit: anchor-fragment URLs
Partway through the analysis, the single best-performing post on the site appeared in our join with one impression and zero clicks. That was obviously wrong, and chasing it produced the most portable finding in this study.
Google generates jump links into specific sections of a page, and Search Console reports those anchor-fragment URLs as separate pages. Our top post was split across seven rows: the canonical URL, a non-www variant, and five fragment URLs such as .../#the-full-reviews and .../#indias-agency-market-by-city. Our normalisation step had mangled the fragments instead of folding them, so the canonical row was being overwritten by a stray variant.
Once we folded every fragment and host variant back into its parent URL, that post resolved to its true numbers: 565 clicks from 109,541 impressions. The naive read had understated it by three orders of magnitude.
Then we measured the artefact across the whole property, and it is not marginal:
| Fragment-URL reporting | 90 days |
|---|---|
| Impressions on anchor-fragment URLs | 195,997 |
| Clicks on anchor-fragment URLs | 6 |
| Share of all property impressions | 15.6% |
| Pages with at least one fragment row | 46 |
Nearly one impression in six across the property was attributed to a URL that is not a page. Those fragment URLs produced six clicks in 90 days between them, so they contribute essentially nothing to click totals while absorbing a large share of impressions.
Two practical consequences. First, if you audit a raw Search Console page export without folding, every long post with a table of contents will look like it lost most of its visibility, and you will prune pages that are performing fine. Second, any click-through rate you calculate per page is wrong until you fold, because the impressions are spread across rows you did not count.
Before you judge a single page, fix the export. Strip everything after #, strip query strings, normalise the host to one form, then re-aggregate clicks and impressions and recompute average position weighted by impressions. It is four lines of spreadsheet work and it changed the apparent performance of 46 pages on our site.
The four diagnoses
A content audit produces value at the moment it commits to a decision per URL. A traffic threshold cannot do that, because two pages earning zero clicks can be failing for completely unrelated reasons.
So we classify every non-performing page by failure mode. The rules are mechanical, applied in order, and mutually exclusive, so every post lands in exactly one bucket.
| Diagnosis | Test | Posts | Share | Impressions | Clicks | Median position |
|---|---|---|---|---|---|---|
| Earning | 10 or more clicks | 33 | 27.3% | 560,453 | 2,118 | 13.0 |
| Click-through problem | Average position 10 or better, 200+ impressions, under 10 clicks | 2 | 1.7% | 2,506 | 4 | 9.6 |
| Ranking problem | Average position 30 or better, 500+ impressions, under 10 clicks | 14 | 11.6% | 31,065 | 38 | 19.1 |
| Relevance problem | 50+ impressions, fails the tests above | 42 | 34.7% | 56,553 | 77 | 17.6 |
| Demand problem | Under 50 impressions in 90 days | 30 | 24.8% | 621 | 4 | 15.3 |
Average position is the primary axis on purpose. Query-level top-three counts look tempting and are misleading: one of our pages holds a top-three position for 10 separate queries while its average position across all 321 queries sits at 54. It is not a click-through problem. It is buried, and the handful of top-three long-tails are irrelevant.
Click-through problem: seen on page one, not clicked
Two posts, 1.7% of the library. These rank at an average position of 9.6 with real impression volume and convert almost none of it. When a page is genuinely on page one and not earning the click, the page is not the problem. The listing is: the title does not match how the query is phrased, the meta description argues the wrong benefit, or the result above it is answering the question in an AI Overview and removing the reason to click.
This bucket is the smallest in our library and, per page, the cheapest to fix. Rewrite the title and description against the actual top queries the page ranks for, then wait one crawl cycle.
The honest caveat is that this bucket is small partly because our library genuinely does not rank on page one very often. A site with stronger average positions would find more of its failures here.
Ranking problem: real demand parked on page two
Fourteen posts, 11.6% of the library, carrying 31,065 impressions and producing 38 clicks. Median average position 19.1, which is the top of page two.
This is the most straightforwardly recoverable bucket in any audit, because the demand is already proven. Google is showing the page thousands of times; it just is not showing it high enough for the click to happen. Position 11 to 20 is the band where impressions accrue and clicks do not, and moving a page from 15 to 8 is a far smaller job than creating a new asset for the same query.
One example from our own list: our analysis of Google's search results data limits sits at average position 21.8 across 132 queries with 5,626 impressions and eight clicks. The topic has an audience. The page is on the wrong side of the fold. We wrote the second-page SEO audit method specifically for this population, and it is the first work we will schedule off the back of this audit.
Relevance problem: shown for everything, best answer to nothing
Forty-two posts, 34.7% of the library and the largest failure bucket. Together they carry 56,553 impressions and produce 77 clicks, a click-through rate of 0.14%, at a median average position of 17.6.
These pages are being matched to a wide spread of queries and ranking well for none of them. One of ours appears for 321 distinct queries with an average position of 54. Another appears for 399 queries at an average position of 51. That is not a page with a ranking problem. That is a page Google cannot decide what to do with, usually because the page is trying to serve several intents at once, or because the site has three overlapping partial answers to the same question and none is clearly the canonical one.
The fix is almost always consolidation rather than editing. Decide which URL should own the intent, merge the useful material into it, redirect the others, then point internal links at the survivor. Our keyword cannibalization audit is the method we use to decide which page wins.
This bucket also matters disproportionately for AI search. Answer engines select sources on clarity, and a domain offering several partial answers to one question fails that test without any individual page being bad. Consolidation tends to improve citation rates faster than it improves rankings.
Demand problem: nothing is searching for this
Thirty posts, 24.8% of the library, carrying 621 impressions and four clicks between all of them. After six months or more of eligibility, Google has essentially never had a reason to show these pages.
This is the only genuine deletion bucket, and it is worth being precise about what it represents. Of the 88 posts that looked like dead weight on clicks, only 30, or 34.1%, actually had no demand. Deleting "the 73%" would have removed 58 pages carrying 90,124 impressions of live, measured search demand.
Even inside this bucket, deletion is not automatic. Some of these posts were written deliberately for AI citation and reference value rather than click volume, and judging them on Search Console clicks alone misses the point of why they exist. We wrote about that measurement gap in measuring content ROI without rankings. The rest split into two groups: topics with genuine commercial relevance that need to be rebuilt against real query data, and topics that were never going to be searched, which should be redirected to the nearest relevant page rather than left to 404.
What length did not predict
Most content audit templates ask you to record word count, with the implication that short means thin and thin means prune. Our data does not support the inference.
| Length band | Posts | Median clicks | Clicks per post | Zero-click share |
|---|---|---|---|---|
| 1,000 to 2,000 words | 7 | 25 | 24.9 | 28.6% |
| 2,000 to 3,500 words | 60 | 2 | 9.4 | 40.0% |
| 3,500 words or more | 54 | 1 | 27.8 | 37.0% |
The shortest band had the highest median clicks by a wide margin, and the lowest zero-click rate. The longest band had the highest average, but only because a few large winners pull the mean up while its median sits at one click.
Read that honestly: the short band is only seven posts, so it is a weak sample and we would not build a strategy on it. But it is more than enough to refute the opposite claim. There is no length threshold in this data that separates pages that earn from pages that do not, in either direction. Length is a consequence of what a topic genuinely requires, not a lever you pull. Auditing by word count will misclassify good short pages as thin and bad long pages as thorough.
How to run this audit on your own library
The whole method is four steps and roughly a day of analyst time for a library of a few hundred URLs.
1. Build the inventory. Every published URL, with its category and word count, from your CMS or content directory. Do not start from a crawl if you can start from the source, because a crawl will miss anything that is orphaned and those pages are exactly the ones an audit needs to see.
2. Pull 90 days of Search Console at two grains. Page level gives you clicks, impressions and average position. Page-and-query level gives you the query count, the top-10 count and the top-3 count per page. You need both: query breadth is what separates "ranks badly for many things" from "ranks for nothing".
3. Fold the URLs before you join. Strip fragments and query strings, normalise the host, re-aggregate clicks and impressions, and weight average position by impressions. Skip this and your audit is measuring noise, as ours briefly was.
4. Classify, do not rank. Apply the four tests in order and write the diagnosis into the row. Resist the urge to sort by clicks and draw a line. The line tells you which pages are failing; the diagnosis tells you what to do, and those are different documents.
Pull the previous 90-day window as well and use it as the maturity control, exactly as we did. A post that Google has never served cannot be judged on its performance, and mixing new posts into the distribution will make your library look worse than it is. In our case, 66 of 187 posts were set aside on that test.
Want the classification run on your library rather than ours? We run this audit as a fixed-scope engagement: full inventory, folded Search Console data, one decision per URL with the failure mode named, and a sequenced work plan that starts with the ranking-problem pages because they recover fastest.
What we are actually doing about it
Publishing an audit without acting on it is a content exercise, so here is the plan the numbers produced, in the order we will run it.
First, the 14 ranking-problem pages. They carry 31,065 impressions and produce 38 clicks. The demand is proven and the gap is one page of search results. This is the highest return per editorial hour in the entire library.
Second, the fragment-URL reporting fix. Not a page fix, an analysis fix. Every performance report we build from Search Console now folds fragments before it aggregates, and the folding step is part of the committed audit script rather than something an analyst has to remember.
Third, the 42 relevance-problem pages. This is the slowest and largest piece of work, and it is mostly consolidation rather than writing. Deciding which URL owns each intent, merging, redirecting and repointing internal links. We expect this to reduce the published post count, which is the correct outcome even though it looks like regression on a content dashboard.
Fourth, the 30 demand-problem pages, split between rebuild, redirect and retire, with the ones written for AI citation judged on citation rather than clicks.
Fifth, and continuously, topical clustering on what survives. The relevance bucket exists because a library grew faster than its architecture. Consolidation without an internal linking model just rebuilds the same problem more slowly.
Mistakes that ruin content audits
Auditing on clicks alone. The entire argument of this post. A click threshold finds the failures and hides the reasons, and the reasons are what you act on.
Auditing a raw Search Console export. Fragments and host variants will silently wreck your per-page numbers. Fold first.
Auditing posts that are too new to judge. Without a maturity control you will classify a three-month-old post as dead weight when it has not finished being indexed. Use the previous window as evidence of eligibility.
Treating word count as quality. Our data shows no usable relationship in either direction.
Deleting instead of redirecting. A retired URL with any history should point at the nearest relevant live page. A 404 discards whatever external equity and branded search value the URL accumulated.
Producing a spreadsheet instead of a decision. An audit that does not commit to an action per URL will be re-run from scratch next year, because nobody can tell what was already decided.
Running it too often. A full library audit is an annual or semi-annual exercise. The narrower checks, decay and cannibalization, are the ones that belong on a quarterly cadence.
The KPIs worth tracking afterwards
Click totals move too slowly and too noisily to manage an audit programme against. Track these instead:
- Share of library earning 10 or more clicks. Ours is 27.3%. This is the single number the whole programme moves.
- Impressions attached to failing pages. Ours is 90,745. Falling because pages were fixed is good. Falling because pages were deleted is not the same thing, so track the two causes separately.
- Size of the relevance bucket. This one should shrink through consolidation, which means your published post count shrinks too. Agree that with whoever reads the content dashboard before you start.
- Median average position of the ranking-problem cohort. Ours is 19.1. Moving it under 10 is the definition of success for that bucket.
- Click-through rate on folded page data. Ours is 0.34% across mature posts. Any CTR measured on unfolded data is not comparable to anything, including your own previous measurement.
The honest caveats
This is one library, on one domain, in one competitive market, over 90 days. The distribution shape, extreme concentration and a long tail of visible-but-unclicked pages, is consistent with what we see on client sites and with what is broadly known about content performance. The specific percentages are ours and should be treated as an illustration of the method, not a benchmark to hold your own site against.
Two further limits worth stating plainly. Our average positions are not strong, which is why the click-through-problem bucket is small; a site that ranks better would find more of its failures there and fewer in the relevance bucket. And several posts in the demand bucket were written for AI answer engines rather than for Google clicks, so Search Console is structurally the wrong instrument for judging them.
What survives all of that is the finding that does not depend on our numbers being typical: the gap between "earns no clicks" and "earns no impressions" is where a content audit does its real work, and almost every published audit framework collapses the two.
Frequently Asked Questions
What is an SEO content audit?
An SEO content audit is a page-by-page review of a content library that ends in a decision for every URL: keep, improve, consolidate or retire. A useful audit is not an inventory spreadsheet. It joins each page to its real search performance, usually from Google Search Console, then classifies the failure mode behind any page that is not earning. The classification is the whole value. Two pages can both earn zero clicks for completely different reasons, and the fix for one will do nothing for the other.
How much of a typical blog is dead weight?
More than most teams expect, on clicks. In the audit of our own 187-post blog, 88 of the 121 posts that had been served by Google for at least six months, or 72.7%, earned fewer than 10 clicks in 90 days, and 38% earned none at all. Click concentration was extreme: 14 posts, 11.6% of the library, produced 80% of all clicks. That pattern is normal for content libraries and is not by itself evidence that the underperforming pages should be deleted.
Should I delete blog posts that get no traffic?
Usually not, and our data shows why. Of the 88 posts earning under 10 clicks, only 30 had no search demand reaching them at all. The other 58 were being shown to searchers 90,124 times across 90 days and converting almost none of it. Those pages have a diagnosis that is not deletion: a ranking problem, a relevance problem, or occasionally a click-through problem. Deleting them would destroy the demand signal that tells you which topics are worth fixing. Retire the pages where no demand exists. Fix the pages where demand exists and you are failing to capture it.
What is the difference between a content audit and a content decay audit?
They work on different inventories and answer different questions. A content decay audit works on pages that used to perform and are declining, and asks what changed. We covered that method in Content Decay Audit. A full content audit works on the entire library at once, including pages that never performed, and asks what each page should become. Decay audits are diagnostic on a shortlist. Content audits are a portfolio decision. Most programmes need the content audit annually and the decay audit quarterly.
How do I find pages with impressions but no clicks in Search Console?
Open the Performance report, set the date range to the last three months, switch to the Pages tab and export the full table. Sort by impressions descending, then filter to rows where clicks are zero or in single digits. In our own audit 44 of 121 mature posts, 36.4%, had impressions but zero clicks. One warning that cost us real accuracy: Search Console reports anchor-fragment URLs as separate pages, so you must strip everything after the hash and re-aggregate before you judge any page. Skipping that step made our single best post look like it had one impression.
Why do anchor-fragment URLs show up in Search Console?
Google generates jump links to specific sections of a page, and reports impressions against those fragment URLs separately from the canonical page. Across our property, 195,997 impressions in 90 days, 15.6% of all impressions, landed on fragment URLs, and they produced 6 clicks in total. Forty-six pages had fragment rows. This is not a problem to fix on the page, it is a reporting artefact to correct in your analysis. If you audit an export without folding fragments back into their parent URLs, every page with a table of contents will appear to have lost most of its visibility.
How long should a blog post be to rank?
Our data found no useful relationship between length and clicks, which contradicts most content audit advice. Among mature posts, the 1,000 to 2,000 word band had the highest median clicks at 25, while the 3,500 word and longer band had a median of 1. The long band did have a higher average, 27.8 clicks per post, but only because a handful of large winners pulled the mean up. Length is a consequence of how much a topic genuinely requires, not a lever. Auditing by word count will misclassify good short pages as thin and bad long pages as thorough.
How often should you do a content audit?
A full library audit is worth running annually on most sites, and every six months if you publish more than 10 posts a month. The full audit is a portfolio exercise and the inventory does not turn over fast enough to justify more. Between full audits, run the narrower checks on their own cadence: decay quarterly, keyword cannibalization quarterly, and orphan pages after any migration, navigation change or category restructure.
What should a content audit actually produce?
One decision per URL, with a named failure mode behind it, and an owner. A spreadsheet of metrics is not an audit output because it does not commit anyone to anything. We classify every non-performing page into one of four diagnoses: a click-through problem where the page ranks on page one and is not clicked, a ranking problem where real demand sits on page two, a relevance problem where the page is shown for many queries but is nobody's best answer, and a demand problem where nothing is searching for the topic. Only the last one is a deletion candidate, and in our library it was 24.8% of posts.
Does a content audit help with AI search visibility?
Yes, and the relevance bucket is where most of the gain sits. AI answer engines pick sources on clarity and authority, and a domain with several partial answers to the same question fails that check without any of the pages being individually bad. Consolidating those pages into one strong answer helps citation rates more than it helps rankings. The pages we classified as relevance problems, 34.7% of our library, are the same pages most likely to be diluting an AI engine's view of what our site is authoritative about. We covered the broader mechanics in The AI Search Gap.
Where this sits in a wider programme
A content audit is the portfolio layer. It tells you what the library should become. The execution layers underneath it are the ones that actually move the numbers: technical SEO for the crawl and indexation issues the audit surfaces, content marketing for the rebuilds and consolidations, answer engine optimization for the pages that should be earning citations rather than clicks, and a full SEO programme when the audit reveals that the content library was never the constraint in the first place.
If you would rather see the diagnosis before committing to any of that, a standalone SEO audit is the cheapest way to find out which of those four buckets your own library is mostly sitting in.
The prune-it advice is not wrong because deletion is never right. It is wrong because it answers a question nobody asked. The question is not which pages are failing. It is why each one is failing, and whether the demand it is already attracting is worth capturing. On our library, two thirds of the apparent dead weight turned out to be demand we had not yet earned. We would rather go and earn it than delete the evidence that it exists.

Aditya Kathotia
Founder & CEO
CEO of Nico Digital and founder of Digital Polo, Aditya Kathotia is a trailblazer in digital marketing. He's powered 500+ brands through transformative strategies, enabling clients worldwide to grow revenue exponentially. Aditya's work has been featured on Entrepreneur, Economic Times, Hubspot, Business.com, Clutch, and more. Join Aditya Kathotia's orbit on LinkedIn to gain exclusive access to his treasure trove of niche-specific marketing secrets and insights.