A single category template can render a quarter of a million URLs. So a wrong canonical rule sitting in that one template isn’t one mistake — it’s 250,000 canonical errors, shipped the moment the template deployed. And no page-by-page audit will ever find it, because the error isn’t on a page. It’s in the rule that makes the pages.
That’s the whole difference with enterprise, and it changes what you audit. I’m Roman Makuev, Founder & Search Architect at Neon. I built my own tooling — seo-algorithm.com — to read sites at the level where the template, not the URL, is the unit of analysis, because standard audits check URLs one at a time and enterprise sites break at the layer above that. Everything below is how I actually run this on sites in the low millions of URLs, which is the honest ceiling of what I work on. I’m not going to tell you how to audit a hundred-million-page site I’ve never touched.
One boundary first. This is how I find the damage. Fixing it — rebuilding the template, rewriting the URL rule, reconfiguring the redirect map — is the build, a separate discipline. What follows is the method.
- A standard audit checks URLs, incidents, individual pages.
- An enterprise audit checks rules over URLs, templates over pages, and propagation over one-off incidents.
- One template renders N URLs — so one error becomes N failures, and one fix becomes N repairs. That leverage is the entire game.
What “enterprise” actually means, and it isn’t size
Kill the assumption right away: enterprise isn’t a big site. It’s a combination. Many templates, many teams, several platforms stitched together, multiple markets, a CMS that fragmented over years, legacy layers nobody wants to touch. A 200,000-URL store run by one team on one clean CMS is far easier to audit than a 40,000-URL site split across three content systems, four teams, and two acquisitions that were never really merged.
The two traits that actually define enterprise are propagation and split ownership. Changes propagate — one template edit lands on thousands of pages at once, for good or ill. And ownership is divided — 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 whole chain. Everything below follows from that shift.
The template is the unit, not the page
Here’s the reframe the entire audit turns on. On an enterprise site you never audit URLs, because there are too many and they’re not independent objects — they’re output. You audit the templates and rules that stamp them out. One template renders N URLs, so one error becomes N failures and one fix becomes N repairs, and that leverage is the entire game. You could optimize a thousand pages by hand and still not touch the template quietly breaking a hundred thousand.
The failure I find most often looks like this: a category template sets its self-canonical wrong — points every page in the directory at a single parent, or at itself with a stripped parameter that collapses distinct pages into one — and a whole directory silently falls out of the index. Click through the pages one at a time and each looks fine. Group the URLs by the template that generated them and read each template as one object, and the pattern jumps out immediately: every URL under /catalog/ carrying the same broken signal. That’s the diagnosis a page-level crawl structurally cannot produce. Catalog sites push this to the extreme, where a single naïve template can spawn near-identical pages by the thousand.
So the method is: crawl the whole site — Screaming Frog handles the raw crawl at enterprise scale — then segment every URL by its template and read each template’s SEO fingerprint as a single thing. Canonical behavior, index status, title pattern, internal links in and out, all rolled up to the rule that produced them. Fixing the template is the build. Finding which template is lying is the audit.
Crawl budget, read from the logs
Everyone writing about enterprise SEO says crawl budget matters at scale. Almost nobody shows you the reading, and the reading is the whole job. “Millions of URLs” stays an abstraction until you pull the server logs and watch where Googlebot actually spends its day, and then it turns concrete and usually ugly.
The pattern is consistent. On large sites, a big share of crawl activity lands on URLs that return nothing worth indexing — on the sites I’ve audited it’s routinely been a third to half of everything Googlebot touches, and industry log-analysis write-ups report the same range, with the honest ones noting these are single-site figures, not a clean benchmark. The budget drains into parameter explosions, infinite facet grids, redirect chains, session IDs, page 14 of a paginated tail — while genuinely important pages wait days or weeks to be recrawled. The tell is almost always the same: the top few hundred most-crawled URLs are dominated by filter and sort combinations that aren’t indexed and have no search volume, hit more often than the actual category pages they hang off.
Index bloat, measured by template
The enterprise index question isn’t “how many pages are indexed.” It’s “what share of indexed URLs is economically worth indexing.” Those are completely different numbers, and the gap between them is where large sites rot.
Programmatic generation is the culprit, because generation is not the same as value. 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 — no unique demand, no unique content, nothing the index didn’t already hold. That isn’t topical authority. It’s bloat, and at scale it does active harm: it dilutes the crawl, and it drags the whole domain’s quality signal down with it.
So the diagnosis groups indexed URLs by template and asks, template by template, which ones earn their place and which are just inflating the count. Two silent tactics fold in here because they’re where the fix gets aimed: robots.txt at scale, deciding which whole templates to keep bots out of, and XML sitemaps segmented by template — when a sitemap holds one template’s URLs, Search Console’s indexed-versus-submitted ratio per sitemap tells you exactly which template is failing to index. Naming which templates are dead weight is the audit.
Pages on the verge — the enterprise triage move
Here’s a move no top-ranking guide describes, and it only makes sense at scale. On a site you cannot possibly optimize wholesale, the highest-leverage thing you can do is find the pages already almost ranking — sitting at positions 5 through 20 for queries with real demand behind them — and give exactly those the push to break onto page one. Not “optimize everything,” which is impossible and mostly wasteful. Find the near-wins and route effort there.
The reasoning is pure triage. A page at position 30 needs a rebuild; a page at position 8 with genuine demand needs a nudge — a few internal links from high-authority templates, a couple of targeted external links, one focused metadata and content pass to cover the entity properly. The return per hour of work is a different order of magnitude. So I surface them by crossing rank data against the demand map, then reading each candidate individually: is the search intent actually matched, is the page internally linked from anywhere that carries weight, does the content genuinely cover the entity or just mention the keyword. That per-page read is what separates a real near-win from a page that looks close but is structurally capped. Finding where the site is already warm is the audit.
Legacy keyword-stuffing versus entity density
Enterprise sites are old, and old sites carry old optimization fossilized into their templates. Somewhere in the history, a template was built when the accepted play was keyword density — get the target term into the title, the H1, and three or four times into the body — and that template then stamped the pattern across thousands of URLs. It made sense at the time. It actively loses now.
Since BERT rolled into Google Search in 2019, and neural matching before it, ranking leans on meaning and entities, not on term frequency alone. Google reads the page as language in context, not as a bag of keyword counts — which means a page optimized around how many times it says “enterprise SEO audit” underperforms a page that actually covers the entity field the query implies: the techniques, the tools, the platforms, the report formats, the outcomes a real answer contains. The keyword-stuffed template isn’t just dated style. It’s a systematic mismatch with the thing doing the ranking, replicated across every URL the template produces.
So the audit finds the templates optimized for keyword frequency instead of entity coverage, and it’s a template-level pattern, not a one-page rewrite. I read it two ways: entity and vector density against what actually ranks, not raw keyword count, and an information-gain check on whether the page adds anything the ranking set doesn’t already have or merely repeats the term in more places. A checklist counts keywords and calls a page optimized; I measure whether it covers the entity the way the winning pages do. Rewriting the template to match is the build.
Site architecture: the business taxonomy isn’t the search taxonomy
This is the structural diagnosis the top guides skip entirely, and on enterprise it’s often the biggest single gap. Large organizations build their site to mirror themselves — business units, product lines, the internal org chart, the way the company files its own thinking. That is almost never how the market searches. The result is a URL and navigation architecture organized around an internal logic no buyer shares, so demand lands in the wrong place or finds no place at all.
So I read the gap directly: does the architecture reflect search demand, or the company’s internal filing system? Where the two diverge, rankings leak. On top of that sits the internal link graph at scale, which on enterprise sites fails in specific ways — commercial pages orphaned because no template links to them, so a solution page that should rank sits with nothing voting for it; 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 orphans and the link graph at this scale is a tooling job, not a manual one. Naming where structure fights demand is the audit.
Content and duplication at scale
Duplication on an enterprise site isn’t one page copying another. It’s 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. The duplication is systemic because the generation is systemic.
And it’s more dangerous than it used to be, for a reason documented since the March 2024 core update: Google’s helpful-content assessment became a site-wide signal folded into core ranking, so a bloated tail of thin, templated pages doesn’t just fail on its own — it drags down the whole domain, including the templates that actually sell. The recovery clock is slow, re-rating only at the next core update, months out.
So the audit reads duplication by template and scores the thin templates against the SERP they’d have to compete in: not “is this page stuffed” but “does this entire template add anything, replicated across ten thousand pages, that the ranking results don’t already have.” When the answer is no, that template is a liability, not an asset. Fixing or consolidating it is the build.
The fast technical pass
Everything the top guides already cover well gets one tight pass, because it rarely surprises me and it 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 average hides both. JavaScript rendering: does Googlebot receive the same commercially relevant DOM the user does, which matters more on enterprise than anywhere because these sites run the heaviest JS frameworks and a client-side-only render can hand the crawler a blank page. Canonical hygiene across the URL space. Schema and structured data. Mobile. Two or three checks each, verified fast. The vector I add isn’t in this section — it’s in the seven above it.
Governance: who owns the broken system
One point here, briefly. On enterprise, “what’s broken” is only half the answer. “Who controls the system that’s broken” is the other half, because every fix crosses team lines — the template is engineering’s, the content is content ops’, the redirect rules are the platform team’s — and a fix with no named owner dies in an unworked backlog no matter how correct the diagnosis. So the audit names the system and the owner, not just the defect. That’s process, not technical diagnosis, and I keep it to its one real point.
What the deliverable actually says
A flat 500-issue export is worse than useless at enterprise scale, and the reason is structural. It lists URL-level symptoms of template-level causes: 40,000 rows that are, underneath, one wrong canonical rule. Handing that to a team buries the single fix that matters under thousands of duplicates of itself and sorts the whole thing by a crawler’s idea of severity, which has no notion of which pages touch revenue.
So the enterprise deliverable inverts all of that. It rolls symptoms up to their cause, so that this template, this rule, and its N affected URLs collapse into one fix — the team sees the handful of levers, not the forty thousand rows. It weights by business impact rather than crawler severity, because a medium flag on the template that drives revenue outranks a critical one on a template nobody should reach. And it names the owning team per fix, because at this scale an unowned finding is a finding that never ships. The issue count was never the point. Which handful of templates, fixed, move the most URLs — that’s the point.
Close
Look back at what the audit found, and almost none of it was on a page. It was in the rules above the pages: a template shipping one error forty thousand times, a crawl budget draining into parameter grids while the revenue pages starve, an architecture that mirrors the org chart instead of demand, a decade of keyword-stuffed templates that entity-based ranking now quietly penalizes across every URL they touch. A page-by-page audit walks a sample of URLs, finds them tidy, and files a clean report. The system still stamping out the other 2.9 million pages is misfiring the whole time.
That’s why the enterprise version has to be run at the level of the rule, not the page — because one fix at the template level moves more than a thousand fixes at the page level, and the leverage only exists if you audit where the leverage is. If you’d rather I run it on yours than run it yourself, that’s our SEO audit.