
Somewhere in your company is a spreadsheet that would make a beautiful page set, and the person who owns it has never read the terms of the platform it came from. The most popular comparison sets on the internet are built that way, on ratings nobody is licensed to copy. Others publish two hundred URLs in a fortnight and then read the results during a core update, which tells them how Google redistributed rather than how their template performed. Both mistakes cost you a quarter, and neither shows up as an error. Which one is your plan closer to?
Your spreadsheet has a few hundred rows that would each make a decent programmatic SEO page. Publishing them is the easy half. Google judges each one against the pages already answering that query, and nobody checks the calendar first. What would day fourteen have to show you?
The part that stays quiet is the calendar. A core update began rolling out on 10 November 2026, the day I read this field, and the median core rollout of the past year and a half runs twelve to fourteen days. That is the same length as the observation window most guides hand you for the first batch, so a read taken on schedule measures your pages and the redistribution around them at once.
Eleven of the eighteen organic pages on the first screen explain what programmatic SEO is. Four build or decide something, three are somebody's experiment. The four that build are not weak: SEOmatic publishes a strategy walkthrough and a fifteen-rule list, RankScience scores when to invest, Rock The Rankings gates the decision on whether your team owns a dataset. None of them checks the search engine's calendar.
Why the programmatic SEO field is eleven definitions deep
What the page is | Slots | What I could resolve |
|---|---|---|
Definitions and explainers | 11 | Shopify (July 2025), Backlinko (April 2024 base), metaflow.life (June 2026) |
Build or decision assets | 4 | Rock The Rankings (Aug 2026), SEOmatic (Jan and May 2026), RankScience (Dec 2025) |
First-person and forum experiments | 3 | a 30-day YouTube test by Jon Law, two forum threads |
That is the field as it served on 10 November 2026, desktop, US English, twenty deep. An AI Overview sits above it, a discussions and forums block fourth, a things to know block twelfth, which fits eleven explainers holding the top half. Freshness is not the gap: the dates shown run from December 2022 to August 2026. What is missing is narrower than a build guide. None of the four attaches an observation window to the calendar, says what indexed actually means, or handles a dataset that is not legally usable.
The dataset: what you can recombine without inventing anything
One test decides everything downstream. A row may become a page only if the page can answer the query with facts that exist in the row, and no two rows produce the same page once the modifier is removed. If the value has to be written by a model rather than read from the row, you have a content brief with a loop around it, not a dataset.
Class | What the row holds | Source | License position |
|---|---|---|---|
First-party data | Prices, stock, specs, measured outcomes | Your database or CRM | Owned |
Public open data | Geography, population, administrative facts | data.gov, agency portals | Open license per dataset, not per portal |
Open encyclopedic data | Entity facts, aliases, classifications | Wikidata | CC0 for structured namespaces |
Open geodata | Coordinates, street and boundary geometry | OpenStreetMap | ODbL with share-alike, so a set reproducing the database carries obligations |
Public package metadata | Names, versions, licenses, download counts | npm, GitHub REST API | Registry terms, attribution, 5,000 requests per hour authenticated on GitHub |
OpenStreetMap is the row people get wrong: ODbL is not a free-for-all, and a set reproducing the database is a derivative database.
Where the license decides before the template does
The most common pattern here is the competitor comparison page, one URL per tool pair, built from review-platform ratings that are contractually closed. G2's terms prohibit agreeing to "access, collect, copy, scrape, harvest, cache, index, store, archive, or otherwise extract any content or data from the Site, including user reviews, reviewer identities or metadata, ratings". The terms covering Capterra, Software Advice and GetApp carry the same prohibition, and on 29 January 2026 G2 agreed to acquire Capterra, Software Advice and GetApp from Gartner, with the deal expected to close in Q1 2026, so the three largest review corpora are heading to one contract.
That fails legally before it fails editorially, and it kills a set that would pass every quality test. Search results and competitor indexes fail twice: against the source's terms, and as an example in Google's own scaled content abuse policy. Group the modifier list first; keyword clustering is that exercise.
One field is not optional: a date that says when the fact was true, printed on the page. A price with no date decays into a wrong page, and Google's people-first criteria ask whether a page is accurate, not whether it was accurate once.
The template: which programmatic SEO blocks must differ per URL
Every guide in this field eventually gives you a percentage. One agency publishes 30 percent unique content relative to nearest neighbours as its own internal standard. Google publishes none, and the scaled content abuse policy contains no page count, no word count and no uniqueness threshold, so a guide stating one as Google's rule invented the number.
What Google does publish is one line of its people-first guidance: "Does the content provide substantial value when compared to other pages in search results?" That compares your page against the pages already answering the query, not against your other rows. A set can be internally differentiated and still lose every query, because each page is thinner than the page it displaces.
So the template is not a layout. It is a list of blocks whose content source must be a different column.
Block | What it must contain | Why it cannot be shared |
|---|---|---|
H1 and title | The modifier and the specific fact | It is the page's only promise |
Answer block, first hundred words | The direct answer, read from the row | This block gets quoted by search engines and AI overviews; a template sentence here is the no-added-value example |
Primary data table | Row values, units, a date | Removing the modifier must still leave a page you can tell apart |
Decision block | What this row means against its two nearest neighbours | The internal differentiation a percentage cannot deliver |
Local element | A local price, rule or model-specific limit | The reason the page exists at all |
Data-as-of line | Date plus source, printed | Accuracy decays, and this is the visible contract |

Worked through on a first-party dataset with six columns: mode, max_payload_kg, typical_transit_days, airports_served, rate_valid_from, rate_currency. One row per mode and corridor.
- H1 and title reads mode and corridor: "Air freight, Frankfurt to Chicago", not "Air freight shipping solutions".
- Answer block reads typical_transit_days and max_payload_kg in two sentences.
- Primary table reads every numeric column, with units.
- Decision block reads the two nearest rows and says how this corridor differs.
- Local element reads airports_served, which exists for this corridor and nowhere else.
- Data-as-of line reads rate_valid_from and prints it.
If you cannot name the column a block reads from, that block is filler, and filler at scale is what the policy describes. That holds for any stack, and no stack fixes a thin dataset, so settle the two decisions above before comparing programmatic SEO tools.
The block everyone treats as decoration but Google reads as a signal is the hierarchy. Its doorway abuse definition names "creating substantially similar pages that are closer to search results than a clearly defined, browseable hierarchy". Ship a hub, a facet page above the rows, and row pages reachable from the facet rather than only from the sitemap.
The publish ramp: how many URLs, and which fourteen days
SEOmatic already publishes a cadence, so I will not pretend to invent one: twenty to thirty pages, two weeks, check indexing, then fifty, then a hundred monitored weekly, then two hundred and up once the earlier batches held. Its failure trigger is right: if the first batch of twenty takes more than four weeks to index, diagnose before publishing more.
What that cadence does not have is a date on it. Every ramp I read treats the calendar as empty, and Google's calendar is published.
Update | Start | Duration |
|---|---|---|
November 2026 core update | 10 Nov 2026 | rolling out when read |
September 2026 spam update | 24 Sep 2026 | 13 days, 16 hours |
May 2026 core update | 21 May 2026 | 11 days, 21 hours |
March 2026 core update | 27 Mar 2026 | 12 days, 4 hours |
February 2026 Discover update | 5 Feb 2026 | 21 days, 17 hours |
Two 2025 core updates sit behind it: December 2025 ran 18 days 2 hours, March 2025 ran 13 days 21 hours. Read the core durations together and the median lands between 12 and 14 days, which is arithmetic on published numbers rather than a Google statement. It also makes the fourteen-day window awkward, since fourteen days is the length of a typical rollout.
Which gives the rule this field is missing. Do not open an observation window inside a core update's rollout. A read started during one cannot separate your set's performance from the update's redistribution, so you will spend the next month fixing a template that was never the problem. The fourteen days is my number, chosen to match the shortest rollouts and fit a two-week cycle.
Stage | URLs | Gate before the next stage | What the gate reads |
|---|---|---|---|
0 | 20 to 30 planned | No core update in rollout, last one closed | The Search Status Dashboard, by date |
1 | 20 to 30 | 14 days after the batch is crawled or reported | Share in "Crawled - currently not indexed" against "Discovered - currently not indexed" |
2 | 50 | 14 days, clean calendar | Indexed share holds, impression data exists |
3 | 100 | 14 days, clean calendar | Impressions per group, not per URL |
4 and up | 200+ | 14 days, clean calendar | Whether any group earns, plus the prune list |

Why twenty to thirty first, and not five hundred? Not crawl budget: Google scopes that documentation to sites with a million or more unique pages. The first batch tests the template, and twenty to thirty URLs show whether it survives the index while staying cheap to rewrite. Before any of it, the baseline has to be clean, and the technical SEO comparison in our tool guide is where that crawl belongs.
What the day-14 read can and cannot tell you
Signal in Page Indexing | What it means | What it rules in, and rules out |
|---|---|---|
"Discovered - currently not indexed" dominates | Google knows the URLs, has not fetched them | A discovery problem; rules out a quality verdict, because nothing was read |
"Crawled - currently not indexed" dominates | Google read the pages and declined them | Thin value or a site-level quality problem; twenty pages cannot separate the two |
"Duplicate, Google chose different canonical than user" | The set competes with itself | A template or canonical defect, so stop the ramp |
Indexed share high, impressions near zero | Eligible and not chosen | A demand problem, or a competition problem |
Impressions exist, clicks near zero | Title and snippet are the problem | Fix the title template, not the body |
What day fourteen cannot tell you, said plainly because almost nobody says it: whether the set will earn. Two weeks judges indexing and template health, and it is far too short a window to judge ranking. Earning is a 90-day read belonging to the group rather than the URL. Search Console compounds this by returning finalized data by default, with fresh data as an opt-in and a warning that recent rows may be incomplete.
The four failure modes
Failure mode | What it looks like | Where it comes from |
|---|---|---|
Thin values | Row blocks that read from no column; the three-page test fails | Google's generative AI example in the scaled content abuse policy |
Orphaned groups | No facet above the rows, only the sitemap links them | Doorway abuse: "closer to search results than a clearly defined, browseable hierarchy" |
Duplicate canonicals | "Duplicate, Google chose different canonical than user" at any scale | The status name in Page Indexing |
Unlinked sets | A set you cannot walk, with links added after launch | The template, not the content |
Thin values has a case worth naming: a row with no values does not get a URL. Not a placeholder, not a check-back-soon line, not a template wrapped around an empty record. An empty row published as a page is a thin page with extra steps. The test behind that row is SEOmatic's, applied to data rather than prose: open three pages, remove the modifier from each, and see whether what remains tells them apart.
When programmatic SEO is the wrong answer
RankScience owns this decision and gives you a defensible score: 0 to 2 points walk away, 3 points pilot 50 to 100 pages, 4 to 5 invest. I will not re-derive that framework or dress it up as a discovery. What it does not answer is which datasets must never become pages, and the reason is usually legal before it is editorial.
Dataset | Why it cannot become pages | What to do instead |
|---|---|---|
Ratings from G2, Capterra, Software Advice or GetApp | Extraction is prohibited in the terms, and in January 2026 one company agreed to buy the corpora | License it, measure it yourself, or drop the set |
Search results and competitor indexes | Prohibited by the source and named as a spam example by Google | Build on your own measurements |
Person-level records | Privacy obligations a shared template cannot satisfy | Aggregate until nobody is identifiable |
Facts you cannot refresh | The page decays into a wrong page | One page with a dated table, refreshed |
Rows differing only by a synonym | One page in five costumes | One page with five subheadings |
There is a quieter reason a set should stay small. If the answer is one paragraph, you need one page. Below roughly twenty rows I would ship a single URL with a table rather than twenty. That is a judgment, not a measured threshold.
What to measure, and against what
Measure the group, not the URL, and decide the metric before you publish. The second half is not my line: SEOmatic's fifteenth rule is to define success metrics before publishing, and it is the rule everyone skips because it requires a decision.
Metric | Level | When | The question it answers |
|---|---|---|---|
Indexed share of the batch | Group | Day 14 | Did the template get into the index |
Crawled-not-indexed share | Group | Day 14 | Is the content declined after it was read |
Impressions per group | Group | Day 28 to 90 | Is the group eligible and being chosen |
Pages with zero impressions | Group | Day 90 | Which rows to prune |
Revenue or conversions per group | Group | Quarter | Is the group earning |
A per-URL dashboard cannot answer any of those, because one row in a set of two hundred has neither the volume nor the history to be judged alone. A group of twenty pages sharing a template, a modifier family and a launch date is a unit worth analyzing.
One agency's read of 12.3 million programmatic pages, method not published, across nine sites with domain ratings between 89 and 94 found 96.7 percent of pages at or below 100 visits a month, 28.8 percent at exactly zero, and 0.3 percent above 1,000. Even discounted, roughly 3.5 million of those pages get nothing.
The ceiling above that has moved. Seer Interactive reported a study of 3,119 search terms across 42 organizations and 25 million organic impressions, in which organic click-through fell from 1.76 percent to 0.61 percent when an AI Overview appeared, and sat at 0.70 percent when the page was cited against 0.52 percent when it was not. I read that through a secondary write-up, so treat the decimals as reported. The mechanism survives the caveat: a long-tail set aims at the low-volume queries where those overviews appear most, so the per-page ceiling falls as the page count rises.
This is where Allable earns its place in the build rather than the pitch: Search Console, the keyword database and the publishing pipeline sit in one project, so the day-14 group read is a question rather than a spreadsheet rebuild. It does not make a bad dataset good. It makes the read cheap enough that you take it. A group that has not earned in 90 days is not waiting its turn, though: retiring it is a website content strategy question, the prune list comes from a content audit, and getting the surviving pages cited rather than indexed is generative engine optimization services territory.
Frequently Asked Questions
How many pages should the first programmatic batch have?
Twenty to thirty, and not because of crawl budget. Google scopes crawl budget guidance to sites with a million or more unique pages. The first batch tests your template.
Is there a minimum percentage of unique content per page?
Not from Google. The scaled content abuse policy contains no page count, no word count and no uniqueness threshold. It contains "substantial value when compared to other pages in search results", which is a block-level test against the pages already answering that query.
Can I build the set from G2 or Capterra data?
No. Both sets of terms prohibit extraction, and in January 2026 G2 agreed to buy Capterra, Software Advice and GetApp from Gartner, so the three largest review corpora are heading to one contract.
Does programmatic SEO still work in 2026?
Yes, on the same conditions it always had. A set built on data you own, with blocks that each read from a column, published on a calendar you checked, can rank. The 96.7 percent figure describes the average set, and the average set was never built this way.
How long before a programmatic set ranks?
Day fourteen answers whether it is indexed and whether the template is healthy. Earning is a 90-day read, and it depends on the competition for each modifier, not only on your template.
The Order I Would Build It In
If I were starting Monday: pick a dataset you own or can license, and print its date column in the template. Group the modifiers before you write anything. Write the template so every row block names a column. Ship twenty to thirty URLs in a clean calendar week. Read Page Indexing on day fourteen, and prune before you scale.
The programmatic SEO tools question follows from that order rather than leading it. Four layers, and only the last is a purchase.
Layer | What it has to do | Options that exist |
|---|---|---|
Row store | Hold one row per URL, queryable by column | A database, Google Sheets, Airtable |
Template layer | Render one page per row and read named columns | Next.js, Astro, Hugo, or a CMS with programmable templates such as Payload |
Publisher | Write clean slugs, canonicals and the data-as-of line | The framework's build step, or the CMS API |
Monitoring | Report by URL group, not by URL | Search Console, plus a crawler for the pre-launch check |
A publishing tool decides how fast the set goes out, and the decisions that decide whether it survives are made before any tool is chosen. The tool cannot rescue a thin dataset or a shared answer block.

Run this order in one project
Allable runs that order in one project: the dataset and keyword grouping, the template and the publish, and the group read in the same conversation. Plans start at €99 per month after a 7-day trial, which needs a card and becomes a paid plan on day seven.


