A SaaS team exports a spreadsheet with 4,000 rows, one for every pairing of a job role and a city, and pushes the whole file through a single landing-page template overnight. For six weeks the pages climb. Impressions in Search Console rise, a handful of the city pages reach the first result screen, and the growth chart looks like the case study everyone shares. Then a spam update finishes rolling out, and by the following Monday most of those 4,000 URLs have dropped out of the index. Nothing about the code broke. The template did precisely what it was told to do, and that was the problem.
This is the failure that gives programmatic SEO its bad reputation, and it hides a more useful distinction. The same technique that manufactured those 4,000 dead pages also runs some of the largest, healthiest sites on the web. The line between the two is not the automation. It is whether each generated page earns its place.
What programmatic SEO is, and what it is not #
Programmatic SEO is one template joined to a structured data set, so a single page design produces many URLs, one per row of data. A property site builds a page for every “homes in [neighborhood]” combination. A job board generates one for every “[role] jobs in [city]” pair. A comparison site produces one for every “[tool A] vs [tool B]” match. The method is old and legitimate: large travel, real-estate, and retail sites have run on templates for two decades, because a category page for running shoes and one for hiking boots share a layout while holding different inventory.
What separates the technique from the abuse is not the machinery. It is whether each URL carries something a searcher cannot get from the template alone. A page that swaps a city name into otherwise identical copy is a different object from a page that pulls real, city-specific data into that same layout, even though both came off one production line. The first is duplication with a coat of paint. The second is coverage.
The line Google draws #
In March 2024 Google added “scaled content abuse” to its spam policies. The definition is written around intent, not production method: creating many pages primarily to manipulate search rankings rather than help people, whether those pages are written by humans, generated by tools, or a mix of both. That last clause carries the weight. The reflex is to assume the danger lives in the word “AI.” Google’s own framing puts it in the word “primarily,” so the test is the page’s purpose, not the tool that produced it.
Two older policies sit beside the new one and describe the same failure from different angles. Doorway pages are near-duplicate pages built to funnel visitors from many search variations into one destination. Thin content is a page that adds little beyond what already exists, or that reads as a mass-produced variation of the page before it. One correction worth making: thin is not the same as short. A 200-word page that answers one narrow question completely can be substantial, and a 1,500-word page that pads a single boilerplate with synonyms is thin. Length is not the signal. Unique usefulness is.
What makes a templated page worth indexing #
The practical question is not whether to do programmatic SEO. It is whether each variation holds information a searcher cannot get from the template alone. That single test separates a page that survives an update from one that does not. The value sources below tend to hold up, ordered from strongest signal to weakest.
| Value source in each page | Example | Holds up? |
|---|---|---|
| Proprietary or first-party data | A rent index you calculate per neighborhood | Strong |
| Third-party data made page-specific | Live listing count, average response time per city | Strong |
| Genuinely distinct entities | Different products, real locations with real addresses | Moderate to strong |
| Rewritten intro on a shared body | One fresh paragraph over identical boilerplate | Weak |
| Swapped noun only | A city name dropped into unchanged copy | Fails |
The check a reviewer can run in ten seconds: read two neighboring pages side by side. If a searcher would be served equally well by either one, the pages are competing for the same intent, and the template is producing duplication rather than coverage. Consolidate them into a parent page and move on.
Small scale and large scale need different governance #
Volume changes the shape of the problem. A local plumbing business generating 15 pages, one per suburb it serves, can hand-check every page and write a real paragraph about each area: the older housing stock in one, the well-water systems in another. Governance there is manual and cheap. At 40,000 pages no person reads them all, so quality has to be enforced by the data pipeline rather than by a human at the end of it.
Two failure modes map onto the two scales. Small sets fail on effort: the team builds ten good pages, loses patience, and lets the eleventh through on the tenth’s copy. Large sets fail on coverage gaps: the database holds 40,000 rows, but only 6,000 have enough underlying data to say anything specific, so 34,000 pages ship close to empty and pull the whole domain’s quality signal down with them.
The large-scale fix is a publish gate, a minimum-data threshold below which a row never becomes a page. If a city has fewer than a real, defensible number of listings, the page is not generated, or it folds into a parent. A crawl in Screaming Frog or Sitebulb, or the coverage report in Search Console, will show the symptom after the fact as a wall of URLs marked “Crawled, currently not indexed.” The cheaper place to solve it is before generation, in the query that decides which rows qualify to become pages at all.
How to decide before you build #
Before a single template ships, four questions sort a coverage project from a spam project.
- Real demand. Does each variation match a query people actually run, or are you inventing pages for searches no one performs? Group the pattern, sample ten variations, and confirm they carry genuine search volume.
- Changing data. Does each page draw on a source that shifts in a meaningful way from row to row, not cosmetically?
- Closed answer. Would a visitor who lands on the page find the specific thing they searched for without needing to click to another page?
- Maintenance. Can you keep them current? A page showing “2 available” that is wrong six months later is worse than a page that was never built.
If any answer is no, the honest move is to build fewer pages that go deeper, not more pages that go thin. The sites that lose traffic in a spam update are rarely the ones that published 200 excellent templated pages. They are the ones that published 20,000, because the template made the twenty-thousandth cost the same as the first.
FAQ #
Is programmatic SEO against Google’s rules? No. Google’s guidance treats the technique as neutral. Templated pages are fine when each one carries specific value. The policy targets pages built primarily to manipulate rankings, regardless of how they were produced.
Is programmatic SEO the same as AI content? No. Programmatic SEO is about structure, one template feeding many data-driven URLs, and the words in that template can be written entirely by hand. Google’s scaled content abuse policy is aimed at intent, not at whether a tool was involved.
How many programmatic pages are safe to publish? There is no page-count threshold. A site can rank 100,000 templated pages while another gets demoted at 500. The variable is value per page and the data behind it, not raw volume.
What is the fastest way to tell if my templated pages are thin? Read two neighboring pages next to each other. If swapping which one you are viewing would not change how useful it is to a searcher, they are thin, and consolidation is the repair.
Programmatic SEO is a scale multiplier, and a multiplier works in both directions. Point it at pages that each hold a real answer, and one template can cover an entire market. Point it at boilerplate, and the same template manufactures the exact pattern a spam update was built to catch. The template is never the thing being judged. The page a searcher lands on is.