What programmatic SEO actually is (in one paragraph)
Programmatic SEO is the practice of generating large numbers of high-quality landing pages from a structured dataset and a small number of templates, then targeting the long tail of search demand at scale. The discipline is older than people think — Yelp, TripAdvisor, Zillow, G2, and Wikipedia are all programmatic SEO sites at their core. What's new in 2026 is that LLMs have made the underlying data enrichment and per-page customization step radically cheaper, which has caused both an explosion in good programmatic SEO and a much larger explosion in bad programmatic SEO that gets deindexed.
The single failure mode that defines whether a programmatic build succeeds or fails is per-page substance. A site can have 50,000 indexed URLs and earn meaningful traffic, or 50,000 URLs and earn nothing — the variable is whether each page actually contains something a real user searching that specific query would value. Everything in this playbook exists to enforce that constraint.
Our own site as the case study: 3,949 URLs across 26 sub-sitemaps
We don't write theoretical programmatic SEO content. The site you're reading is a programmatic SEO build that runs the playbook end to end — and we publish the sitemap so you can verify it.
Live data: sitemap.xml. Pruned-pages count from our internal indexation report.
The clusters break down roughly as follows — and the cluster taxonomy itself is the playbook. Each cluster targets a different search intent, uses a different template, and is monitored separately so we can deindex underperforming clusters without losing the rest.
| Sub-sitemap | Approx URLs | Intent cluster |
|---|---|---|
| sitemap-best.xml | 835 | Comparison / 'best of' intent |
| sitemap-canada-city-industry.xml | 550 | Local × industry intent (national) |
| sitemap-services.xml + service-canada-city.xml | 180+ | Service × geo intent |
| sitemap-legal-cities.xml | 96 | City × legal practice area |
| sitemap-health-cities.xml | 60 | City × healthcare practice |
| sitemap-glossary.xml | 300+ | Definitional / 'what is' intent |
| sitemap-answers.xml | 120+ | AEO / direct-answer intent |
| sitemap-comparisons.xml | 50+ | Vendor comparison intent |
| sitemap-research.xml | 32 | Original research / link bait |
| sitemap-static.xml | 80+ | Hand-written hub & service pages |
Three of those clusters (best, canada-city-industry, legal-cities) account for roughly 1,500 of the 3,949 URLs and drive a disproportionate share of long-tail capture. Three other clusters (research, comparisons, answers) are smaller but produce most of the AEO citations and inbound links. The methodology below is what determined that mix.
The 7-step programmatic SEO playbook we run on every engagement
Before a single page is generated we publish a written intent map: every cluster has a defined search intent, an example query, an SERP archetype, and a defended reason it will rank.
Real data — public records, scraped + cleaned third-party data, our own observations, or LLM-enriched primary research. The dataset is the moat. Without it the build fails.
One template per intent type. Templates are not 'the page swapped per row' — they're the structural skeleton plus the per-entity slots that produce real differentiation.
Every page passes a per-cluster quality gate before it can be added to the sitemap. Pages that fail the gate are flagged but not published — the build process refuses.
Hub pages link down to clusters; clusters interlink horizontally; long-tail pages link up to hubs. Three-layer architecture so PageRank actually flows.
Hub schema, cluster schema, per-entity schema. The schema graph is what allows Google and LLMs to disambiguate near-similar pages.
Every cluster has a Search Console saved view. Underperforming clusters get rewritten, deindexed, or consolidated quarterly. Programmatic SEO is a living system, not a launch event.
The data model: how we structure entities for programmatic generation
The single most useful framing we've found is that every programmatic page should map to one entity in a graph. Cities, industries, services, schema types, comparison-target tools, glossary terms — each is an entity with named attributes, related entities, and stable identifiers.
On this site, the data model is roughly:
- City entityName, province, population, market characteristics, neighborhoods, top industries, GBP density, our written market commentary.
- Industry entityName, search-volume signal, key sub-segments, regulatory notes, distinctive SEO challenges, named tactics that work.
- Service entityName, scope of work, deliverables, pricing band, ideal-client archetype, related services.
- Schema-type entityName, schema.org URL, recommended properties, common implementation mistakes, validator behavior.
- Glossary-term entityTerm, plain-English definition, technical definition, related terms, named examples.
- Comparison-target entity (tools/agencies)Name, category, named strengths, named gaps, pricing posture, ideal use case, our verdict.
A page like /canada/toronto/seo-for-dental-practices is the join of three entities: City × Industry × Service. Each contributes its own attributes to the rendered page. Because each entity carries genuinely distinct content, the joined page is genuinely distinct — which is the whole quality bar.
Templates: the difference between thin and durable
The most common programmatic SEO mistake we see in audits is treating templates as Mad Libs — one paragraph of body copy with three nouns swapped per page. That pattern produces tens of thousands of near-duplicate pages and gets the entire cluster deindexed by Google's site-quality systems within two to three quarters.
A durable template is a structural skeleton with per-entity slots that produce real, asymmetric differentiation between pages. The skeleton is shared. The content under each H2 is genuinely different per entity because it pulls from genuinely different per-entity attributes.
A 200-page programmatic site of dense per-entity content beats a 5,000-page site of swap-the-variable boilerplate every time. Page count is a vanity metric. Per-page substance is the only metric that matters.
The test we apply to every template before it ships: print two random rendered pages side by side. If a senior SEO can't tell within five seconds why each page deserves to exist independently, the template fails and gets rewritten. Most of the templated 'SEO content' shipped in 2024 and 2025 fails this test trivially.
Indexation strategy: why most programmatic sites get pruned
Google does not index every URL it discovers. On a 50,000-page programmatic site, indexation rates of 30–60% are common, and the unindexed pages are usually the lowest-quality cluster. The mistake is treating low indexation as a crawler problem; it's nearly always a quality-signal problem.
Our default indexation strategy on every programmatic engagement:
- Index every page that can defend itselfPages that pass the quality gate ship indexable, in the sitemap, with a self-canonical.
- Noindex (don't 404) borderline pagesCluster pages that exist for completeness but don't yet have substance — noindex,follow with a planned content upgrade. Removes them from quality assessment without dropping internal-link equity.
- 404 obvious zero-value pagesPages whose existence is harder to defend than not — 404 with a 410 if the URL has been seen by Google. The sitemap-pruned count on this site is 1,338. Most are deliberate.
- Quarterly consolidation reviewCannibalization audit per cluster. Two pages competing for the same query get consolidated to the stronger URL with a 301.
- Search Console saved views per clusterIndexation, impressions, CTR, average position — tracked separately for each programmatic cluster so deteriorating clusters get found in week one, not quarter four.
The asymmetric trade is this: removing a weak page is nearly always a net win for the cluster's overall ranking. A small reduction in 'reach' is dramatically outweighed by the quality-signal lift to the surviving pages. Most agencies don't do this because it's psychologically uncomfortable to delete pages they billed for. We do it because it's how programmatic SEO actually works.
The quality gate: 12 rules every programmatic page must pass
A programmatic page can ship to the production sitemap on this site only if it passes every rule below. Pages that fail are flagged in the build output and either rewritten or held back. This list is roughly the most useful artifact this guide will produce for you — copy it, adapt it, enforce it in CI.
- 1. Unique H1 derived from real entity attributesNot 'SEO for {city}' but a specific noun phrase that exists nowhere else on the site.
- 2. Self-canonical with a stable, lowercased URLNo trailing-slash inconsistency, no UTM in canonical, no parameterized variants competing.
- 3. ≥ 700 words of unique-per-page contentNot 700 words of swapped boilerplate — 700 words drawn from genuinely per-entity data.
- 4. ≥ 3 entity-specific data points above the foldLocal market data, named competitors, regulatory notes — visible in the first viewport.
- 5. Hub up-link + ≥ 5 sibling linksInternal linking that survives Google's render. No JavaScript-only links to programmatic pages.
- 6. JSON-LD schema appropriate to the page typeLocalBusiness, Service, Product, ItemList, FAQPage — whichever fits. Validated, no errors.
- 7. Image with descriptive alt + width/heightNo layout shift, no decorative-only stock photos.
- 8. Title + meta description specific to the entityNot duplicated against any other URL on the site, length within bounds.
- 9. ≥ 1 outbound citation to an authoritative sourceGovernment data, industry body, primary research. Citations earn citations.
- 10. Page passes Core Web Vitals on the production templateLCP < 2.5s, CLS < 0.1, INP < 200ms. Tested on the actual template before scaling.
- 11. Last-updated date present and honestEither the dateModified is real or the page is being misrepresented. Lying about freshness is detected.
- 12. Defensible reason to exist, in writingEach cluster has a one-paragraph rationale. If we can't write the rationale, we don't ship the cluster.
Anti-patterns we refuse to ship
The programmatic SEO patterns below produce short-term traffic spikes and predictable medium-term collapses. We've audited dozens of post-collapse sites and the failure modes are remarkably consistent.
One page template with the city name token-replaced. Identical content otherwise. Highest deindex rate in our audits.
Pages generated entirely by LLM with no per-entity data or human review. Detection rate is rising fast and the failure is binary.
10,000 URLs in the sitemap, no hub pages link to them. Crawled, ignored, eventually dropped.
Schema copy-pasted from a generator with required fields wrong. Validator passes; Google's quality systems penalize.
AggregateRating with no real reviews. Fastest-acting manual penalty we've seen. Don't.
Single-pass machine-translated pages without human review. Both Google and users detect the seams immediately.
Measuring success: the four metrics that matter
A programmatic SEO build produces a lot of dashboards. Most of them are vanity. The four metrics we report on monthly for every programmatic engagement:
| Metric | What it measures | Healthy band |
|---|---|---|
| Indexed-URL ratio | Indexed URLs / submitted URLs in Search Console | ≥ 70% for high-quality builds |
| Cluster-level CTR | Avg CTR by cluster, not site-wide | ≥ 2.0% per cluster, with outliers investigated |
| Avg position trend | Rolling 90-day average position per cluster | Trending down (toward 1) quarter over quarter |
| Earned citations / month | External links + LLM citations to programmatic pages | Compounding, not flat |
If the indexed-URL ratio is below 50%, the cluster needs pruning. If cluster-level CTR is below 1%, the title and meta need rewriting. If average position is flat, the templates need depth, not the dataset more rows. The trap most operators fall into is responding to soft metrics by adding pages; the actual fix is almost always to deepen the existing pages.
The honest summary
Programmatic SEO done well is one of the highest-leverage tactics in modern SEO. Done badly it's the fastest path to a deindexation event we know of. The difference is per-page substance, enforced by a quality gate and a willingness to prune. The site you're reading runs the playbook end to end — 3,949 URLs in production, 1,338 deliberately pruned along the way, the entire cluster taxonomy public.
If you're considering commissioning a programmatic build, bring your dataset and your intent map. We'll review the architecture honestly and tell you whether programmatic is the right tool for your situation, before you invest in tens of thousands of URLs you'll spend the next year deleting.
Frequently Asked Questions
The questions Canadian operators ask most often about programmatic SEO before deciding whether to commission a build.
