Programmatic SEO is the practice of generating many search landing pages from one template and a structured dataset, usually one page per row, to cover a large set of long-tail queries. It still works in 2026, but only when every row carries facts, functions or answers that the searcher cannot get from the page next to it. Google's scaled content abuse policy applies to mass-produced pages "no matter how it's created," and its AI search guide now says that creating separate content for every fan-out query variation, primarily to manipulate rankings or generative AI responses, violates that same policy.
This guide puts the policy text first, then gives you a unique-value-per-page test you can run on any template, three live examples we checked on October 24, 2026 (including what their sitemaps and canonicals reveal), how AI Overviews and LLMs treat templated pages, a build process with QA gates, and a pruning plan for programs that have already grown too far. All Google documentation quoted here was re-read on October 24, 2026.
Key takeaways
- The method is not the violation. Google targets pages made "for the primary purpose of manipulating search rankings and not helping users," whether written by AI, humans or a template.
- Three policies matter most: scaled content abuse, doorway abuse (city-swap pages that "funnel users to one page") and site reputation abuse (third-party page sets hosted for the host's ranking signals).
- The test is per row, not per template. If changing the modifier does not change the answer, the facts or the task the page completes, that row should not be its own page.
- Restraint is visible in the winners. Zapier lists about 145,000 two-app integration URLs in its sitemaps, well under 1% of the pairs its 9,000+ apps could produce, and 301-redirects reversed pairs to one URL.
- AI engines retrieve, then cite specifics. Google's AI features use the normal index, and only about 38% of AI Overview citations rank in the top 10 for the main query (Ahrefs, 2026). A row-specific fact is citable; boilerplate shared by 10,000 pages is not.
What is programmatic SEO?
Programmatic SEO (often shortened to pSEO) is a production method: you find a query pattern made of a fixed head term and a variable modifier ("[app A] + [app B] integration", "[currency] to [currency]", "cost of living in [city]"), collect a dataset with one row per modifier, and render each row through a shared template. The output is hundreds to millions of URLs that each target one long-tail query.
It differs from editorial SEO in who does the per-page work. In editorial SEO a person researches and writes each page. In programmatic SEO the per-page value has to come from the data, and from logic in the template that changes what the page says when the data changes. That is why the data source decides whether a programmatic project is a useful directory or a pile of near-duplicates. Using AI to draft the copy does not change this: it just makes the per-row text cheaper, which makes the near-duplicate failure cheaper too.
Which Google spam policies apply to programmatic SEO pages?
Three of Google's spam policies for web search (last updated August 28, 2026) cover nearly every way a programmatic project goes wrong. Two more, scraping and thin affiliation, cover the data and monetization side. The opening of the policy page was also widened: spam now includes "attempting to manipulate generative AI responses in Google Search," so the same rules govern AI Overviews and AI Mode.
Scaled content abuse
Google's definition: "Scaled content abuse is when many pages are generated for the primary purpose of manipulating search rankings and not helping users. This abusive practice is typically focused on creating large amounts of unoriginal content that provides little to no value to users, no matter how it's created." Its listed examples include:
- "Using generative AI tools or other similar tools to generate many pages without adding value for users"
- "Scraping feeds, search results, or other content to generate many pages (including through automated transformations like synonymizing, translating, or other obfuscation techniques), where little value is provided to users"
- "Stitching or combining content from different web pages without adding value"
- "Creating multiple sites with the intent of hiding the scaled nature of the content"
- "Creating many pages where the content makes little or no sense to a reader but contains search keywords"
When Google introduced the policy on March 5, 2024, it said the change lets it act "no matter whether content is produced through automation, human efforts, or some combination of human and automated processes." A team of writers filling in a template by hand is held to the same standard as a script.
Doorway abuse
Doorways are the oldest programmatic failure. Google: "Doorway abuse is when sites or pages are created to rank for specific, similar search queries. They lead users to intermediate pages that aren't as useful as the final destination." Two of its examples read like a description of a bad location template: "Having multiple domain names or pages targeted at specific regions or cities that funnel users to one page" and "Creating substantially similar pages that are closer to search results than a clearly defined, browseable hierarchy." The second clause matters for structure: a programmatic set should be a browsable directory a person could navigate, not a flat spray of URLs that only exist as search entry points.
Site reputation abuse
This one bites when the pages are produced by, or for, a third party. In its November 19, 2024 update, Google defined it as "the practice of publishing third-party pages on a site in an attempt to abuse search rankings by taking advantage of the host site's ranking signals," and said this applies "regardless of whether there is first-party involvement or oversight of the content." Partner-run coupon directories, white-label "best [service] in [city]" sections and licensed comparison grids on news or university domains are the programmatic versions. Google added that it also has systems to treat a section that is "independent or starkly different from the main content of the site" as if it were a standalone site, so borrowed authority does not transfer.
Scraping and thin affiliation
If your dataset is someone else's content, the scraping policy applies: "Reproducing content feeds from other sites without providing some type of unique benefit to the user" is a listed example. If the template is mostly merchant copy plus affiliate links, the thin affiliation policy describes it as "cookie-cutter sites or templates with the same or similar content replicated within the same site or across multiple domains or languages." Google lists what good affiliate pages add instead: price information, original reviews, rigorous testing and ratings, category navigation and comparisons.
| Policy | The programmatic pattern that trips it | What passes instead |
|---|---|---|
| Scaled content abuse | One AI-written paragraph per keyword variant, with no row-specific data | Pages whose main content is the row's own data, tool or answer |
| Doorway abuse | "Plumber in [city]" pages with the same text, all routing to one booking form | Location pages with real local inventory, prices, staff or hours, inside a browsable hierarchy |
| Site reputation abuse | A partner's templated coupon or "best X" section on a high-authority host | First-party data sets that match the host's main purpose |
| Scraping | Rendering a public feed or competitor listings with synonyms swapped | Licensed or public data that you join, compute on, or verify |
| Thin affiliation | Merchant descriptions and affiliate links per product | Original testing, price history, comparisons |
Enforcement is ongoing rather than a single event. Google's Search Status Dashboard lists named spam updates in June 2024, December 2024, August 2025, March 2026, June 2026, August 2026 and September 2026 (the last started September 24 and ran for 13 days and 16 hours). Any of these patterns can also lead to a manual action. Google's Manual Actions report documentation lists a "Thin content with little or no added value" action that names doorways, thin affiliate pages and scraped content, and a pure spam action for sites that use "aggressive spam techniques such as scaled content abuse."
Does Google penalize programmatic SEO or AI-generated pages?
No, not as a method. Google's policy wording targets purpose and value, not tooling, and its guidance on generative AI content says generating "many pages without adding value for users may violate" the scaled content abuse policy. The words doing the work are "without adding value." The same page asks you to fact-check all AI-generated content and says that review "also applies to metadata like" titles, meta descriptions, structured data and alt text, which is exactly the text most programmatic projects generate unattended.
The practical risk is that programmatic projects drift toward the patterns the policy describes, because adding one more row is nearly free. Google's helpful content self-assessment names the drift directly: "Are you producing lots of content on many different topics in hopes that some of it might perform well in search results?" and "Are you using extensive automation to produce content on many topics?" Google's John Mueller put the industry reputation more bluntly, in a quote Ahrefs repeats in its programmatic SEO guide: "Programmatic SEO is often a fancy banner for spam."
The unique-value-per-page test: a decision table
Run this test on a sample of rows, not on the template. A template can look great on its best row and be a doorway on its 5,000th. A row should become its own indexable page only if it passes the first three questions and at least most of the rest.
| Question | Pass | Fail |
|---|---|---|
| 1. Does changing the modifier change the answer? | GBP to INR shows a different rate, history and conversion table than GBP to USD | "Best CRM for dentists" and "Best CRM for lawyers" list the same five tools in the same order |
| 2. Is there at least one fact, function or dataset on the page that is specific to this row? | Live rate, local price, review count, supported triggers, inventory | Only the keyword in the H1, title and first sentence changes |
| 3. Would you publish this row if search engines did not exist? | Users would browse to it from your own navigation or tool | It only exists as a search entry point that funnels to one form |
| 4. Is there real demand or a real entity behind the row? | Pair, city or product actually exists and people use it | Combinatorial rows nobody searches or buys ("plumber in [every postcode]") |
| 5. Where did the data come from, and when was it refreshed? | Proprietary, licensed, or public data you transformed, with a visible refresh date | Scraped from a competitor or a search result, never refreshed |
| 6. How similar is the body text to its nearest sibling? | Shared chrome, but the main content differs materially | Main content is near-identical after removing the modifier |
| 7. Does the page sit in a browsable hierarchy? | Reachable from hub and category pages and linked to related rows | Orphaned, or listed only in the XML sitemap |
| 8. Is the third-party share of the page under your editorial control? | First-party data that fits the site's main purpose | A partner's feed hosted to borrow your domain's ranking signals |
Rows that fail question 1 usually belong on one combined page (for example, one "CRM for professional services" page with a filter) rather than as separate URLs. Rows that fail question 4 should never be generated. If you cannot answer question 5, you do not yet have a programmatic project, you have a keyword list.
Real programmatic SEO examples, checked October 2026
The examples below are well-known for a reason, but most guides describe them from memory. We opened each page on October 24, 2026, read the HTML, and checked redirects, canonicals and sitemaps. Traffic figures are third-party estimates and are labeled as such; we could not verify rankings directly.
Zapier: app-to-app integration pages
A page such as /apps/google-sheets/integrations/slack carries pair-specific Zap templates ("Share new Google Sheets rows on Slack", "Add Slack messages to a Google Sheets spreadsheet"), the full trigger and action catalog for both apps, an interactive "choose trigger, choose action" builder, and a pair-specific FAQ. Three details are more instructive than the page itself:
- Reversed pairs are not separate pages. Requesting
/apps/slack/integrations/google-sheetsreturns a 301 redirect to the Google Sheets-first URL. Slack + Sheets and Sheets + Slack would be classic doorway duplicates; Zapier collapses them. - Zapier publishes a tiny fraction of possible pairs. Its two-app sitemap index lists 58 files of 2,500 URLs each, about 145,000 URLs. With 9,000+ apps (Zapier's own figure), the possible pairs run past 40 million, so the sitemap covers well under 1%. The restraint is the strategy.
- Weak spots exist. Several FAQ answers are generic ("Absolutely, you can configure an action..."), and sampled sitemap entries carried 2025 lastmod dates. The page survives on its data and function, not its copy.
Backlinko's January 2026 analysis estimates 590,000+ pages in Zapier's /apps/ folder drawing 610,000+ monthly organic visits; that count includes single-app pages, so it does not conflict with the sitemap figure.
Wise: currency converter pages
The GBP to INR page shows a live mid-market rate, conversion tables in both directions, 30-day and 90-day high, low and average, and a history chart from 48 hours to five years. The FAQ, feature blocks and app promotion are identical across currency pages, which is fine because they are not the main content. The duplication control is the lesson: a URL with an amount parameter such as ?amount=29340 carries a canonical tag pointing back to the plain pair page, so Wise does not create "convert 29,340 GBP to INR" pages, a pattern that still litters currency results elsewhere. Backlinko estimates about 8.5 million currency converter URLs spread across 170 sitemaps.
Nomads.com (formerly Nomad List): city pages
The Lisbon page combines structured data and community input: monthly cost-of-living estimates for different traveler types, average internet speed, safety and healthcare ratings, monthly weather, estimated remote-worker counts, and an overall score built from thousands of member reviews (3,793 for Lisbon on the day we checked). The old nomadlist.com/lisbon URL now resolves to nomads.com/lisbon with a matching canonical, a reminder that a programmatic set can survive a full domain move when redirects are one-to-one.
Smaller sets work too
Programmatic does not have to mean millions. In its September 2026 guide, Ahrefs estimates that Canva's roughly 310 ranking feature pages draw about 13 million monthly visits and QuillBot's roughly 130 AI tool pages about 464,000. These are tools-as-pages: each URL performs a different task, which passes question 1 of the test by design.
| Site | Page pattern | What is unique per row | Duplication control we saw | Scale (source) |
|---|---|---|---|---|
| Zapier | [App] + [App] integrations | Pair templates, trigger/action catalog, builder | 301 for reversed pairs; selective sitemap | ~145,000 pair URLs in sitemap (our check) |
| Wise | [Currency] to [currency] rate | Live rate, tables, 30/90-day stats, history | Amount parameters canonicalized to the pair page | ~8.5M converter URLs (Backlinko estimate) |
| Nomads.com | [City] for digital nomads | Costs, internet speed, safety, reviews | One-to-one redirects from the old domain | Not published |
| Canva, QuillBot | [Feature] or [tool] pages | A working tool per URL | Small, curated set | ~310 and ~130 pages (Ahrefs estimate) |
The counter-example needs no named site: the city-swap service page. Same intro, same three benefits, same testimonials, one booking form, and "[city]" inserted in four places. It fails questions 1, 2 and 3, and it matches Google's doorway example almost word for word.
How do AI Overviews and LLMs treat templated programmatic pages?
They treat them like any other page: retrieve first, then decide which specific passages are worth citing. Google's guide to optimizing for generative AI features says AI Overviews and AI Mode rely "on our core Search ranking systems to retrieve relevant, up-to-date web pages from our Search index," and AI features and your website sets the floor: a page "must be indexed and eligible to be shown in Google Search with a snippet." A programmatic page that is not indexed, which is common for large thin sets, cannot be cited at all.
The same guide contains the sentence every programmatic team should pin up: "While it might be tempting to create separate content for every possible variation of how people might search (for example, by focusing on other queries that people have asked, or fan-out queries), doing so primarily to manipulate rankings or generative AI responses in Google Search violates Google's scaled content abuse spam policy." Generating a page per fan-out sub-query is the 2026 version of a doorway farm.

What the evidence suggests about citation, with the caveat that none of these studies isolates programmatic pages:
- Long-tail retrieval is real. Ahrefs' March 2026 update (863,000 keyword SERPs, about 4 million AI Overview URLs) found that only about 38% of cited URLs rank in the top 10 for the main query, with roughly 31% from positions 11-100 and 31% from beyond the top 100. Ahrefs suggests fan-out queries may explain part of this; Google does not publish them. A precise entity page (one currency pair, one app pair) is the kind of page a narrow sub-query can retrieve.
- Specific titles and slugs correlate with being cited. In Ahrefs' study of 1.4 million ChatGPT prompts (April 2026), cited pages' titles were closer to the prompt (mean cosine similarity 0.602 vs 0.484 for non-cited), and search results with natural-language URL slugs were cited 89.78% of the time vs 81.11% without. Programmatic pages tend to have descriptive titles and slugs by construction; that only helps if the body backs them up.
- Boilerplate gives a model nothing to choose. If 10,000 pages share the same paragraph, no single page is the best source for it. The row's own fact (today's rate, the triggers a specific app pair supports, the local price) is the citable unit, which is why the per-row data matters more for AI answers than the template copy.
- Simple-fact rows face zero-click pressure. When an AI answer can state the fact itself, a page that holds only that fact earns a citation at best. Rows that offer a tool, a comparison or a live dataset give the reader a reason to click through.
Measuring this takes repeated runs, because AI answers are unstable. Across 972 runs of 42 prompt-engine pairs tracked in AI Rank Lab between February 13 and October 22, 2026, 42.9% of pairs flipped between mentioning and not mentioning the tracked brand at least once, and the median overlap of cited domains between consecutive runs was 0.41 (Jaccard). One check that shows your template cited, or missing, proves little. Sample prompts per page type and compare runs over weeks.
Data sources and templates that pass
The data source sets the ceiling for every page in the set. Rank yours honestly before writing a template.
| Data source | Risk | What makes it pass |
|---|---|---|
| Proprietary (your product usage, inventory, pricing, test results) | Lowest | Nobody else can publish it; refresh it on a schedule and show the date |
| User-generated (reviews, ratings, Q&A) | Low to medium | Enough volume per row to be meaningful; moderation; noindex rows below a minimum count |
| Licensed or API data (rates, listings, specs) | Medium | Join it with your own data or computation; competitors may license the same feed |
| Public data (government, open datasets) | Medium | Transform it: compare, rank, chart, calculate; cite the source per page |
| Scraped or AI-generated "facts" | Highest | Use only as a starting point for verification; never as the main content |
Templates that pass tend to share these components:
- A direct answer near the top that changes with the row (the rate, the count, the verdict).
- Conditional blocks: sections that only render when the row has data for them, so sparse rows produce short honest pages instead of padded ones.
- Comparison against siblings ("compared with Porto", "versus the 90-day average") so each page has context that cannot be copied from a single source.
- Visible methodology and a refresh date, kept truthful (see our guide to content freshness and AI citations).
- Links up to the hub, across to related rows, and into your product or tool where it helps the task.
- Structured data that matches what the page shows, for rich results. Google states that structured data "isn't required" for its generative AI features, so treat it as eligibility for rich results, not an AI ranking lever.
How to build programmatic SEO pages step by step
The build is ordinary; the gates are what keep it on the right side of the policy. Do not move to the next step until the gate passes.
- Find the pattern and check intent. Group keywords by head term and modifier, then read the live results for five to ten variants. Gate: the results for different modifiers show different answers. If they all show the same page type with the same content, one page will serve the cluster better than many.
- Build the dataset with provenance. One row per real entity, with source and last-updated columns. Gate: every row has at least one field that is unique to it and verified; drop rows that do not.
- Write the template with conditional logic. Decide which sections render for which data, and what the page says when data is missing. Gate: a reviewer reading three random rows can name what is different about each.
- Pilot by hand. Generate 20 to 50 rows and have a person read every one, including the worst rows by data completeness. Gate: you would publish each one under your brand name.
- Run a similarity check. Crawl the pilot with a near-duplicate detector and compare main content between siblings. Gate: no cluster of pages is near-identical once the modifier is removed; merge any that are.
- Fact-check generated text and metadata. If AI drafts summaries, titles or alt text, sample and verify them, as Google's generative AI guidance requires. Gate: zero factual errors in the sample; if you find one, check the prompt and the source data before scaling.
- Publish in batches and watch indexing. Release a few hundred URLs, submit them in their own sitemap, and watch the Search Console Page indexing report for that sitemap. Gate: most submitted URLs are indexed and earning impressions before you release the next batch.
- Measure by cohort. Track the folder as one unit in Search Console, including the Generative AI performance report, and check whether AI engines cite pages from the set. Gate: the cohort is gaining impressions per page, not just page count.
Where AI Rank Lab fits: its site audit crawls your sitemaps and flags duplicate titles and H1s across pages, exact-duplicate body text, pages under 300 words, orphan pages, and indexability and canonical issues, which covers much of gates 5 and 7. It does not score near-duplicate similarity, so pair it with a crawler that does (below). To check whether templated pages are being cited, AI visibility tracking runs the prompts you choose on ChatGPT, Claude, Gemini, Perplexity, Google AI Overviews and AI Mode and stores every run for comparison.
Indexing and internal linking for thousands of pages
At scale, indexing is the bottleneck, not publishing. Google's crawl budget guide is written for "Large sites (1 million+ unique pages) with content that changes moderately often (once a week)" and "Medium or larger sites (10,000+ unique pages) with very rapidly changing content (daily)," and Google calls those numbers "a rough estimate." A programmatic project can reach either category in a week.
- Sitemaps: "All formats limit a single sitemap to 50MB (uncompressed) or 50,000 URLs" (Google). Use a sitemap index and split by template or cohort, so Search Console shows indexing per set. Google uses
lastmodonly if it is "consistently and verifiably" accurate, so do not set it to the build time on every deploy. - Canonicals and parameters: Decide which URL variants are pages and canonicalize the rest, as Wise does with amount parameters. Redirect reversed or equivalent combinations to one URL, as Zapier does.
- Hierarchy: Build hub pages (by category, region or app) that link to every row and that are useful on their own. This is what turns a set of URLs into the "clearly defined, browseable hierarchy" the doorway policy contrasts with doorways.
- Sibling links: Link each row to its nearest relatives (nearby cities, popular pairs for the same app) using descriptive anchor text. It spreads discovery and gives readers somewhere to go.
- Do not use noindex to save crawl budget. Google's guide says to return "a 404 or 410 status code for permanently removed pages," and notes that noindexed pages are still requested before being dropped. Use noindex for pages users need but search does not, not as a crawl budget tool.
- Watch "Discovered - currently not indexed". Google lists a large share of URLs in that status as a reason to read the crawl budget guide. For a programmatic set it is often the first sign that Google sees the cluster as low value.
Warning signs and how to prune
The warning signs show up in Search Console before they show up in revenue. Review the set by cohort every month:
- The share of submitted URLs that are indexed falls, or new batches stop being indexed at all.
- Impressions per page fall while page count rises (growth in URLs, not in value).
- Large numbers of rows get zero impressions after a fair test period of several months.
- Rows from the same cluster rank for each other's queries (cannibalization).
- A named spam update on the Status Dashboard lines up with a cohort-wide drop.
- A manual action appears in Search Console, either "Thin content with little or no added value" or a pure spam action citing scaled content abuse.
| What you find | Action |
|---|---|
| Row has unique data but thin presentation | Improve the template: add the comparison, chart or tool, keep the URL |
| Several rows give the same answer | Merge into one page and 301-redirect the others to it |
| Row has no real entity or demand | Remove it and return 404 or 410; drop it from the sitemap |
| Row is useful to users but not to searchers (for example, an empty filter state) | Keep it, add noindex, and remove it from sitemaps |
| Data is stale | Refresh the data, update the visible date only when content changed |
| Manual action received | Remove or substantially improve the affected set, then file a reconsideration request |
Pruning feels like losing work, but every row you delete is a row that was diluting the set. Prune by data, not by guesswork: pull impressions and clicks per URL for the cohort, sort ascending, and apply the decision table above to the bottom slice first.
Tools for building and auditing programmatic pages
Disclosure: AI Rank Lab is our product. We list it first because this is our site, and we've kept the same criteria for every tool below.
| Tool | What it does for a programmatic project | Where it is the better choice |
|---|---|---|
| AI Rank Lab | Site audit flags duplicate titles/H1s, exact-duplicate bodies, sub-300-word pages, orphans and canonical issues; tracks whether ChatGPT, Claude, Gemini, Perplexity, AI Overviews and AI Mode cite your pages for the prompts you run | When you need SEO checks and AI citation evidence for the same page set |
| Google Search Console | Page indexing by sitemap, Manual actions, performance and the Generative AI report | Always; it is the only first-party view of indexing and Google AI features |
| Screaming Frog SEO Spider | Near-duplicate detection (minhash, 90% similarity by default, needs post-crawl analysis); free version crawls 500 URLs | Gate 5: measuring how similar sibling pages really are |
| Ahrefs | Keyword pattern research and folder-level tracking, as shown in its own guide | Finding head term and modifier patterns and estimating demand per row |
The bottom line
Programmatic SEO in the AI search era is a data project with a template attached. Google's policies do not care whether a page came from a script, a model or a person; they ask whether many pages were made mainly to rank. The examples that still hold up publish only the rows that have something to say, collapse duplicates with redirects and canonicals, and put the row's own facts at the center of the page, which is also what makes a page worth citing in an AI answer. Build fewer rows, gate every batch, and prune on evidence. For more on how AI changes production at scale, see our overview of AI content creation trends in SEO.
If you want to see which of your templated pages are thin or duplicated, and whether AI engines cite any of them, run an AI Rank Lab site audit. Signup includes 100 free credits, no card required.
Get a free AI ranking consultation
Want your brand to show up when ChatGPT, Gemini and Perplexity answer questions in your market? Tell us about your site and our team will send a personalized strategy.




