Guide Published 20 June 2026 14 min read

Enterprise SEO Audit: How to Run One Across Templates, Teams and Crawl Budget

Seven phases, in the order the findings depend on each other. An enterprise SEO audit reads the rules above the pages: the templates that generate URLs, the crawl allowance per host, the index per sitemap, and the team that owns each fix.

Roman Makuev
Last updated

An enterprise SEO audit is a review of the templates, URL rules and crawl allowances that generate a large site’s pages. It reads the site per template, to find which rule produces a failure and which team owns the fix. The unit changes because the pages are output: one template renders every URL under it, so one wrong rule ships thousands of times the day it deploys, and one fix repairs them together.

The shape of the finding is always the same. Click through a hundred pages of a large catalog and every one of them looks fine: title present, canonical present, 200 status, indexable. Group the same URLs by the template that generated them and read the template as one object, and the fault is immediate. Every page under /catalog/ carries a canonical pointing at its parent category, and in Search Console the Duplicate, Google chose different canonical than user count on that one URL pattern starts climbing from the day the template deployed. Nobody touched a page. The deploy date set against the status curve is the evidence a page-by-page crawl can’t produce, because the crawl has no idea when anything happened.

Everything below is how to run that reading, the way I run it on sites in the low millions of URLs, which is the ceiling of what I work on; a hundred-million-page site is a different problem and I won’t pretend to cover it. It is also only the finding. Rebuilding the template, rewriting the URL rule or reconfiguring the redirect map is the build, and I mark where a finding turns into one. The seven phases run in the order the findings depend on each other: who owns what, then what the templates do, then what the crawler and the index make of them, then content and authority per template, then the report and the roadmap.

What counts as an enterprise site, and how an enterprise SEO audit differs

Enterprise is a combination of traits: many templates, many teams, several platforms stitched together, multiple markets, a CMS that fragmented over years, legacy layers no team will touch. A 200,000-URL store run by one team on one clean CMS is easier to audit than a 40,000-URL site split across three content systems, four teams, and two acquisitions that were never merged.

Two traits define it. Propagation: one template edit lands on thousands of pages at once, for good or ill. Split ownership: the template belongs to engineering, the content to content ops, the redirect rules to the platform team, and no one person can see or fix the chain end to end.

DimensionStandard auditEnterprise audit
Unit of analysisThe URL, the pageThe template, the rule that stamps URLs out
A defectOne page to fixOne rule → N pages, fixed or broken together
Index coverageOne site-wide numberBroken out per template, per sitemap
Crawl budgetOne site, one allowanceOne allowance per site, shared across every Google crawler
EvidenceThe crawler’s flagDeploy date against the Search Console curve; logs against the crawl
OwnerOne person, usuallyA team per template; the audit names it
DeliverableFlat list of URL-level issuesCauses rolled up, weighted by revenue, owner named, roadmap by quarter

One correction before the thesis hardens into a rule. Not every URL on an enterprise site is template output. The homepage, the top categories, the flagship guides and the handful of pages that carry a disproportionate share of revenue don’t obey any template, and they get read page by page, the old way. Knowing which few hundred URLs to exempt is part of the audit.

Before you start: access, tools by scale, and how long it takes

Four things have to be in hand before an enterprise SEO audit starts, and on an enterprise site getting them is itself a few weeks of the schedule. Owner access to every Search Console property, because the API limits below are per verified property and the properties have to exist first. A month of raw server logs from every host, not the CDN’s summary. A full crawl with JavaScript rendering on for the templates that need it. And the business’s own list of which templates and which few hundred exempt URLs carry revenue, because impact is weighted by that list and nothing in a crawl can supply it.

The crawler and the log reader both change at roughly a million URLs; Search Console changes with the number of hosts and folders.

JobInto the low millions of URLsPast that
CrawlScreaming Frog in database storage mode, full crawl, JavaScript rendering on for the templates that need itLumar, Botify or OnCrawl; or a per-template sample validated against logs and Search Console
LogsScreaming Frog Log File Analyser, into the millions of linesBotify, or a warehouse query (BigQuery, Snowflake) over the raw access logs
Search ConsoleA URL-prefix property per host for Crawl stats; a property per major template folder for Pages and PerformanceThe same, plus the Bulk data export to BigQuery for query-level data past the 1,000-row cap
Index statusURL Inspection API, sampled per template (2,000 requests a day per property)Per-template sitemaps and their submitted-versus-indexed ratio, read continuously

My position on crawl scope: into the low millions a full crawl is still practical and worth running, because sampling can’t find an orphaned template. Past that, a desktop crawler stops being the tool, and the alternative is a rotation of per-template samples. A pattern shows up in a sample; the URL class you didn’t know existed doesn’t, which is why the log segmentation in Phase 3 runs against every host regardless of how the crawl was scoped.

With logs and the bulk export already in place, a full audit takes four to eight weeks, and the spread is explained by the number of templates, not the number of URLs. Without them, add the time it takes to get them, which on a site with four teams is usually longer than the audit.

Phase 1. Governance: an owner per template before a finding per template

On enterprise, “what’s broken” is half the answer, and “who controls the system that’s broken” is the other half, and an enterprise SEO audit has to produce both. A fix with no named owner dies in an unworked backlog no matter how correct the diagnosis, so the first artifact of the audit, before any crawl is read, is a table with one row per template: its URL pattern, the team and the named person who accepts a ticket for it, the date of its last deploy, and the Search Console property that covers it. The exempt pages from the section above get a row each.

Most of the table fills from the crawl segmentation in Phase 2, and SEO ops can draft it in a day. The owner column is the one that takes weeks, and it takes weeks because writing a name there is the decision. Two columns do work later in the audit. The deploy date is what every Search Console status curve gets set against in Phases 2 through 4. A blank property column means the template has no report of its own yet, which Phase 2 fixes. The table also surfaces the organizational version of cannibalization: two business units publishing against the same queries from two templates, which shows as two rows whose owners have never met.

The decisions that produce most enterprise findings, no owner per template, no SEO check in the deploy pipeline, one index-coverage number for the whole site, are their own piece, the enterprise SEO mistakes; this audit reads what those decisions left in the reports.

Phase 2. Template fingerprints: crawl segmentation and Search Console per template

You could optimize a thousand pages by hand and still not touch the template breaking a hundred thousand, so an enterprise SEO audit reads the templates and rules that stamp the pages out. I crawl, then segment every URL by template (usually by URL pattern, sometimes by a CSS selector or a data-layer attribute when the pattern doesn’t reveal the template) and read each template’s SEO fingerprint as one thing: canonical behavior, index status, title pattern, meta robots, internal links in and out, all rolled up to the rule that produced them. A healthy template has one fingerprint. A broken one has one fingerprint too, which is why the break is visible.

The failure I find most often is the canonical one from the opening: a category template that points every page at a parent, or at itself with a stripped parameter that collapses distinct pages into one, and a directory falls out of the index. Second is the header-level noindex, an X-Robots-Tag: noindex set on a whole directory in the server config, invisible to anyone reading page source, which is how a staging rule survives into production. Once the template is named, the finding is complete; rebuilding it is engineering’s ticket.

Search Console at enterprise scale

Search Console is built for a site, and an enterprise is several. One domain property and one Performance report average most of the findings above out of existence, and the limits below decide the setup.

LimitValueWhat it forces
Performance UI rows1,000 per viewBulk data export to BigQuery (available since 2023) for query-level data on a site with a million queries
Retention16 monthsA two-year baseline needs the export to have been running already
URL Inspection API2,000 requests a day per propertyLive index status is sampled per template, never read URL by URL
Crawl stats reportDomain properties and host-root properties onlyCrawl split by host comes from a property per host; crawl split by template comes from the logs, not from Search Console

The setup that follows: a URL-prefix property per host alongside the domain property, which gives Crawl stats per host, and a property per major template folder, which gives the Pages report and Performance per template. The two exclusion statuses that matter most read differently. Discovered – currently not indexed clustering in one template is the crawl-starvation signal, and belongs to Phase 3. Crawled – currently not indexed is, in practice, a quality or duplication verdict, and belongs to Phase 5. Most reports lump them, and they point at different owners.

Phase 3. Crawl budget audit: server logs by host and template

Google’s crawl-budget guidance gives each site its own allowance, so www.example.com, shop.example.com and m.example.com are read as separate crawl-budget problems, and in my audits the smallest host is the one that starves. Since the 22 July 2026 rewrite of the guidance, the capacity limit is shared across all of Google’s crawlers, Googlebot, AdsBot, the image and Shopping fetchers, and every site starts on a conservative default that grows only as the server proves it can take more. My reading of that for an enterprise running heavy Shopping feeds and ads verification: the ads crawler is spending the organic crawler’s budget.

The pattern in the logs

“Millions of URLs” stays an abstraction until you pull the server logs and watch where Googlebot spends its day. A large share of what verified Googlebot touches returns nothing worth indexing, and the most-crawled URLs are dominated by filter and sort combinations that aren’t indexed and have no search volume, hit more often than the category pages they hang off. The parameter strings name the platform:

PlatformFacet or variant string in the logs
Salesforce Commerce Cloud?prefn1=refinementColor&prefv1=Blue
Magento layered navigation?color=53&price=50-100
Shopify Plusfilter.v.option.color=blue
Sitecore?sc_lang= variants
Adobe Experience Manager.html selector chains

What I don’t have is a clean benchmark for that waste share. Published log analyses describe individual sites, and the careful ones say so; a population number doesn’t exist, and I’d distrust anyone who quotes one.

Verification, AI crawlers, segmentation

Before trusting the logs I verify the Googlebot hits against Google’s published IP ranges, the googlebot.json file or a reverse DNS to googlebot.com, because spoofed Googlebot traffic on a large site is common enough to distort the split. I separate Googlebot from the AI crawlers (GPTBot, ClaudeBot, PerplexityBot and the rest), which behave differently and on an enterprise origin can outnumber it. Verified hits then get segmented by template, the same segmentation as the crawl, so the two datasets line up: where the crawl says the templates are, and where the logs say the bot went. The output is a share of Googlebot’s month spent on URLs you don’t want indexed, and the names of the templates that took it.

Phase 4. Index audit by sitemap: bloat, robots.txt and one sitemap per template

The enterprise index question is what share of indexed URLs is worth indexing. Programmatic generation is the usual cause, because generation and value are different things: a template that spins up a page for every city, every filter combination, every attribute pair can manufacture tens of thousands of URLs that each add nothing the index didn’t already hold. Since March 2024 that has a name in Google’s spam policies, scaled content abuse, generating many pages primarily to manipulate rankings regardless of how they were produced, and the August 2025 spam update was widely read as the enforcement pass against thin, near-duplicate, programmatic sets. A template-generated tail of location or attribute pages is the textbook case.

I group indexed URLs by template and ask, template by template, which ones earn their place and which inflate the count. Robots.txt and sitemaps fold in because they are where the fix gets aimed. Robots.txt at scale is a decision about which whole templates to keep bots out of, with one reminder: Google reads the file up to 500 KB, and an enterprise robots.txt that grew by accretion can pass that and have its tail silently ignored. XML sitemaps get segmented by template, one sitemap per template under the 50,000-URL and 50 MB limits, gathered by a sitemap index. When a sitemap holds one template’s URLs, Search Console’s indexed-versus-submitted ratio per sitemap says which template is failing to index, without a crawl. Setting that up costs a developer an afternoon, and it is the cheapest ongoing monitor an enterprise site can run.

Phase 5. Content by page type: cannibalization, striking distance, entity coverage, thin tails

Content on an enterprise site is template output too, so the enterprise SEO audit reads it the same way: not which page is thin, but which template produces thin pages, and whether the template as a whole adds anything the ranking set doesn’t already hold.

Cannibalization and striking distance by template

Cannibalization at this scale is a template problem. When two templates generate pages for the same intent (a category and a filter page, a location page and a service page) the ranking URL alternates between them and neither holds a position. I read it in the Performance report by query with the Pages dimension: a query whose top URL changes month to month is being served by two templates, and the fix is a rule, a canonical or a noindex on the template that shouldn’t compete, applied once.

Striking-distance keywords are the ones sitting at roughly positions 5 through 20, filterable out of Search Console, and every rank tracker has the report. What the report doesn’t do is the second half: telling you which of those pages can move and which only look close. A page at position 30 needs a rebuild. A page at position 8 with demand behind it needs a nudge: a few internal links from high-authority templates, a couple of targeted external links, one metadata and content pass to cover the entity properly. I surface candidates by crossing rank data against the demand map with a floor on search volume, then read each one for intent match, inbound links that carry weight, and whether the content covers the entity or only mentions the keyword. The cap on a near-win is usually the template itself (a canonical rule or an internal-linking pattern that limits every page it generates), which sends the finding back to Phase 2.

Old templates and entity coverage

Enterprise sites are old, and old sites carry old optimization fossilized into their templates: the target term in the title, the H1, and three or four times in the body, stamped across thousands of URLs by a template built when keyword density was the accepted play. Google has described its ranking as reading pages in context since BERT in 2019, and a page built around how many times it says the term underperforms a page that covers the field the query implies. The check per template is entity coverage against what ranks, which entities the winning pages co-mention that the template never does, and an information-gain read of whether the template adds anything the ranking set doesn’t already hold. Bi-encoder and late-interaction models are how I reason about that similarity; they are a model of relevance, not a description of Google.

Systemic duplication and thin tails

Duplication on an enterprise site is a template producing near-identical pages by the thousand: location pages that differ only by the city name dropped into the same boilerplate, filter pages, product descriptions pulled verbatim from a manufacturer feed across every SKU. Google’s helpful-content system has been a site-wide classifier since it launched in August 2022, and the March 2024 core update folded it into core ranking, so it no longer runs as a separate update you can see coming. A bloated tail of thin, templated pages drags down the domain, including the templates that sell, and recovery lands at a later core update; the industry’s read of the sites hit in 2023 is that recoveries mostly took a year or more. I score the thin templates against the SERP they’d have to compete in: does this entire template, at its full scale, add anything the ranking results don’t already have. When the answer is no, the template is a liability, and the Crawled – currently not indexed share per template from Phase 2 is usually where Google has already said so.

Phase 6. Authority: internal link equity by template, external links by section

Authority on an enterprise site has two halves, and an enterprise SEO audit reads the one the site controls first.

Taxonomy, navigation and the internal link graph

Large organizations build the site to mirror themselves: business units, product lines, the org chart, the way the company files its own thinking. That is rarely how the market searches, so demand lands in the wrong place or finds no place at all. The fastest check is the Search Console query report set against the navigation labels: if the words bringing impressions don’t appear in the menu, the demand and the pages exist and never meet. Then the internal link graph at scale, read per template from the crawl’s Site Structure tab and the Inlinks = 0 filter: commercial templates orphaned because no other template links to them, whole clusters isolated from the rest of the site, authority pooling in the blog, which everyone links to by habit, instead of the money templates that need it. Reading the graph is a tooling job; restructuring the navigation around demand is a business decision the audit informs.

External links by section

The backlink profile of an enterprise domain is read per section, not as one number, because the sections were built by different people at different times. Referring domains get grouped by the folder or host they point at: how much of the profile lands on the templates that sell, how much on the blog, how much on an acquired brand’s old folder that still carries the links it earned under its own name. A domain-level authority metric that looks healthy can be three strong sections and a commercial template that no external link reaches, and the fix for that is the internal graph above, not a link campaign. Links that have stopped counting without leaving the profile, a bought set discounted in stages, show up as positions falling on the pages whose rankings sat above what their content holds alone while the backlink tools report nothing changed; that read belongs to the rankings loss audit. Link building itself is outside this audit.

Third-party sections

There is a version of the authority question that is specific to enterprise, and it comes straight from split ownership. Since May 2024 Google has enforced a site reputation abuse policy against third-party content hosted on a site to exploit its ranking signals, coupon sections, review sections, partner content on a subdomain or in a folder, and the November 2024 clarification closed the loophole: first-party oversight of that content doesn’t exempt it. On 15 May 2026 the spam policies were rewritten so that “attempting to manipulate generative AI responses in Google Search” counts as spam too, with the June 2026 spam update the first rollout under the new wording. On enterprise sites of that shape there is usually at least one such section, inherited from an acquisition or a partnership nobody in SEO was told about. The audit inventories them with an owner per section, because the team that owns them is rarely the team that will be answering for them.

Phase 7. Technical pass and the seams: Core Web Vitals, rendering, international

The standard technical checks get one tight pass in an enterprise SEO audit, because they rarely surprise and shouldn’t pad the audit. Core Web Vitals read per template, never as one site-wide score: a PDP template and a PLP template fail differently, and the Chrome UX Report only holds per-URL numbers for URLs with enough traffic, so on enterprise the long tail inherits the origin’s figures and a failing template can hide behind a passing one. JavaScript rendering asks whether Googlebot receives the same commercially relevant DOM the user does, and it matters more here than anywhere because these sites run the heaviest frameworks. Canonical hygiene across the URL space. Schema, and specifically whether Organization markup exists once, on every host, or three contradictory times. Mobile parity per template. The full reading of that layer, discovery, crawl, render, index as one path, is the technical SEO audit; this one assumes it and reads only what changes when the unit is the template.

Outside this article on purpose: the seams between locales on a multi-market site, covered in the international SEO audit; and the platform migration itself, the most common trigger for an enterprise audit, which is a build project with its own checklist. The audit reads what the migration left behind.

The enterprise SEO audit report: causes, revenue weight, owner

A flat 500-issue export is worse than useless at this scale, and the reason is structural. It lists URL-level symptoms of template-level causes, tens of thousands of rows that are underneath one wrong canonical rule, and sorts them by a crawler’s idea of severity, which has no notion of which pages touch revenue.

The deliverable inverts that. It rolls symptoms up to their cause, so one rule and its N affected URLs collapse into one fix. It weights by business impact, because a medium flag on the template that drives revenue outranks a critical one on a template no visitor should reach; where the site’s only revenue number is site-wide, that weighting takes a join between Search Console and the pipeline, and it is the hard half of the report. It names the owning team per fix, from the Phase 1 table. And it carries a date for each, when the template deployed and when the index moved, so the fix can be verified against the same signal that exposed it.

The roadmap: the first 90 days, two quarters, and what gets rechecked

An enterprise SEO audit report without a sequence gets worked in the order the tickets happen to be picked up, which on a site with four teams means the cheapest fixes first and the template that carries revenue last. The roadmap fixes the order, and it is short.

The first 90 days are the findings that need no build: the owner table signed, a release log started for every high-traffic template, the per-template sitemaps split and submitted, the Search Console properties created per host and per folder, the robots.txt tail read and trimmed. None of that moves a ranking by itself. All of it is what makes the next two quarters measurable, because every fix after it gets a deploy date and a report of its own to be read against.

The next two quarters are the template rebuilds, one per sprint, ordered by the revenue weight from the report: the canonical rule, the facet routing, the template that produces the thin tail, the orphaned commercial template. Each ships with a date in the log and gets read two weeks later in the property that covers it; if the status curve that exposed it hasn’t turned, the fix didn’t reach production, whatever the ticket says.

What gets rechecked. A full audit annually. A template-level health check after every deploy to a high-traffic template. Continuous monitoring in between, where the per-template sitemap ratio from Phase 4 is the alarm: when a template’s ratio drops after a deploy, whoever owns that template knows within days. Unscheduled triggers are a platform migration, a design-system change, a CDN or hosting move, an acquisition folded into the domain, and an unexplained double-digit drop in non-brand organic sessions.

Enterprise SEO audit checklist: checks by template

Where an enterprise SEO audit reads each layer and what surfaces the failure, with the template as the row key throughout.

CheckWhere I read itWhat surfaces the failure
Owner per templateThe Phase 1 tableA blank owner column; two templates on one intent with owners who have never met
Template fingerprintFull crawl (or per-template sample) segmented by URL patternOne template, one wrong canonical or robots signal on every URL
Deploy evidenceRelease log against GSC Pages report per propertyDuplicate, Google chose different canonical than user climbing from the deploy date
Header-level noindexResponse headers per template; crawl Directives tabX-Robots-Tag: noindex on a directory nobody meant to hide
Crawl allowanceVerified Googlebot hits in logs, by host and templateFacet and sort URLs out-crawling the categories they hang off
Crawl starvationGSC Crawl stats per host; Pages report per template folderDiscovered – currently not indexed piling up in one class
Index bloatIndexed URLs grouped by template; per-template sitemap ratioA generated tail indexed at scale with no demand behind it
Striking distance and cannibalizationGSC positions 5–20 crossed with the demand map; queries whose top URL alternatesNear-wins capped by a template rule; two templates serving one intent
Entity coverage and thin tailsCo-mentioned entities and information gain per template vs the ranking set; Crawled – currently not indexed share per templateKeyword-density templates covering none of the field; a tail Google has already declined
Taxonomy vs demandGSC query report against navigation labels; Site Structure and Inlinks = 0 per templateImpressions on words the menu never uses; orphaned commercial templates
External links by sectionReferring domains grouped by folder or hostA commercial template no external link reaches; an acquired folder holding the brand’s links
Third-party sectionsInventory of partner folders and subdomains; ownership per sectionA coupon or review section carrying the domain’s authority and nobody’s name

Enterprise SEO audit FAQ

How long does an enterprise SEO audit take?

Four to eight weeks once logs, the bulk export and the per-property access exist, and the spread comes from the number of templates rather than the number of URLs: a site with thirty templates reads faster than a site with three hundred, whatever their URL counts. Getting the access is the part no schedule budgets for; on a site with four teams it has taken longer than the audit.

How often should an enterprise site be audited?

Fully, once a year. Per template, after every deploy that touches a high-traffic template, which is a check that takes an afternoon when the release log and the per-template property exist and can’t be done at all when they don’t. The sitemap ratio per template is the signal between those two, and it runs by itself.

How is this different from a technical SEO audit?

The technical audit reads the path from discovery to retrieval for a site; this one reads it per template and adds the parts a single-team site doesn’t need: who owns each template, how the crawl allowance splits across hosts and across Google’s own crawlers, and which sections arrived with an acquisition or a partner and have nobody’s name on them. On a site with one team and one CMS, the technical audit is the whole job.

If you’d rather have that read on your site than run it yourself, that is our SEO audit.