Programmatic SEO, and the Two Ways It Quietly Fails
Programmatic SEO fails on policy or on target choice. Here's Google's actual wording on generated pages, plus data on the brand queries templates keep hitting.

Programmatic SEO fails in two places and only one of them gets discussed. The one everybody talks about is Google's spam policy. The one nobody talks about is that a huge fraction of the queries a template naturally produces are ones somebody else's brand will always win.
I checked the second one against actual results pages, and it's worse than I expected.
Short version. Generating pages at scale is not against any policy, and Google's own wording makes that clear if you read it rather than the summaries of it. What gets you in trouble is generating pages with nothing in them, which is a content problem rather than a method problem. The failure that happens far more often, and silently, is that your template targets query patterns where the answer is a brand's own website, so the pages get built, get indexed, and sit at position nine forever. Below is the policy language quoted in full, the brand-query data from thirteen live results pages, and a template audit you can run before writing any code.
What Google Actually Wrote About Generated Pages
Two definitions matter and both are short. Loaded from the spam policies page on 28 July 2026.
Doorway abuse first. "Doorway abuse is when sites or pages are created to rank for specific, similar search queries." The examples include "Having multiple websites with slight variations to the URL and home page to maximize their reach for any specific query" and "Generating pages to funnel visitors into the actual usable or relevant portion of a site."
Then scaled content abuse. "Scaled content abuse is when many pages are generated for the primary purpose of manipulating search rankings and not helping users." The example that names the method is "Using generative AI tools or other similar tools to generate many pages without adding value for users."
Read the doorway definition literally and it's alarming, because "created to rank for specific, similar search queries" is a description of every programmatic page ever built. The second example is what narrows it. A doorway is a page that exists to catch a query and then push you somewhere else, adding nothing itself. If your generated page is the destination and it answers the query, it isn't the thing being described.
The scaled content definition is narrower still, and the qualifiers do all the work. Many pages, primary purpose of manipulating rankings, without adding value. All three have to be true.
Neither of the two biggest pages ranking for programmatic SEO quotes either definition. One paraphrases the general risk. The other mentions spam policies in a single sentence about penalties. Both are decent articles otherwise. The exact wording is just absent from a conversation that's entirely about the exact wording.
The Template That Targets Somebody Else's Brand
Now the failure that policy discussions never reach.
Programmatic templates cluster around a handful of shapes. Best X for Y. X alternatives. X versus Y. X pricing. X review. Three of those five patterns produce queries containing a brand name, and brand queries behave differently from every other kind.
I pulled thirteen brand-containing queries from my cached results in July 2026 and counted how many of the visible organic slots the brand's own domain occupied.
| Query | Visible results | Slots held by the brand | Who holds position one |
|---|---|---|---|
| hubspot automation | 6 | 5 | HubSpot |
| zoho marketing | 7 | 5 | Zoho |
| zapier blog | 7 | 4 | Zapier |
| writely ai | 10 | 3 | The brand |
| sudowrite pricing | 9 | 3 | The brand |
| activecampaign crm | 8 | 3 | ActiveCampaign |
| n8n linkedin | 8 | 2 | LinkedIn itself |
| sudowrite ai | 7 | 1 | Sudowrite |
| semrush ai | 5 | 1 | Semrush |
| hyperwrite ai | 6 | 1 | HyperWrite |
| write sonic | 5 | 1 | Writesonic |
| seowriting ai | 7 | 1 | The brand |
| airbnb automated | 8 | 1 | A YouTube video |
The brand's own property holds position one in eleven of the thirteen. On three of them it holds four or five of the visible slots, which means the results page is mostly the company talking about itself and there are two or three positions left for everyone else combined.
That's not a competitive market you can win with a better template. It's a results page where the searcher's intent is to reach a specific website and the search engine is correctly sending them there.
Difficulty Scores Make It Worse
Here's the trap closing.
Keyword tools score these queries as easy, because difficulty models look at backlink profiles and page authority rather than at whether the query has an obvious destination. In my pool of 2,919 keywords for this niche, 341 contained a brand name, carrying about 42,520 monthly searches between them. Of those, 103 had a competition index under 30, which reads as low-hanging, and they account for roughly 32,090 of that volume.
The most extreme one in the set was a query combining a well-known writing brand with a generic tool phrase. Fourteen thousand eight hundred searches a month. Competition index of two.
Two. That number will make anyone with a keyword tool reach for a template.
And I'd argue it's unwinnable, because the person typing it wants that company's page and there's no version of your page that serves them better. The tell, whenever I run one of these keyword expansions now, is a target list where the volume looks fantastic and every second row has a company name in it. Brand-navigation queries are the most consistently misleading thing my scans produce, and the difficulty column is what makes them convincing.
The fix is boring. Filter brand terms out of the pool before you plan anything, and if you keep any, keep the comparison ones where a genuinely neutral page has a reason to exist, and expect to fight for position three rather than one.
Crawl Budget Is Probably Not Your Problem
This gets raised constantly in programmatic discussions and for most people it's a distraction.
Google's own guidance on managing crawl budget states who it's for, which is "Large sites (1 million+ unique pages)" or "Medium or larger sites (10,000+ unique pages) with very rapidly changing content (daily)." If you're generating four hundred pages, you are not in either bucket and crawl budget is not what's holding you back.
What is relevant from that same document is this sentence. "For Google Search, not every page that is crawled will necessarily be indexed. After crawling, each page must be evaluated, consolidated, and assessed to determine its suitability for the index."
Evaluated, consolidated, assessed. Three separate gates after the crawl, and the consolidation one is the one that quietly eats programmatic sets, because near-duplicate pages get folded together rather than ranked separately. The same guidance says to "Eliminate duplicate content to focus crawling on unique content rather than unique URLs", and the phrase unique content rather than unique URLs is the whole programmatic problem in six words.
For scale context, the Ahrefs post on this topic cites Nomadlist at 25,873 location pages, Webflow at 31,516 template pages and Zapier at 800,632 app pages. Those are their figures rather than mine and I haven't verified them. What they suggest is that the successful examples are operating at a scale where the underlying data genuinely differs page to page, which is rather the point.
A Template Audit, Before You Write Any Code
Five questions. I run these on any pattern before building, and most patterns fail one.
| Check | Pass looks like | Fail looks like |
|---|---|---|
| Does each page have data that differs materially? | A real number, a real listing, a real photo per page | The same paragraph with a variable swapped |
| Does the target query have a brand in it? | No brand, or a neutral comparison | The brand's own site is the obvious answer |
| Is the page the destination or a hop? | The visitor's need ends here | It exists to route them to your product page |
| Would a person choose to read one of these? | Yes, at least for the specific one they landed on | Only a crawler would |
| Can you tell two of your own pages apart? | Yes, immediately | You have to check the URL |
The last one is my favourite because it's the fastest. Open two pages from your own set side by side and see if you can identify which is which without looking at the heading. If you can't, neither can the consolidation step.
Where It Genuinely Works
I don't want this to read as a case against the method. The method is fine and the examples above are real businesses.
It works when you have a dataset that isn't available elsewhere in that shape, and where each row answers a question somebody actually types. Currency conversions. Job listings by city. Product specifications. Availability. Anything where the value of the page is the data rather than the prose around it.
It works badly when the dataset is your own imagination and the pages are essays generated from a list of topics. That's the version that trips the scaled content wording, and it's also the version that fails commercially even when nothing trips at all, because there was never a reason for the pages to exist.
The technical ceilings on the automation side, meaning what you can and can't push through the search APIs, are documented in SEO automation and the limits built into the APIs. If your pages are indexed and simply not ranking, that's a different diagnosis, and the four states a page can be in are laid out in how to get your website at the top of Google.
Questions That Come Up
Is programmatic SEO against Google's guidelines? No. Generating pages isn't the offence. Generating many pages without adding value, primarily to manipulate rankings, is.
How many pages is too many? There's no number in any policy. The qualifiers are about value and purpose, not volume.
Why aren't my generated pages indexed? Most likely consolidation, meaning Google decided several of them are the same page. Check whether you can tell two of them apart.
Should I use AI to write the pages? The policy language names generative tools specifically, in the context of adding no value. A model writing the prose around genuinely distinct data is a different situation than a model inventing the data. Where the tooling helps and where it doesn't is on the writing tools pillar.
Is it worth doing at small scale? Under a few hundred pages you're doing normal SEO with a build script, which is fine, and the platform side of automating that is a separate purchase decision.
The Uncomfortable Bit
When a programmatic set doesn't rank, my strong suspicion is that the post-mortem almost never lands on the code.
It lands on the target list. Rows chosen because a tool said the difficulty was low, on queries where the searcher wanted somebody else's homepage, or where forty other sites had already generated the identical page from the identical public dataset. The template can work perfectly and still point at nothing.
Which is why I'd spend longer on the query list than on the build. The query list is the part no tutorial covers, because it's tedious, specific to your data, and doesn't screenshot well.


