Back to Learn
#AI Growth Playbooks

How to identify content bloat in your audit

Identify content bloat by joining crawl, Search Console and GA4, then keep, update, merge, redirect or remove each URL.

Spreadsheet of URLs marked keep, update, merge, redirect or remove

Content bloat is the share of pages that earn no traffic, links or conversions, growing faster than the pages that do. An audit returns one ratio and a URL list with keep, update, merge, redirect or remove. Run it so tag archives and three posts on the same topic stop splitting crawl and rankings.

How do you identify content bloat?

You identify content bloat by joining three datasets on URL and checking traffic and uniqueness. You also flag pages that fail a freshness test. The short version of how to identify content bloat on any site is the same regardless of CMS or size.

Join the inventory and performance data:

  • Your XML sitemap and a crawler: The sitemap is your declared inventory. The crawl is the real one, including the URLs your CMS generates that nobody submitted.
  • Search Console and GA4: The Page indexing report gives you the Indexed total and the reasons behind every Not indexed URL. In the Performance report, pull clicks and impressions per page. Include position too. Use GA4 landing-page sessions and conversions to identify which low-click pages still earn their place.

The flags that turn the joined sheet into a shortlist:

  • No search demand: Zero clicks and zero impressions across the last 6 to 12 months is the first filter. Zoe Ashbridge’s Search Engine Land pruning guide widens that to fewer than 100 clicks in six months as the line below which a human reviews the page, and it says low-click pages with high conversions should stay.
  • Index larger than inventory: An Indexed count in Search Console that runs well past your sitemap count means Google is indexing pages you never meant to publish as search entries.
  • Overlap: Two or more of your URLs showing for the same query in Performance, or near-duplicate titles and H1s in the crawl.
  • Age without maintenance: A last-modified date older than your refresh cycle on a page that still ranks or still gets internal links.

What is content bloat versus index bloat and page bloat?

Content bloat is the editorial problem: the share of low-value pages on your site grows faster than the share of pages that earn traffic, links or conversions. The cause is almost always a publishing cadence with no retirement cadence. Every month adds pages and nothing removes them.

Index bloat is the indexation problem. URLs that exist for site mechanics, such as tag archives, parameter variants, filtered collections and author pages, end up in Google’s index alongside your real pages. Index bloat is a quality problem, not a page-count problem. Track the gap between Search Console and your sitemap over time. Google’s position is that you should not expect every URL to be indexed, only the canonical pages. The signal is an index full of URLs you would never put in a sitemap.

Page bloat is page weight: oversized images and unused scripts on a single URL. Render-blocking CSS contributes too. It affects load time and crawl efficiency, and it is a separate audit with a separate toolset. The audit below covers content bloat and index bloat.

What are the signs of thin, duplicate, outdated and ROT content?

Thin pages add nothing a searcher could not get from the result above or below them. Word count is a poor proxy. John Mueller said in 2022 that word count is not a sign a page is thin, and told people not to use it as the test.

A 400-word pricing explainer that answers the question is fine. A 2,000-word post assembled from six other posts is thin.

Duplicate pages cover the same intent at the same depth. Some of these are editorial, three what-is-X posts written by three contractors, and some are technical, the same product at two paths. Google clusters near-duplicates and picks one canonical. The Page indexing report labels the losers Duplicate without user-selected canonical and notes that this is not an error. That label is your duplicate list, pre-built.

Outdated pages reference products, pricing, integrations or screenshots that no longer exist. These are the most expensive kind of bloat for a B2B SaaS site because they still rank. A prospect lands on a 2022 integrations page, sees a tool you sunset, and leaves with wrong information.

The ROT checklist pulls the three into one pass you can run on any URL. Score each page against:

  • Redundant or outdated: A redundant page duplicates another live page’s audience and intent, or repeats information available in two or more places. An outdated page states something that is no longer true about your product or market. Check contact details too.
  • Trivial: The page serves no user need and no business need, and nothing links to it. You usually miss these rows when you build an inventory from analytics, because pages with zero pageviews don’t appear in a pageview report.

A page that scores on any one of the three is a candidate. A page that scores on two is almost always a remove or merge.

How do you run the audit step by step?

Size the gap in Search Console, build a full inventory from a crawl and join traffic and link data onto every URL. Apply thresholds to produce the step 3 shortlist you take into the decision tree, then run the cannibalization and technical checks that those thresholds miss. For a broader content audit for SEO recovery, use the same join, then this article’s flags and actions.

Budget a day for a site under 5,000 URLs. Larger sites need the Search Console API or BigQuery export because the UI tables and exports are capped.

Step 1: Compare indexed pages to your sitemap in Google Search Console

Start with two numbers: the Indexed total from the Page indexing report and the Discovered pages count from the Sitemaps report. The Sitemaps report has no indexed-count column, and its Submitted field is a date, not a count, so to get indexed pages per sitemap you filter the Page indexing report by that sitemap URL. Then switch the Page indexing filter to Unsubmitted pages only to see what Google indexed that you never declared.

Read the gap in both directions:

  • More indexed than submitted: If the sitemap lists 2,400 URLs and the Indexed total reads 3,900, the 1,500 unsubmitted indexed URLs are your first bloat list, and you can trace tag paths and query strings to the CMS settings generating them. Check pagination patterns too.
  • Fewer indexed than submitted: If the sitemap lists 2,400 and Indexed reads 1,300, the problem is quality or crawl. Read the Not indexed reason tables to identify which.

Matt G. Southern’s Search Engine Journal guide puts the investigation line at an indexability rate below 90%, with the caveat that it likely won’t be 100%.

Search Engine Land’s more-with-less piece adds a reason-specific threshold: more than 30% of sitemap URLs sitting in Crawled currently not indexed looks too high, because Google fetched those pages and chose not to index them.

Account for two limits in this step. The reason tables show at most 1,000 example URLs each and may not list every URL with that issue, so on larger sites the counts are what you trust and the samples are what you pattern-match. And the comparison is only meaningful if the sitemap contains nothing but canonical, indexable, 200-status URLs. Clean the sitemap before you measure against it, or you are measuring sitemap errors instead of bloat.

Step 2: Crawl the site and pull traffic data

Crawl the full site with a tool that can join Search Console and GA4 onto each URL. Screaming Frog does this on the desktop through its API Access configuration. Sitebulb and JetOctopus do it in the cloud, as does Lumar.

  • Search performance: Pull at least 12 months of Performance data per page, including clicks and impressions. Include position too.
  • Analytics and backlinks: Pull at least a month of GA4 organic landing-page data for sessions and engaged sessions, then add conversions. Add referring domains per URL from whichever backlink index you use.

The join breaks on URL formatting more often than on data. Search Console reports full URLs and GA4 reports paths, so before any lookup you strip query strings, lowercase everything, drop trailing slashes and collapse http/https and www variants. Do this once in a normalized column and join on that column, not on the raw export.

Each joined row should carry these columns:

  • Indexability, plus 12-month clicks and impressions from Search Console.
  • GA4 sessions and conversions, plus referring domains from your backlink index.
  • Last updated date and any overlapping URL the crawler or Performance report already flagged.
  • A provisional action: keep, update, merge, redirect, noindex, canonicalize or remove.

If you have log access, add one more column: verified Googlebot hits per URL over the last 30 days. Filter to hostnames that verify as Google and count by URL pattern. Parameter and paginated URLs that take more hits than your top commercial pages are crawl waste you cannot see in Search Console, and they usually point at a CMS default from step 4.

Step 3: Flag pages against clear thresholds

Apply the thresholds in order of certainty, strictest first, so the obvious removals fall out before you spend review time on judgment calls.

  • No demand, no links, no conversions: Start with zero clicks and zero impressions over your 6-to-12-month window. Check for no referring domains and no GA4 conversions. These are remove candidates. A page with no impressions is not losing clicks to a competitor. Google is not showing it at all.
  • Low demand: Below the 100-click line from the Ashbridge guide, with the conversion exception applied. Review these by hand. The guide also suggests looking at blog posts under 1,500 words first, which is a review-order heuristic, not a quality rule.
  • Site-level alarms: A separate Search Engine Land article, SEO more with less, says to investigate if more than 10% of indexable pages that should get traffic had none for 3 months, or if more than 70% of pages have no organic traffic. Its delete rule is the only word-count rule worth keeping: a page under 250 words with a title or H1 of three words or fewer, or a page with no author that was last updated over four years ago.
  • Indexed-to-valuable ratio: Count the rows that pass every threshold and divide by your Indexed total. That ratio is the single number you report to leadership, and the one you re-run next quarter to prove the audit worked.
  • Overlap: Rows where the crawler flags near-duplicate content or where two URLs share a title pattern or H1. These go to step 4 for a cannibalization check before any action.

HubSpot’s published pruning rules are the cleanest example of thresholds turned into actions. Their criterion for the 3,000-post removal was fewer than 80 unique search pageviews per month over the previous five months.

Their decision logic was to delete unsalvageable posts with no backlinks. They redirected unsalvageable or competing posts with backlinks, and updated backlinked posts that were improvable and not competing. About 350 pages with 60 or more backlinks got a manual review. Copy that structure. Automate the sort, hand-review anything with links.

Step 4: Spot cannibalization and technical bloat

You can spot cannibalization in Performance before you find it in the crawl. Add a Query filter for a target keyword and open the Pages tab. The authors of the Search Engine Land cannibalization guide give you this rule: two or more pages showing for the same keyword compete. Multiple URLs for one query is normal, so the signal you want is an even impression split between two pages that both sit on page two or three, or a query whose ranking URL swaps month to month with no content change. Check intent before you act. A how-to guide and a pricing page both ranking for one query is coverage, and merging them loses a result.

Technical bloat comes from CMS defaults, and the pattern list is short. On WordPress: tag, category, author and date archives, feed URLs, comment pagination and attachment pages. On Shopify: filtered and sorted collection URLs. Check the collection-path duplicate of each product too. In the Search Engine Land index-bloat guide, the authors name WordPress tag pages and Shopify products-and-collections pages as the defaults SEOs generally dislike, and recommend robots.txt for rule-based URL patterns and noindex for search pages and archives. Use your unsubmitted-indexed list from step 1 and your Googlebot-hits column from step 2 to identify those patterns.

What do you do with a bloated page?

Each flag maps to one action, and the action is chosen by two questions: does the page have backlinks or conversions, and is there a better page on the same topic. The decision tree:

  • Keep: Low clicks, but conversions or referring domains. Leave live and add to the refresh queue.
  • Update: Decent demand with outdated facts or weak coverage. Rewrite, update the date, keep the URL.
  • Merge: Two or more pages on the same intent. Combine into the strongest URL and 301 the others to it.
  • Redirect: No demand, has backlinks, a close equivalent exists. 301 to the closest matching page.
  • Noindex or robots block: Archive, tag, filter or parameter URLs. Noindex archives and search pages. Use robots.txt for parameter patterns.
  • Canonical: Technical duplicate of a canonical page. Set rel=canonical to the primary URL.
  • Remove: No demand, no links, nothing to point to. Return 410 or 404 and delete the internal links.

You preserve what you have built by merging and applying a 301. In its consolidation documentation, Google rates redirects and rel=canonical as a strong signal and sitemap inclusion as a weak signal. It recommends rel=canonical over noindex for choosing between near-duplicates, because noindex blocks the page from Search entirely.

  • For a true duplicate you keep both URLs live and canonicalize. For an editorial overlap you merge and redirect.
  • Noindex is for pages that should exist for users but never for search, including internal search results and tag archives. Thank-you pages belong here too. It is not a crawl-budget tool. Google says in its crawl budget guide not to use noindex as a crawl remedy because Googlebot still requests the page and then drops it. For URL patterns you want crawled less, use robots.txt.

Removal is the last row for a reason. In its core updates guidance, Google treats deleting content as a last resort, and only if you think the content cannot be salvaged. When you do remove, return a 410 or 404 and clean up internal links so the crawler stops finding the URL. Do not bulk-redirect dead posts to the homepage. Redirect to the closest page, or let the URL die.

Why does bloat hurt SEO, crawl budget and conversions?

On a website-platform company we audited in 2026, 84% of 1,686 indexed pages had zero organic clicks. Forty-three topic clusters had three or more overlapping URLs, and 9,733 queries split impressions across more than one of their pages. One vendor-comparison cluster had 13 posts competing for the same intent. The join would have flagged that as overlap before another brief landed in the same cluster.

  • Crawl budget: This is the most cited cost and the least relevant one for most B2B SaaS sites. Google defines crawl budget as crawl capacity limit plus crawl demand. It matters at 1 million or more unique pages with weekly changes, or 10,000 or more with daily changes. Below that, keep the sitemap current and watch the Page indexing report. Perceived inventory still applies on every site: without guidance Google tries to crawl every URL it knows about. HubSpot’s removal of 3,000 posts cut crawls by 20% and URIs crawled by 38%, and HubSpot said the prune was not the sole cause of growth. Crawl efficiency is the measurable benefit. Traffic lift is the hoped-for one.
  • Cannibalization: This is the cost you feel on a 2,000-page site. When you publish two mid-strength pages for one query, you spread links and internal anchors across them. You also divide impressions between those pages. The Search Engine Land authors recommend a 301 consolidation when focus and intent overlap.
  • Sitewide signals: These are the third cost. Google’s core systems work mostly at page level, but the core updates guidance says deleting entire sections built for search engines first can help the good content on your site perform better, and that changes can take days or several months to be reassessed. If you pruned and nothing moved in three weeks, that is expected, not a failure.
  • Conversions: This is where content bloat hits a revenue number. Prospects who land on outdated pages that still rank see wrong pricing and dead integrations. They may also see features you renamed. That is why you weight conversions over clicks in the decision tree’s keep rule. The page with 40 clicks and 6 demo requests a quarter is doing more than the page with 900 clicks and none.

How do you stop bloat from coming back?

Bloat returns if you fix the pages and not the process. Change your review and publishing workflows to stop it.

  • Attach an owner and a next-review date to every URL at publish time, and run a review of everything past its date each quarter. Use the same decision tree as above on a smaller list.
  • Put a duplicate check into the brief stage. Before any new brief is approved, the writer searches Performance for the target query and the crawl export for the target title. If a page already ranks for it, the writer revises the brief into an update. Keyword clustering before you brief is how you catch that overlap while the outline is still cheap to change.
  • Turn off the CMS defaults before they generate anything. Disable or noindex tag and author archives. Do the same for date archives, redirect attachment pages to the file and keep the sitemap limited to canonical 200s.
  • Schedule an unpublish date on time-bound pages (event pages, launch posts for features with a sunset date) when you publish them, so expiry is a setting rather than a future audit finding. Then re-run step 1 monthly. Use the Indexed-minus-sitemap gap to check whether the process is holding.

The Messy Middle newsletter goes out weekly with practitioner-grade breakdowns of AI search visibility and content operations. Subscribe at ailedgrowth.com/newsletter.

Frequently Asked Questions

Related Content