Guide · Content audits

How to Audit Website Content at Scale

A practical framework for auditing hundreds or thousands of pages: scope, a trusted inventory, one quality rubric, clean Search Console joins and a decision matrix that ends in a ranked work queue.

Ulrich Svarrer

Ulrich Svarrer

15 min readUpdated

Updated November 14, 2026: Rewritten with a scoping table, a source-by-source inventory checklist, Search Console data limits, a decision matrix with rule-of-thumb thresholds and a worked example, and checked against Google's current documentation.

This guide shows you how to audit a site with hundreds or tens of thousands of pages and come out with a decision for every URL: keep, refresh, consolidate or remove. It covers how to scope the audit, build an inventory you can trust, score quality consistently, join Search Console and analytics data without breaking the numbers, turn findings into a ranked work queue, and make the whole thing repeat without a heroic effort each quarter. It is written for content and SEO leads who have to defend the result in a planning meeting.

The failure mode it is designed to avoid is familiar: a URL export in a shared spreadsheet, a few columns for “status” and “notes”, five reviewers with five definitions of “thin”, and a file nobody trusts by the time the next template ships. At scale, the goal is not to read every page. It is to make defensible decisions quickly, with rules that different people apply the same way.

Inventory, audit, governance: three different jobs

An inventory is a catalog of what exists. An audit layers judgment on top of that catalog: quality, relevance and performance, ending in an action per URL. A governance program keeps both current so the next audit starts from clean data instead of from scratch. An audit is not a redesign, a keyword research project or a migration plan, although it often feeds all three. If you are preparing a move, the content migration playbook covers the redirect and launch side.

Step 0: Decide why you are auditing

“Audit the blog” is not an objective. “Decide which of our 1,400 blog posts to refresh, merge or retire so the team spends next quarter on the pages that still earn search demand” is. The objective decides which data you need, which scores matter and how deep you go. Use the trigger to set the scope:

TriggerScopeDepth
Migration, redesign or domain mergeEvery URL that will moveFull: every URL needs a keep, merge or remove decision before launch
Organic decline across several sectionsThe affected sections firstFull scoring plus performance trends; see content decay
Acquisition or brand consolidationBoth libraries, overlapping topics firstOverlap and cannibalization, then voice and claims
New content strategyTopics the strategy will touchCoverage and quality, so new briefs do not duplicate what exists
Regulatory or policy changePages that make the affected claimsAccuracy and disclosures only, with legal sign-off
Scheduled cadenceNew and changed pages since the last cycleLight: scoring delta and performance movers

A practical rule: if you cannot name the decision the audit will inform, you are not ready to start it. And start narrower than feels comfortable. A finished audit of one 500-page section that changes next quarter’s plan is worth more than a half-finished audit of 20,000 URLs whose data is stale before anyone acts on it.

The five-step content audit

Build the inventory

Reconcile crawl, CMS, sitemap and Search Console into one URL list

Score quality

One rubric, applied the same way to every page

Join performance data

Search Console and analytics by canonical URL

Decide and prioritize

Keep, refresh, consolidate or remove, ranked by impact and effort

Make it repeat

Recurring crawls, scoring and reports, with owners for every finding

Step 1: Build an inventory you can trust

Every later decision depends on the inventory being complete. No single source gives you that, so reconcile at least three and treat the gaps between them as findings in their own right.

SourceWhat it gives youWhat it misses
Site crawlWhat is actually live and linked: status codes, redirects, canonicals, titles, contentOrphan pages with no links, pages blocked by robots.txt or behind a login
CMS or database exportAuthor, owner, content type, publish and edit dates, workflow statusLanding page builders, microsites, help centers and other pages outside the CMS
XML sitemapsThe URLs you intend to be indexedAnything never added; often still lists retired URLs
Search Console Page indexing reportWhat Google has indexed, and why other URLs are notAnything about the content itself, or how the page performs

The comparison between your sitemap and Google’s view is often where the first useful findings appear. In Search Console’s Page indexing report, filter to “All submitted pages” to see only sitemap URLs, then read the reasons. Not every status is a problem: Google says you should not expect every URL to be indexed, only canonical pages, and “Alternate page with proper canonical tag” needs no action. A cluster of important pages under “Crawled - currently not indexed” or “Duplicate without user-selected canonical”, though, usually points at thin or overlapping content that the audit should look at first.

Deduplicate by canonical URL before anything else. Strip tracking parameters, settle trailing slash and www variants, and exclude staging and authenticated hosts. Decide up front whether PDFs, help center articles on a subdomain and page-builder landing pages are in scope. You do not have to audit everything, but the exclusions should be a decision, written down, not an accident.

Morrison reads the URL grid export, with page type, intent, HTTP status and Search Console clicks per URL, summarizes it by section and writes the flagged inventory to a spreadsheet.

The minimum columns for each URL

A flat URL list cannot be prioritized. Capture enough to slice the data, and no more: twenty fields nobody fills in are worse than seven that everyone uses.

  1. Canonical URL and HTTP status (including redirect target).
  2. Page type: article, product, category, support, landing page, tool, legal.
  3. Topic or product line the page serves.
  4. Template, because template-level problems are fixed once, not page by page.
  5. Language or market, with hreflang alternates kept as separate rows so rollups do not double-count.
  6. Owner. “Unowned” is a valid value and usually one of the most useful findings of a first audit.
  7. Last substantive update,not the CMS “modified” timestamp, which fires on template and plugin changes.

That turns “how much thin content do we have?” into “how many support articles owned by the product team have not been substantively updated in 18 months and score Limited on helpfulness?”. The second question can be assigned. The first cannot.

Where Morrison fits:Morrison’s site index reads your sitemap, shows the sections and languages it found with page counts, and crawls the sections you choose. Each URL gets its HTTP status and redirect target, metadata, a page type and search intent, and 90 days of Search Console clicks and impressions, in a grid you can filter, group into segments and export to CSV. It reads main content only, so it does not map navigation or footer links, click depth or page speed: use a dedicated technical crawler for those. Owner and funnel stage still come from your CMS or your team. For the full method, including how to reconcile sources and keep the list current, see how to build a content inventory, and for the tooling, content audit and inventory.

Step 2: Score quality with one rubric

The point of a rubric is consistency. Ad hoc judgments from five reviewers produce data you cannot sort. A good rubric has distinct dimensions, a written definition of each level, and a link from each result to an action. Keep the component scores visible even if you also compute a total: a page that is well structured but thin on evidence needs different work from one that is thorough but unreadable.

Google publishes the questions it suggests site owners ask of their own content in Creating helpful, reliable, people-first content: original information, substantial and complete coverage, clear sourcing and expertise, and whether the page exists mainly to attract search visits. Those questions make a sound base for the judgment part of a rubric. Add the mechanical checks your site needs on top.

DimensionQuestionAutomate?
Helpfulness and depthWould the intended reader finish the page able to do what they came for?Triage with AI, confirm on a sample
Originality and effortDoes the page add data, examples or a view that is not everywhere else?Triage with AI, confirm on a sample
Accuracy and freshnessAre facts, prices, product names and policies current?Flag with AI; a person verifies
Trust and expertiseIs it clear who wrote it, why they know, and where claims come from?Mostly; weigh more heavily on money and health topics
Structure and readabilityLogical headings, scannable sections, reading level that fits the audienceYes
MetadataUnique, accurate title and description; structured data where it appliesYes
AccessibilityAlt text, link text, heading order; spot-check against WCAG 2.2Partly; automated checks catch only some issues

Tiers or points

Tiersrate each dimension as, say, “meets bar”, “needs work” or “blocking”, and any blocking rating sends the page to the top of the queue. Tiers are easy to explain and hard to argue with. Weighted points (0 to 10 per dimension, with weights) let you rank thousands of pages and shift emphasis, for example weighting accuracy for a compliance audit and depth for a search audit. Whichever you choose, write it down and keep it stable: quarter-on-quarter comparisons only mean something if the rubric did not change underneath them.

Calibrate before you scale

Before scoring the whole site, have two reviewers score the same 20 to 30 pages independently, then compare. Where they disagree, the definition is too vague: tighten the wording and repeat. If you are using AI scoring, run the same sample through it and compare against the agreed human scores. This takes a day and saves weeks of arguing about results later. Keep the calibration sample and re-run it whenever you change the rubric or the model.

Where Morrison fits:after each crawl, Morrison’s content analyzer scores new and changed pages on eight dimensions taken from Google’s helpful-content and spam guidance (originality, effort, helpfulness, skill, accuracy, trust, people-first and spam), each from Weak to Excellent. Every subscore is a column in the URL grid, pages about money, health or safety are flagged with trust counted double, and each score opens to the checklist behind it with what to change. It is a consistent first pass, not a fact-check: accuracy still needs a person who knows the subject. See also thin content identification, brand voice audit and metadata and structure analysis.

Step 3: Join performance data without breaking it

Quality scores tell you what could be better. Performance data tells you what matters. Join at least these:

  • Search Console, by page: clicks, impressions, CTR and average position. Add query-level data for the pages you will look at closely.
  • GA4, by landing page: sessions, engagement rate and key events. In GA4 an engaged session lasts longer than 10 seconds, has a key event, or has two or more page views, and bounce rate is simply the share of sessions that were not engaged.
  • Backlinks from your link tool, so you never remove a page that other sites still point to.
  • Non-search traffic where it matters: a support article with no organic clicks but heavy traffic from in-app links is not a removal candidate.

Search Console limits that trip up audits

Three details from Google’s own documentation cause most of the “these numbers don’t add up” moments:

  • The interface exports 1,000 rows. For a site-wide page list, use the Search Analytics API or the Looker Studio connector. Both can return up to 50,000 rows per day, per site, per search type, according to Google’s deep dive on performance data limits.
  • Query rows do not sum to the page total. Queries issued by fewer than a few dozen users over two to three months are anonymized: they count in chart totals but never appear as rows. Use page-level totals for page decisions and query rows for diagnosis.
  • History is limited to 16 months. If you want year-over-year comparisons in future audits, store dated exports now. Search Console also offers a branded and non-branded query filter (introduced in March 2025, not available for low-traffic sites), which helps separate brand demand from the non-branded visibility an audit is usually about.

Normalize URLs before joining: lowercase hosts, strip tracking parameters, one protocol and one trailing-slash rule, and match on the canonical URL. Use at least 90 days of data to smooth noise, and compare against the same period last year for seasonal topics: a gardening guide with no traffic in January is not necessarily underperforming.

Four quadrants

High performanceLow performance
High qualityProtect. Use as the model for new pages. Change only if it starts to slip.Distribution problem: check intent match, internal links, title and snippet.
Low qualityFirst refresh candidates: the demand already exists and the risk is concentrated here.Consolidate or remove, after checking backlinks, non-search traffic and legal need.

Pages trending down deserve attention whatever their quadrant. The guide to content decay covers how to tell decay from seasonality and algorithm updates.

Step 4: Turn findings into decisions

This is where most audits stall: the jump from “here are the findings” to “here is next quarter’s work”. Four actions cover almost every page:

  • Keep: meets the bar and performs. Document why, so it is not re-reviewed next cycle.
  • Refresh: sound page, stale or incomplete details. The URL stays. The content refresh playbook covers how.
  • Consolidate: several pages serve the same intent. Pick the strongest URL, merge the best material into it and permanently redirect the rest. See how to find and fix keyword cannibalization.
  • Remove: no search demand, no other audience, no links, and not worth improving. Redirect to a genuinely equivalent page, or let it return 404 or 410.

Two Google details shape the remove decision. First, Google’s core updates guidance calls deleting content a last resort, for content that cannot be salvaged, while noting that removing a whole section built for search engines rather than people can help the rest of a site. Its self-assessment questions also warn against removing lots of older content mainly because you think it will help rankings. So remove for readers, not for an imagined site-wide score. Second, Google treats 404 and 410 the same way (all 4xx codes except 429 are handled alike), so do not spend time debating which one to return. On a site with fewer than about a million pages, crawl budget is rarely the reason to prune: Google’s crawl budget guide is aimed at very large or very fast-changing sites.

A decision matrix, with thresholds as rules of thumb

Write the logic down so that two reviewers reach the same answer. The thresholds below are starting points for a mid-size site, not benchmarks; scale them to your traffic and capacity, then keep them fixed for the cycle.

IfThen
Fewer than about 10 organic clicks in 12 months, no external links, no non-search traffic, and weak on helpfulnessRemove or merge into the nearest relevant page
In the top fifth of pages by clicks or key events, and weak on any quality dimensionRefresh, high priority
Two or more pages getting impressions for the same main queriesReview for consolidation
Makes regulated, pricing or product claims and not reviewed in 12 monthsMandatory accuracy review, whatever the traffic
Strong scores, low clicks, impressions presentFix title, snippet and internal links before touching the content

Worked example

Here is how the matrix plays out on five rows from a hypothetical B2B software site. The numbers are illustrative, not client data.

PageClicks (12 mo)QualityOther signalDecision
/blog/what-is-payroll-software14,200Limited on effort, Fair on accuracyTop 5% of blog by clicks; pricing section two years oldRefresh, size M, this quarter
/blog/payroll-software-guide900FairSame main queries as the page aboveMerge into the page above, 301
/blog/2019-webinar-recap6Weak on helpfulnessNo external links, no internal trafficRemove, return 410
/help/export-payslips40Strong3,000 sessions a month from in-app linksKeep
/guides/holiday-pay-rules2,100Strong, but trust flagged on a YMYL topicRates changed this yearAccuracy review with the payroll expert, size S

Size the work

Add a rough effort size (S, M, L) and an expected impact to every refresh and merge. Impact can come from current clicks and key events, query opportunity or strategic weight. High impact and small effort go first; low impact and large effort are cut or deferred. Without explicit sizing, teams drift toward the most interesting pages or the ones leadership happened to mention.

Get it resourced

Leadership needs one page: how many URLs sit in each action, the effort in person-weeks, and the expected effect in their terms (recovered demand, risk removed, fewer pages to maintain). Use a concrete line from your own data, such as “we have N posts competing for the same five queries”, rather than “we have some overlap”. For reporting formats, see stakeholder content reporting.

Step 5: Make it repeat

The first audit is the expensive one. The value comes from the second and third, when the inventory, rubric and joins already exist and a cycle takes days instead of weeks. A rhythm that works for many teams:

  • Weekly or monthly: recrawl, score new and changed pages, and flag pages published without required metadata or that crossed a freshness threshold.
  • Quarterly: review the action backlog. What was done, what moved, what entered the inventory. Re-rank.
  • Yearly: revisit the rubric, the taxonomy and the thresholds, and present the trend to leadership.

Give every finding an owner and a due date, and put it in the tool the team already uses for work. Decide who can add or reclassify URLs, who signs off on removals and redirects, and who owns the rubric. Keep dated snapshots of the inventory and each scoring run so you can answer “what changed since last quarter?” and show the share of pages meeting the bar over time.

Where Morrison fits: the index recrawls on a schedule (monthly on Starter; weekly, every two weeks or monthly on Pro and Business) and looks for new pages daily, and the content analyzer re-scores pages as they change. Chat answers from the whole index, scores included, and reads whatever pages a question needs. To rank every page by one dimension, export the URL grid with its analyzer columns; to run the same steps on every page in a segment, use a workflow, up to 500 URLs a run, that writes the result into a column. Automations put a recurring report on a schedule (weekly or monthly on Starter, up to daily on Pro, up to hourly on Business) and each run can read the previous one, so the report says what changed. See content refresh prioritization and content decay detection.

Where AI helps, and where it does not

Large language models do not replace the framework. They remove the reading time that used to make steps 1 and 2 impractical at scale.

  • Good at: classifying pages by type, topic and funnel stage; summarizing what a page covers and what it misses; flagging claims that look dated (years, prices, product names); finding pages that cover the same topic in different words; applying a written rubric the same way to every page.
  • Not good at: verifying facts against current reality, knowing that a page exists for a partner contract or a legal reason, and deciding whether a merge fits your positioning. Those need people.

The working pattern is triage: let the model sort and flag every page, then spend human review on the 50 pages that matter most rather than skimming 500. Check model output against your calibration sample, and never let a model publish a removal or a redirect on its own. See outdated content finder, duplicate content detection and E-E-A-T assessment.

Common audit mistakes

  1. Auditing everything at once. Prove the method on one section, then expand.
  2. No objective. Without a decision to inform, you get a large dataset and no plan.
  3. Trusting one source. CMS exports miss pages outside the CMS; crawls miss orphans.
  4. Reading CMS “modified” dates as reviews. Template changes update them without anyone reading the page.
  5. Removing pages without checking their other jobs. A page with a handful of organic visits but links from strong external sites, or heavy support traffic, is not a removal candidate. Check backlinks and internal links first.
  6. Redirecting everything to the homepage. Redirect only to a page that serves the same need; otherwise let the URL return 404 or 410.
  7. Ending with a spreadsheet. The deliverable is a ranked work queue with owners and dates, not a scored URL list.

From audit to governance

An audit answers “what state is our content in?”. Governance answers “how do we keep it there?”. The bridge is simple: make the audit rubric the publishing standard, so new pages do not fail the next audit; give every URL an owner who inherits it when people leave; define how pages are retired, including redirects; and report the share of pages meeting the bar alongside traffic. Structural findings such as orphan pages or a drifting URL scheme deserve their own workstream: see internal linking at scale and the site architecture review. The complete guide to content governance covers the operating model in full.

If you are starting your first large audit this quarter: pick one section, write the objective in one sentence, build the inventory from three sources, calibrate the rubric on 20 pages, join Search Console by canonical URL, apply the decision matrix, and hand the team a ranked queue with owners. Then put the next cycle on the calendar before this one ends.

Sources and further reading

  1. 1Creating Helpful, Reliable, People-First ContentGoogle Search Central
  2. 2Page indexing reportSearch Console Help
  3. 3A deep dive into Search Console performance data filtering and limitsGoogle Search Central Blog
  4. 4Performance report (Search results): Dimensions and data groupingsSearch Console Help
  5. 5Google Search's core updates and your websiteGoogle Search Central
  6. 6How HTTP status codes, and network and DNS errors affect Google SearchGoogle Search Central
  7. 7Redirects and Google SearchGoogle Search Central
  8. 8Crawl budget management for large sitesGoogle Search Central
  9. 9[GA4] Engagement rate and bounce rateAnalytics Help
  10. 10WCAG 2.2 Quick ReferenceW3C
Ulrich Svarrer

Ulrich Svarrer

CEO, Morrison

Ulrich is CEO of Morrison and founded Bonzer in 2017, growing it into one of Scandinavia's leading SEO agencies with 900+ clients across Copenhagen, Oslo, and Stockholm. At Morrison he leads strategy, operations and go-to-market, bringing years of hands-on SEO and content work to the platform side of the business.

See Morrison on your own site.

Start a 14-day free trial and index your site in minutes. Or book a demo and we crawl it before the call.

Compare plans