Guide · updated July 18, 2026

Programmatic SEO vs. Doorway Pages: How to Survive a SpamBrain Pass

The line between a programmatic catalog that ranks and a doorway that gets deindexed is not scale. Zapier ships tens of thousands of near-identical pages and ranks; a 200-page city grid gets wiped. The difference is three specific signals. Here is exactly where the line sits, and how to check which side you're on.

Why scale is not the trigger

The instinct after every spam update is to assume Google is hunting large page counts. It is not. Search's own guidance draws the line at intent and value, not volume: pages built primarily to rank, that funnel users somewhere else without serving them, are doorways regardless of count. Pages built from a real dataset that answer a real query are fine regardless of count.

The proof is in what ranks. Zapier's per-integration pages, Wise's currency-pair pages, and G2's category pages are all near-duplicate and entity-swap by design, the two signals people assume define a doorway. They rank because the third signal never fires: each record carries unique body content and a unique meta description. The numbers, the descriptions, the specifics differ per record.

The three signals SpamBrain actually stacks

pseolint encodes the bright line as a co-occurrence gate. Its spam/doorway-pattern rule refuses to fire on structural similarity alone, it requires all three of these to land on the same cluster:

  1. Signal 1

    Near-duplicate body

    spam/near-duplicate

    Two sibling pages share most of their non-boilerplate tokens. On its own this is just a template, every catalog on the web trips it. Necessary for a doorway, nowhere near sufficient.

  2. Signal 2

    Entity-swap

    spam/entity-swap

    The pages differ only by a swapped entity, a city, a product, a currency. Still not a doorway: Wise's USD→EUR and USD→GBP pages are entity-swaps of each other and rank fine, because the numbers underneath are real and different.

  3. Signal 3

    Content-quality collapse

    spam/thin-content · content/meta-uniqueness

    The third signal is the one that converts. A thin body (little unique content once template chrome is subtracted) OR an identical meta description across the cluster. Real catalogs have unique per-record bodies and metas; doorways degenerate on at least one. Only when signal 3 joins 1 and 2 does spam/doorway-pattern fire.

This gate is not a guess, it's a calibration finding. An earlier, looser version fired on every catalog pair and produced hundreds of false doorway findings on sites that ship in production and rank. Requiring the content-quality signal is what makes the verdict match reality.

What this looks like in the wild

In a July 2026 pseolint crawl of 20 production programmatic-SEO sites, the signals separated cleanly. Near-duplicate structure was everywhere; full doorway degeneration was not.

40%
near-duplicate clusters
20%
entity-swap
20%
doorway-pattern (all 3)

Read that as: many sites carry the catalog shape (signals 1–2), and a meaningful minority have already crossed into doorway territory by adding the content-quality collapse. The gap between the two is the safest, cheapest place to intervene. Full methodology and per-site results are in the 20-site benchmark.

The self-test: catalog or doorway?

Answer these for one template cluster on your site. Every “yes” below signal 2 moves you toward doorway.

  1. Do sibling pages share most of their body text once nav/footer are removed?

    Necessary but harmless alone, spam/near-duplicate. Every catalog says yes.

  2. Do they differ only by a swapped entity (city, product, name)?

    Still just a catalog, spam/entity-swap. Wise and Zapier both say yes here.

  3. Is the unique per-record body thin once the template is subtracted?

    This is the tipping point, spam/thin-content. A yes here converts the cluster.

  4. Do the pages share an identical meta description?

    The other converter, content/meta-uniqueness. A yes here also converts.

  5. Could a visitor get everything on the page faster somewhere else?

    The human version of the whole test. If yes, the page is a gateway, not a destination.

Yes to the first two only: you have a catalog, safe, but differentiate before scaling. Yes to a third or fourth as well: spam/doorway-pattern will fire, and so will SpamBrain.

How to survive the pass

Ordered by leverage, the first fix defeats all three signals at once.

  1. #1

    Add one verifiable per-record fact to the template

    A real price, a dated statistic, a parsed regulation, an aggregated metric, sourced from data you own or license. It breaks near-duplication, defeats entity-swap, and clears thin-content in a single move. The change most often skipped because it requires owning a dataset; also the one that works.

  2. #2

    Give every record a unique meta description

    Generate the meta from the record's own fields, not a static template string. Cheap, and it removes one of the two content-quality converters outright.

  3. #3

    Raise cross-page lexical variance with real differentiation

    Per-record FAQs, local statistics, expert notes, not synonym swaps, which SpamBrain reads straight through. The goal is genuinely different content, not obfuscated identical content.

  4. #4

    Prune, don't just publish

    noindex or de-publish records that attract no impressions in a defined window. A cluster of dead thin pages drags the whole template's score down; removing them is often a faster recovery than rewriting them.

  5. #5

    Gate it in CI so it can't regress

    Add npx pseolint <url> --ci-threshold concerning to your pipeline. Once a template is clean, this fails the build if a future change pushes it back toward the doorway band, before it ships, not after SpamBrain finds it.

Run the check yourself

Every claim in this guide maps to a rule you can run against your own site right now.

npx pseolint https://your-site.com --sample-size 30 --max-per-template 5

It clusters your URLs into templates, samples each, and returns a per-template verdict with spam/near-duplicate, spam/entity-swap, spam/thin-content, and spam/doorway-pattern broken out, so you see exactly which of the three signals is firing, and on which template.

Frequently asked questions

Are programmatic SEO pages the same as doorway pages?
No. Programmatic SEO generates many pages from a dataset and a shared template, one page per city, integration, or currency pair. That is legitimate when each page carries unique, useful, per-record value. A doorway page is a thin gateway created only to rank, offering the visitor nothing they couldn't get faster elsewhere. The pages can look structurally identical; what separates them is whether the per-record content actually differs and helps.
Does Google penalize a site just for having thousands of similar pages?
Not for the count itself. Zapier's app-integration pages, Wise's currency-converter pages, and G2's category pages are all near-duplicate by design and rank fine, because each record has unique body text and a unique meta description. Scale is not the trigger. Degeneration is. When the per-record content collapses to a keyword swap over identical boilerplate, SpamBrain's scaled-content-abuse policy applies.
What exactly turns a template cluster into a doorway in pseolint?
pseolint requires three signals to co-occur before it calls a cluster a doorway, not one. A pair of pages must be (1) near-duplicate, (2) entity-swap (differing only by a swapped entity like a city or product name), AND (3) show a content-quality failure: thin body OR an identical meta description. Structural similarity alone never converts to a doorway finding, because real catalogs share it too. Only when the per-record content also degenerates does the spam/doorway-pattern rule fire.
How do I know if my programmatic pages are at risk right now?
Run npx pseolint https://your-site.com. It clusters your URLs into templates, samples pages from each, and reports spam/near-duplicate, spam/entity-swap, spam/thin-content, and spam/doorway-pattern with a per-template verdict. If doorway-pattern fires, at least one template is degenerating on all three signals. If only near-duplicate and entity-swap fire, you have a catalog shape, differentiate the body before you scale it further.
What is the single most effective fix?
Add one verifiable, per-record fact to the template that a reader could not get elsewhere, a real price, a dated statistic, a parsed regulation, an aggregated metric. That single change moves more pages out of the doorway band than any other intervention, because it simultaneously breaks near-duplication, defeats the entity-swap signal, and clears the thin-content gate.
Do doorway pages still work in 2026?
No. Since the March 2024 core update folded scaled content abuse into the main spam policy, the enforcement is silent and algorithmic, SpamBrain demotes or deindexes without a manual action, so there is often no warning in Search Console. In a July 2026 pseolint benchmark of 20 production pSEO sites, 20% still tripped the doorway-pattern rule and 40% carried near-duplicate clusters, meaning many are one content-quality slip away from it.

Cite this guide

Published under CC BY 4.0, quote and reuse with attribution to the canonical URL.

Kam, P. (2026). Programmatic SEO vs. doorway pages: how to survive a SpamBrain pass. Ouranos Labs. https://pseolint.dev/research/programmatic-seo-vs-doorway-pages

Find out which side of the line your templates are on.

Run a free audit

Sources