Free Guide · pSEO Operating System

Programmatic SEO (pSEO): Complete Operating System

A no-fluff playbook for solo founders and small teams: how to generate hundreds to tens of thousands of intent-matched pages that pass Google's post-March-2024 value floor — with the Next.js + Supabase + Claude stack, RAG-powered content, hub-and-spoke linking, and the 90-day execution roadmap that takes you from zero pages to first 100 customers.

By Avinash Vagh·Updated May 19 2026·16 sections + 2 appendices·~45 min read

TL;DR

  • pSEO — generating hundreds to tens of thousands of pages from one template + a database — remains the single best zero-paid-ads acquisition channel for solo founders in 2026, but only if every page clears Google's post-March-2024 value floor.
  • The winning code-first stack: Next.js (App Router + ISR) + Supabase Postgres + Claude/GPT for content + Vercel + IndexNow/Indexing API + Search Console API. No-code teams replicate ~80% with Webflow CMS + Airtable + Whalesync + Clay.
  • Your first 100 customers won't come from 10,000 pages. They come from 100–300 ruthlessly intent-matched pages, one winning template, one free embedded tool per page, and a hub-and-spoke link graph. Ship 100, get them indexed, kill the dead 30%, then scale.

Section 1

What pSEO Actually Is (and When NOT to Use It)

Programmatic SEO (pSEO) is the practice of generating many web pages from a single template + a structured dataset, where each page targets a specific long-tail query pattern. Each page is unique because the data is unique, even though the layout is identical.

The mental model: URL pattern + Template + Dataset = N pages.

CompanyURL PatternPagesEst. Monthly Organic
Wise/currency-converter/{from}-to-{to}-rate~260,000~60M (~90% from pSEO)
Zapier/apps/{app}/integrations/{app2}50,000+5.8M
Canva/templates/{type}, /create/{thing}, /{locale}/...~720,000~38M pSEO / 270M total
Nomad List/in/{city}, /cost-of-living-in-{city}~10,000+~50K
BeamJobs/resumes/{job}-resume-examples2,000+~557K
Wise (SWIFT)/swift-codes/{bank}/{country}120,000+2M+
Why it still works in 2026: Google rewards pages that uniquely satisfy a specific intent. A page that says "convert 1000 USD to EUR" with a live calculator literally cannot be answered better by a generic page about currency. pSEO is intent-matching at industrial scale.

The decision framework — when NOT to use pSEO

Don't do pSEO if

No data moat — your dataset is identical to 50 competitors'.

No clear keyword pattern with combined long-tail volume.

Your product is a brand/awareness play (luxury, $250K ACV deals, founder-led).

You cannot offer interactivity, real-time data, UGC, or proprietary insight on each page.

Do pSEO if

You have structured product data (integrations, templates, categories, locations, jobs, codes, comparisons).

Long-tail patterns exist — search '[head term] [modifier]' returns thousands of low-volume queries.

Each page can deliver something unique: live calculator, downloadable artifact, real reviews, embedded tool.

Section 2

The pSEO Mindset: Templates, Variables, and the Value Floor

The mindset shift: stop thinking "articles." Start thinking content units — composable Lego blocks of static + dynamic content driven by variables.

A page = {static intro} + {dynamic data table} + {AI commentary} + {static methodology} + {dynamic FAQ} + {static CTA}

The Value Floor (post-March-2024 doctrine)

Google's March 2024 core update + spam policies introduced three killers: scaled content abuse, expired domain abuse, and site reputation abuse ("parasite SEO"). Per Google's official Search Central Blog (April 26, 2024), the March 2024 core update produced "45% less low-quality, unoriginal content in search results, versus the 40% improvement we expected." The August 2025 spam update was a separate, narrower enforcement action targeting all three abuses.

The forward-looking rule: Every page must (a) be genuinely useful for one specific query, (b) contain something not findable on a competitor's page (interactive element, original data, UGC, or proprietary aggregation), and (c) have engagement metrics within 30% of your hand-crafted pages.

Practical engineering rule: each page should hit 3 of 5: live data, embedded interactive tool, UGC/reviews, original aggregation/analysis, unique media (chart, image, video).

Section 3

Keyword Research for pSEO: Scalable Patterns

You're not looking for keywords. You're looking for patterns with combined demand.

PatternExampleBest for
[tool] alternativesNotion alternativesB2B SaaS
[A] vs [B]Asana vs MondayB2B SaaS
[tool] integrations / [A]+[B] integrationSlack Salesforce integrationB2B integration plays
[city] + [service]SEO agency in AustinLocal / marketplace
[role / industry] + toolCRM for real estateVertical SaaS
convert [X] to [Y]convert PDF to WordUtilities, fintech
[number] best [thing]10 best invoicing tools for freelancersAffiliate / comparison
[job] resume exampleMarketing manager resume exampleCareer tools
[product] templatesPitch deck templatesProductivity SaaS
how to [verb] in [tool]Create custom field in SalesforceDemo SEO

Validation workflow (1 hour, free-ish)

  1. Pick a pattern. List 50 plausible variable values.
  2. Drop 10 into Google Keyword Planner (free with Ads account).
  3. Drop 5 into Ahrefs Free Keyword Generator or Keywords Everywhere (~$2.50/mo).
  4. Search 5 queries manually in Google. If the top 10 is 100% giants (Reddit, Wikipedia, G2), walk away. You want SERPs with a mix of mid-tier sites.
  5. Glimpse (free Chrome extension on Google Trends) for trend signal.
  6. AnswerThePublic for related question patterns → use as FAQ blocks.
  7. Google Search Console — Performance > Queries filtered to >5 impressions, sort by impressions. Patterns often hide in your existing data.

Competitor reverse-engineering

In Ahrefs/Semrush: enter a successful pSEO competitor → Top pages → sort by traffic → look for URL patterns repeating (e.g., /apps/*/integrations/* for Zapier). Copy the pattern, not the keywords.

Section 4

Database / Data Layer Setup

Supabase + Postgres schema (code-first)

create table pages (
  id uuid primary key default gen_random_uuid(),
  slug text unique not null,                -- 'usd-to-eur', 'kl1234-ams-lhr-2026-02-15'
  template_type text not null,              -- 'integration' | 'comparison' | 'currency' | 'city'
  primary_keyword text not null,
  variables jsonb not null,                 -- { from:'USD', to:'EUR', live_rate:1.08 }
  ai_content jsonb,                         -- { intro, commentary, faq }
  meta_title text,
  meta_description text,
  status text default 'draft',              -- draft | published | noindex | killed
  last_data_refresh timestamptz,
  published_at timestamptz,
  impressions_28d int default 0,
  clicks_28d int default 0,
  position_28d numeric,
  created_at timestamptz default now()
);

create index on pages (template_type, status);
create index on pages (last_data_refresh);
create index on pages using gin (variables);

create table page_links (
  source_id uuid references pages(id),
  target_id uuid references pages(id),
  link_type text,                           -- 'related' | 'parent_hub' | 'comparison'
  score numeric,
  primary key (source_id, target_id)
);

Data sourcing playbook

SourceWhen to useTools
Internal product dataBest moat — your integrations, templates, usersDirect DB pull
Public APIsCurrency, weather, jobs, flights, stockAPI keys + cron
Public datasetsCities, ZIP codes, ISO codes, professionsKaggle, data.gov, GitHub
Web scrapingCompetitor specs, public reviewsPlaywright + Python, Apify, Clay
UGCReviews, comments, community postsThin submission form via Tally
Manual + AI enrichmentWhen precision mattersClay's Claygent, or Python + Claude script
No-code alternative: Airtable → Whalesync → Webflow CMS. Comfortable to ~10K rows.

Section 5

Template Design and Content Architecture

The 7-block template (passes the Value Floor)

  1. H1 with the exact keyword.
  2. Live data block (non-negotiable) — the calculator, the price, the integration spec, the map.
  3. Short intent-matched intro (50–100 words, AI-generated with constraints, fact-checked).
  4. Comparison / data table (dynamic, e.g., bank vs. Wise fees, feature-by-feature).
  5. 2–4 unique content sections (AI-generated with proprietary data injected via RAG).
  6. FAQ block (3–6 Qs, mixed dynamic + static, with FAQPage schema).
  7. CTA block — embedded signup, free tool, downloadable asset.

Static vs dynamic ratio

The Wise rule of thumb across their 260K pages: roughly 30% static boilerplate + 70% dynamic/unique data + AI. Pure dynamic looks thin; pure static creates duplicates.

Section 6

Tech Stack and Tooling

The reference architecture

┌─────────────────────────────────────────────────────┐
│  Data Sources                                       │
│  - Internal Postgres (product data)                 │
│  - External APIs (rates, weather, jobs)             │
│  - Scrapers (Python + Playwright on cron)           │
└─────────────────────────┬───────────────────────────┘
                          │ nightly cron
                          ▼
┌─────────────────────────────────────────────────────┐
│  Supabase Postgres (pages, page_links, raw_data)    │
│  + pgvector for RAG embeddings  + Row-Level Security│
└──────────┬──────────────────────────┬───────────────┘
           │ on-publish trigger       │ ISR fetch
           ▼                          ▼
┌──────────────────────┐   ┌──────────────────────────┐
│ Content Generation   │   │ Next.js App Router       │
│ - Claude API         │   │ - /[template]/[slug]     │
│ - Prompt + RAG       │   │ - generateStaticParams() │
│ - Quality scorer     │   │ - revalidate: 86400      │
└──────────┬───────────┘   │ - dynamic sitemap.xml    │
           │ writes back   └─────────┬────────────────┘
           ▼                         │
   pages.ai_content                  │ deploy
                                     ▼
                       ┌──────────────────────────────┐
                       │ Vercel Edge (+ Cloudflare)   │
                       └─────────┬────────────────────┘
                                 ▼
              ┌─────────────────────────────────────┐
              │  IndexNow + Google Indexing API     │
              │  + GSC API (perf metrics back)      │
              └─────────────────────────────────────┘

Next.js dynamic route with ISR (minimum viable pSEO)

// app/[template]/[slug]/page.tsx
import { createClient } from '@supabase/supabase-js'
import { notFound } from 'next/navigation'

const supabase = createClient(
  process.env.NEXT_PUBLIC_SUPABASE_URL!,
  process.env.SUPABASE_SERVICE_KEY!
)

export const revalidate = 86400 // 24h ISR

export async function generateStaticParams() {
  const { data } = await supabase
    .from('pages')
    .select('template_type, slug')
    .eq('status', 'published')
    .order('impressions_28d', { ascending: false })
    .limit(1000)
  return data?.map(p => ({ template: p.template_type, slug: p.slug })) ?? []
}

export async function generateMetadata({ params }) {
  const { data } = await supabase
    .from('pages')
    .select('meta_title, meta_description, slug')
    .eq('slug', params.slug)
    .single()
  if (!data) return {}
  return {
    title: data.meta_title,
    description: data.meta_description,
    alternates: { canonical: `https://yoursite.com/${params.template}/${data.slug}` },
  }
}

export default async function Page({ params }) {
  const { data: page } = await supabase
    .from('pages').select('*')
    .eq('slug', params.slug).eq('status', 'published').single()
  if (!page) notFound()

  return (
    <article>
      <Hero data={page.variables} />
      <LiveTool data={page.variables} />
      <Intro html={page.ai_content.intro} />
      <DataTable rows={page.variables.comparison_rows} />
      <Commentary html={page.ai_content.commentary} />
      <FAQ items={page.ai_content.faq} />
      <CTA />
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{ __html: JSON.stringify(buildSchema(page)) }}
      />
    </article>
  )
}

Dynamic sitemap (segmented)

// app/sitemap.ts
import type { MetadataRoute } from 'next'
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const { data } = await supabase
    .from('pages').select('slug, template_type, published_at')
    .eq('status', 'published')
  return data!.map(p => ({
    url: `https://yoursite.com/${p.template_type}/${p.slug}`,
    lastModified: p.published_at,
    changeFrequency: 'weekly',
    priority: 0.7,
  }))
}
For >50K URLs, generate sitemap-{template}.xml per template + a sitemap index. GSC will tell you which template is the indexing problem.

Open-source starter templates

  • agamm/pseo-next — github.com/agamm/pseo-next. Next.js 13 + Prisma + Postgres + ISR + next-sitemap + JSON-LD. Demonstrates the exact /{variant}/{slug} pattern with Playwright E2E.
  • vercel/next.js examples/with-supabase — Official starter. Bootstrap with npx create-next-app --example with-supabase.
  • FlyClaim.AI architecture writeup (Kamal Rifai, DEV.to). Documents a 5,000-page Next.js + Supabase + Claude + Make.com build on free tiers.

No-code alternatives

StackCostCapacityBest for
Webflow CMS + Airtable + Whalesync~$60–200/mo~10K itemsDesign-heavy B2C
Framer CMS~$25/mo~1K itemsLanding pages, MVPs
WordPress + Rank Math + Python uploader~$15/mo + hosting100K+Content sites
Astro + Airtable + Node script~$0 + CloudflareUnlimited (static)Devs who prefer SSGs

Section 7

Content Generation at Scale (Without Triggering Spam Policies)

Google's March 2024 policy is explicit: "generating many pages primarily to manipulate search rankings" is the violation, regardless of whether AI or humans write them. Defense is per-page uniqueness driven by per-page data, not per-page rewriting of the same thing.

The RAG-powered generation pipeline

# generate.py — runs as cron via GitHub Actions or Supabase Edge Function
import os, json
from supabase import create_client
from anthropic import Anthropic

sb = create_client(os.environ["SUPABASE_URL"], os.environ["SUPABASE_KEY"])
claude = Anthropic()

def build_context(page):
    """Pull facts NO competitor has access to."""
    return {
        "live_data": fetch_live_metrics(page["variables"]),
        "internal_usage_stats": query_product_db(page["variables"]),
        "competitor_specs": page["variables"].get("comparison_rows"),
        "user_reviews_excerpts": fetch_recent_reviews(page["primary_keyword"]),
    }

PROMPT = """You are writing one section of a programmatic landing page.

KEYWORD: {keyword}
TEMPLATE: {template_type}
VARIABLES: {variables}
PROPRIETARY CONTEXT (use this — do not invent):
{context}

Constraints:
- 120–180 words for intro, 250–400 for commentary, 4 Q&A pairs for faq.
- Cite ≥2 specific numbers from the proprietary context.
- Do NOT use: "in today's fast-paced world", "in the digital age",
  "look no further", "game-changer".
- 9th-grade reading level. Short sentences.
- If you cannot say something specific and useful, output SKIP.

Return JSON: { "intro": "...", "commentary": "...", "faq": [...] }
"""

def quality_score(content, ctx) -> float:
    score = 0
    for n in ctx.get("live_data", {}).values():
        if str(n) in content: score += 1
    for banned in ["fast-paced", "in today's", "game-changer"]:
        if banned in content.lower(): score -= 1
    return score

for page in sb.table("pages").select("*").eq("status", "draft").execute().data:
    ctx = build_context(page)
    msg = claude.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=2000,
        messages=[{"role": "user", "content": PROMPT.format(
            keyword=page["primary_keyword"],
            template_type=page["template_type"],
            variables=json.dumps(page["variables"]),
            context=json.dumps(ctx),
        )}],
    )
    content = json.loads(msg.content[0].text)
    if quality_score(json.dumps(content), ctx) >= 2:
        sb.table("pages").update({
            "ai_content": content, "status": "published",
            "published_at": "now()"
        }).eq("id", page["id"]).execute()
    else:
        sb.table("pages").update({"status": "needs_review"}).eq("id", page["id"]).execute()

AI tooling shortlist (May 2026 pricing)

ToolUsePricing
Claude API (Anthropic)Best long-form quality. Haiku 4.5 / Sonnet 4.6 / Opus 4.7$1/$5 · $3/$15 · $5/$25 per 1M tokens
GPT-4o / GPT-5 (OpenAI)Versatile, fasterComparable tier
Gemini 2.5 ProLong-context, multimodalComparable tier
BywordBulk pSEO generation with custom datasetsFrom ~$39/mo (credit-based)
FraseResearch + briefs + AI write + GEO scoringFrom $45/mo
SurferSEOContent scoring vs SERP NLP$49–$99+/mo
LetterdropProgrammatic + approval workflows + auto internal linking$500+/mo (team)
Clay + ClaygentData enrichment + per-row AI researchFrom $150/mo
Solo-founder stack: Claude Sonnet 4.6 API + a Python script + Frase ($45/mo) for the brief layer. Total <$150/mo and competes with $5K/mo enterprise pipelines.

Section 8

Internal Linking at Scale

Zapier's hub-and-spoke architecture

        [/apps]  (mega-hub)
           │
   ┌───────┴───────┬───────────┬──────────┐
   ▼               ▼           ▼          ▼
[/apps/slack] [/apps/notion] [/apps/gmail] ...    ← ~7,000 app hubs
   │
   ├── /apps/slack/integrations/notion             ← spokes (long-tail pages)
   ├── /apps/slack/integrations/gmail
   └── ...

Automated related-page algorithm (SQL)

insert into page_links (source_id, target_id, link_type, score)
select
  p1.id, p2.id, 'related',
  jsonb_array_length(
    (select jsonb_agg(k) from jsonb_object_keys(p1.variables) k
     where k in (select jsonb_object_keys(p2.variables)))
  )::numeric
from pages p1
cross join lateral (
  select id, variables from pages p2
  where p2.template_type = p1.template_type
    and p2.id != p1.id and p2.status = 'published'
  order by random() limit 8
) p2
on conflict do nothing;

For semantic relatedness: store pgvector embeddings of each page's primary content, use cosine similarity. Free with Supabase pgvector.

Linking rules: every page links UP to its template hub, sideways to 5–10 siblings, and the hub links DOWN to the top 20–50 children by traffic. Add cross-template links (an integration page → comparison page of the same app). Anchor text = keyword of target page, never "click here."

Section 9

Indexing and Crawlability for Thousands of Pages

Direct quote from FlyClaim.AI's writeup: "Programmatic SEO on a new domain is a patience game. With zero backlinks, Google took weeks to even crawl beyond the homepage, despite having a complete sitemap. External backlinks are essential to kickstart crawling."

The 6-step indexing protocol

  1. Sitemap segmentation — one sitemap per template, max 50,000 URLs per file, plus a sitemap index. Submit each separately in GSC to diagnose per-template indexing rates.
  2. robots.txt — allow /sitemap*.xml and page paths; block /api/, /admin/, search result URLs.
  3. IndexNow — supported by Bing/Yandex/Seznam. Generate UUID key, host at /{key}.txt, POST URLs to api.indexnow.org/indexnow. Up to 10,000 URLs per request.
  4. Google Indexing API — officially for JobPosting and BroadcastEvent schema; in practice broadly used. Default 200/day, requestable to 2,000+. Treat as a grey-hat-but-effective accelerator for top 200 pages.
  5. Manual GSC URL Inspection → Request Indexing for top 10–30 highest-value pages.
  6. 5–20 high-quality backlinks to hub pages (HN, ProductHunt, Indie Hackers, niche newsletters). Without backlinks, sitemaps alone get ignored on a new domain.

Index-status monitoring at scale (GSC API → Supabase)

// sync-gsc.ts — nightly cron
import { google } from 'googleapis'
const sc = google.searchconsole('v1')

const res = await sc.searchanalytics.query({
  siteUrl: 'sc-domain:yoursite.com',
  requestBody: {
    startDate: '2026-04-01', endDate: '2026-04-28',
    dimensions: ['page'], rowLimit: 25000,
  },
  auth: oauthClient,
})

for (const row of res.data.rows ?? []) {
  await supabase.from('pages').update({
    impressions_28d: row.impressions,
    clicks_28d: row.clicks,
    position_28d: row.position,
  }).eq('slug', extractSlug(row.keys![0]))
}

Find dead pages

select slug, template_type from pages
where published_at < now() - interval '90 days'
  and impressions_28d < 10 and clicks_28d = 0
order by template_type;
-- These → noindex or kill.

Section 10

Conversion Optimization on pSEO Pages

The best pSEO pages aren't articles — they're product surfaces disguised as content.

PlayExamplesWhen
Embedded free toolWise converter, Canva editor in-pageB2C, product usable in <30s
Lead magnetNotion template downloads, Webflow cloneablesB2B with email gates
In-page interactive demoStorylane demos on every pSEO pageB2B demo-led growth
Free trial with URL-param prefill/usd-to-eur → prefill signup with USD/EURSelf-serve SaaS
Email capture above the foldNomad List's join-Slack overlayCommunity products
Comparison upgrade'We rank #4 here, but for X use case…'B2B comparison pages
The Storylane data point: "Each page includes a subtle shoutout — 'This page was created in 5 minutes using Storylane.' About 1.2% of visitors sign up from those pages (vs. 0.8% from blogs), and the traffic is 10x higher." That is the unfair advantage of product-led pSEO.

Section 11

Measuring pSEO Performance

The 8 metrics that matter

MetricDefinitionTarget
Pages submitted vs indexedPer template>70% indexed within 90 days
Average position by templateAcross the template's URLsKill templates averaging >30
Clicks per indexed pageTotal clicks / indexed pagesBelow 0.5 = thin/wrong intent
CTR vs SERP position benchmarksearchanalytics.query with dimensions=['query','page']Match or exceed your category benchmark
Time on page + scroll depthGA4 / PostHogWithin 30% of manual content
Conversion rate per templateTrials/signups / sessionsCompare across templates; prune low ones
CAC per template(your time + AI tokens) ÷ paid customersBelow paid-channel CAC
Crawl budget consumptionGSC > Crawl StatsGooglebot hitting >10% of URLs/month

Weekly iteration loop

[GSC API sync → tag winners/losers]
   → [Top winners → 2x that pattern with more variables]
   → [Impressions but 0 clicks → rewrite title/meta]
   → [0 impressions after 90 days → noindex or kill]
   → [<30% indexing per template → improve template depth, resubmit]
Pruning rule: 90-day-old page, <10 impressions in 28 days, 0 clicks → set status = 'noindex', remove from sitemap. Index hygiene is the #1 underrated pSEO lever post-2024.

Section 12

Real Case Studies (With Hard Data)

Pieter Levels — Nomad List + Remote OK

  • Solo founder, PHP + jQuery + SQLite. Each city filter combination generates an indexable URL.
  • ~50,000 monthly visits to Nomad List from pSEO city pages (Practical Programmatic).
  • Nomad List hit $5.3M revenue in November 2024 per GetLatka, up from $704K in November 2023.
  • Remote OK ~$2M ARR. Combined Levels personal income: ~$3M/yr.
  • Lesson: a solo dev with PHP + a CSV of cities + crowdsourced data built a multi-million-dollar product. Speed > stack.

Zapier

  • 50,000+ integration pages, ~5.8M monthly organic visits.
  • URL patterns: /apps/&#123;app&#125; (hub) and /apps/&#123;app1&#125;/integrations/&#123;app2&#125; (spoke).
  • Over 90% of visits from non-brand searches. Blog contributes ~67% of organic.
  • Flywheel: more apps join → more pages → more traffic → more apps want to join.

Wise (TransferWise)

  • Custom headless CMS 'Lienzo.' From 7,000 pages in 2015 to 1.7M indexed pages across 20 markets and 10 languages in under 24 months.
  • ~90% of organic traffic from pSEO. Currency converter pages alone ~43.5M visits/mo. SWIFT code pages ~2M.
  • Published 213,746 new pages in 2024 — 173,781 → 387,527 URLs, 15.8M → 30.5M visitors.
  • They run no link-building — pure content velocity + brand authority.

Canva

  • 24,000 templated English pages × ~30 locales ≈ 720,000 URLs. ~38M monthly pSEO visits (270M total).
  • Three page types: /templates/* (13.1M visits), /create/* (6.4M), /features/* (3.2M).
  • The AI image generator page (launched during the ChatGPT wave) now ranks #1 and drives ~340K visits/month.

G2 / Capterra — the cautionary tale

  • Pure pSEO businesses. G2 dominates '{software A} vs {software B}' SERPs with auto-generated comparison pages.
  • Per Ahrefs' Sept 9 2024 study by Ryan Law, G2 lost 65.74% of estimated monthly organic traffic from August 2023 to August 2024 — 4,397,226 → 1,506,545 monthly visits.
  • Even mature pSEO sites get hammered when templates are too text-heavy and add no unique value beyond what's in the SERP itself.

BeamJobs

  • ~2,000+ profession-specific resume example pages. ~557K monthly traffic.
  • Solo-founder-led. Stack: WordPress + a custom Python tool to batch-publish 50 articles at once with original content layered on top.

Storylane (B2B SaaS demo-led pSEO)

  • Madhav Bhandari, Head of Marketing, on Exit Five podcast (Oct 2024): 25,000 → 220,000+ monthly visitors in 6 months via 1,500+ programmatically-generated demo-led tutorial pages.
  • Pattern: 'how to &#123;do thing&#125; in &#123;tool&#125;.'
  • 1.2% signup conversion from pSEO vs 0.8% from blogs, traffic 10x higher. 'Tripled PLG revenue.'

Angel Match / Investor Hunt (Rashid Khasanov)

  • Bootstrapped portfolio at ~$42K MRR (Angel Match $37.3K + Investor Hunt $4.5K + smaller bets).
  • Stack: Node.js + DigitalOcean + Stripe + 110K-row angel/VC database.
  • 'Angel Match was stuck at ~$5k MRR for a long time. It turned out we were deleting the pages every once in a while when we were making updates on the app. So the website couldn't compound in search traffic.'
  • Next bet: 300K journalist pages on Journalist Hunt, already generating ~100 organic clicks/day.

Senja.io

  • Two-person team (Wilson Wilson + Olly Meakings). $0 → $83K MRR / $1M ARR in 3 years 9 months, 3,000 paying customers, 100% bootstrapped.
  • Public testimonial pages = built-in pSEO surface.
  • Growth driver: SEO + PLG, in that order.

StandOut CV

  • Founder posted on Indie Hackers: $40K MRR purely from SEO.
  • 'Built programmatic publishing: I had a Python tool made to auto-generate repetitive CV example structures (doctor, nurse, accountant etc.), then batch upload 50 articles at once, so writers could add original content.'
  • 1,000+ articles, mostly long-form top-of-funnel.

FlyClaim.AI (technical proof point)

  • 5,000+ auto-generated pages on Next.js 16 + Supabase + Claude.
  • 5,700 URLs across 5 languages from 1,134 underlying flights.
  • No revenue disclosed — the proof is the infrastructure cost of pSEO has collapsed to zero.

Section 13

The 10 Mistakes That Kill pSEO

  1. 1Thin templates (keyword + boilerplate). → Hit the Value Floor: live data + UGC/proprietary insight.
  2. 2Index bloat — 50K published, 45K unindexed, dragging the domain. → Aggressive noindex after 90 days of zero impressions.
  3. 3Duplicate content across templates — 'alternatives' 80% identical to 'comparison.' → Distinct templates with different structures and angles.
  4. 4AI hallucination at scale — Claude invents an integration that doesn't exist. → Ground every claim in RAG context; quality scorer rejects pages without ≥2 verifiable facts.
  5. 5Wrong intent matching — 'best X' pages where SERP wants tutorials. → SERP-check every template before scaling >50 pages.
  6. 6Site reputation abuse — letting a third-party affiliate program publish on your domain. → Don't outsource your content surface.
  7. 7Scaled content abuse — pure rephrased AI with no data substrate. → If your page would not exist without AI, it's at risk.
  8. 8Building yourself in as #1 in your own 'best [category]' pages without disclosure. SpamBrain 2025 demotes this. → Rank honestly; disclose bias.
  9. 9No backlinks. → Get 5–20 high-quality links to hub pages before scaling beyond 200 pages.
  10. 10No pruning loop. → Quarterly pruning calendar; treat dead pages as liabilities.

Section 14

pSEO for B2C Self-Serve Products

B2C = high volume, low price ($5–$50/mo or one-time), fast decision cycle. The playbook:

  1. Volume play — 5,000–50,000 pages is the right scale (if value floor holds).
  2. Free embedded tools as primary CTA — calculator/generator/converter delivering value in <10 seconds on the page (Wise, Canva, BeamJobs).
  3. Viral loops — every output the user creates contains "Made with [your product]" — Canva templates, Senja testimonial walls, Storylane demos. The pSEO page acquires; the artifact distributes.
  4. Optimize for transactional verbs — create logo, make resume, generate password, convert pdf to word.
  5. Locale expansion is the easiest 5x — Canva added 15.5M visits/mo by translating templates into 30 locales. Use subdirectories (/es/, /fr/) with hreflang.
  6. Klaviyo or Customer.io for the email funnel after capture.

Section 15

pSEO for B2B SaaS

B2B = lower volume, higher ACV ($50–$5,000/mo), longer cycle, research-driven.

TemplatePatternWhy it works
Alternatives{Competitor} alternativesHigh commercial intent — buyer is shopping
Comparisons{You} vs {Competitor}Bottom-funnel — buyer is deciding
Integrations{You} {Other} integrationCaptures buyers in the partner ecosystem
Use cases{Tool} for {industry/role}Vertical positioning
Demo SEOHow to {do thing} in {competitor tool}Captures users mid-task; show your product as the better way
ROI calculators{Tool} ROI calculatorSales enablement + SEO asset
Industry pages{Product} for {industry}'CRM for real estate'
Template libraries{Asset} templateLead magnets
B2B conversion stack: pSEO page → free tool / interactive demo / template download (email capture) → automated sequence → trial → sales-assisted close (>$500 ACV) or self-serve checkout.
Pricing transparency rule: B2B comparison pages with hidden pricing convert <0.5%. Transparent pricing tables (yours + competitors') convert 2–4× better and rank better.

Section 16

The Full pSEO Operating System

First citations and rankings typically appear 4–8 weeks after foundational fixes ship. Substantial gains by month 3. First 100 customers by month 4–6.
Week 1

Discovery

  • Reverse-engineer 3 pSEO competitors in Ahrefs.
  • List 5 candidate patterns with volume validation.
  • Pick ONE pattern to pilot.
  • SERP-check 5 queries manually — if top 10 is 100% giants, walk away.
Week 2

Data

  • Source dataset (API/scrape/manual). 50–200 rows minimum.
  • Create Supabase tables. Populate. Validate row-by-row.
  • Verify uniqueness — would each row produce a meaningfully different page?
Week 3

Template

  • Build Next.js dynamic route + ISR.
  • Implement all 7 blocks (H1, live data, intro, table, commentary, FAQ, CTA).
  • Add JSON-LD schema (SoftwareApplication / FAQPage / BreadcrumbList).
  • Write & test master AI prompt with 5 sample rows.
Week 4

Pilot (100 pages)

  • Generate 100 pages. Manually review EVERY one.
  • Submit sitemap. IndexNow + Google Indexing API.
  • Get 3–5 backlinks (HN, IH, ProductHunt, niche newsletter).
  • Document baseline metrics before traffic arrives.
Weeks 5–8

Measure

  • Daily GSC API sync to Supabase.
  • Day 60: pages with impressions but no clicks → rewrite title.
  • Day 90: pages with 0 impressions → noindex.
  • Tag winning patterns; document what made them win.
Month 3+

Scale

  • If indexing >70% and avg position <30 → scale to 1,000s.
  • Add second template targeting adjacent pattern.
  • Build hub-and-spoke link graph.
  • Set quarterly pruning calendar.

JSON-LD examples (drop-in for every pSEO page)

{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "name": "Acme CRM for Real Estate",
  "applicationCategory": "BusinessApplication",
  "operatingSystem": "Web",
  "offers": { "@type": "Offer", "price": "49", "priceCurrency": "USD" },
  "aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.7", "reviewCount": "286" }
}
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [{
    "@type": "Question",
    "name": "How do I convert USD to EUR using Wise?",
    "acceptedAnswer": { "@type": "Answer",
      "text": "Enter the USD amount in the converter; Wise uses the mid-market rate plus a transparent fee shown before you confirm."
    }
  }]
}
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "Apps", "item": "https://yoursite.com/apps" },
    { "@type": "ListItem", "position": 2, "name": "Slack", "item": "https://yoursite.com/apps/slack" },
    { "@type": "ListItem", "position": 3, "name": "Notion Integration", "item": "https://yoursite.com/apps/slack/integrations/notion" }
  ]
}

Section 17

System Prompt: Programmatic SEO + AI Automation (Copy-Paste)

Drop the prompt below into ChatGPT, Claude, Gemini, or any system that accepts a system prompt. It primes the model to think and answer like a Google Search Quality Engineer × pSEO architect × AI automation operator — so every reply is architecture-level, scalable to 10K–10M URLs, and grounded in Crawl → Render → Index → Rank → Convert. Best for: generating pSEO pages at scale for any Product, B2B, or B2C use case.

How to use: paste the entire block (everything between the dashes) as the system message. The model will reply "System Loaded." — then send your actual task (e.g., "design the URL pattern and dataset schema for 50,000 city × service pages").
# PROGRAMMATIC SEO + AI AUTOMATION SYSTEM PROMPT
> **Best for:** Generating pSEO pages at scale for any Product, B2B, or B2C use case

---

## System Prompt

You are now a **Full-Stack Technical SEO Engineer + Programmatic SEO Architect + AI Automation Builder + Search Systems Engineer + Performance Specialist + Growth Technologist**.

You operate with the mindset, tooling, engineering fluency, diagnostic depth, and system-level thinking of a **Google Search Quality Engineer**, combined with the creativity and execution velocity of a **pSEO growth hacker** and an **AI-native automation operator**.

---

## Core Operating Rules

Every answer you provide must be:

- Deeply technical and architecture-level
- System-driven and template-first
- Scalable to **10,000–10,000,000 URLs**
- Grounded in real-world search engine behavior
- Optimized for: **Crawl → Render → Index → Rank → Convert**
- Automation-ready and reproducible in engineering environments

You must **NEVER** provide:

- Generic SEO tips
- Surface-level suggestions
- Beginner explanations
- Content-writer-style answers

---

## Section 1 — Technical SEO Engineering

### 1.1 Robots.txt Engineering
- Wildcard handling and multi-environment rules (dev/stage/prod)
- Blocking faceted URLs, infinite scroll endpoints, private directories
- Crawl-delay logic and user-agent prioritization
- Emergency deindexation protocols

### 1.2 XML Sitemap Systems
- Dynamic generation from database
- Segmented sitemaps (products, categories, locations, pSEO templates)
- Index file orchestration and lastmod versioning strategies
- Video, image, hreflang sitemaps
- Sitemap throttling to control crawl behavior

### 1.3 Indexation Management
- Canonical clusters and noindex governance systems
- Soft 404 detection and paginated content rules
- Parameter handling via GSC and canonical logic
- Merging, pruning, and consolidating page sets
- Index bloat prevention workflows

### 1.4 Large-Scale Site Architecture
- Designing URL structures for 10k–10M pages
- Routing logic for pSEO templates
- Semantic folder hierarchies
- Deduplication of template variants
- Content segmentation by intent

### 1.5 Internal Linking Architecture
- Algorithmic internal linking engines
- Link scoring systems with contextual anchors from embeddings
- Superhubs and cluster hubs
- Anti-orphan enforcement rules
- Dynamic "related content" models powered by vectors

### 1.6 Rendering & JavaScript SEO
- SSR / SSG / ISR evaluation
- Hydration mismatch debugging
- Render-blocking script elimination
- Dynamic content parity enforcement
- Shadow DOM and lazy-loaded UI troubleshooting

### 1.7 Core Web Vitals Engineering
- **LCP:** Server time, TTFB, resource preloading
- **CLS:** Layout reflow prevention
- **INP:** JS main-thread optimization
- Field vs lab data reconciliation
- Regression monitoring across templates

### 1.8 Performance Optimization at Scale
- Brotli + HTTP/3
- Critical CSS extraction and dead JS elimination
- Image CDNs with responsive srcsets
- font-display and unicode-range strategies
- Caching layers: edge, CDN, memory cache

---

## Section 2 — Programmatic SEO (pSEO) Architecture

### 2.1 Keyword Pattern Engineering
- Head term + modifier matrices
- Intent segmentation for each modifier category
- Entity relationship mapping
- Eliminating low-value combinations
- Cluster layering: primary / secondary / tertiary modifiers

### 2.2 Dataset Engineering
- Normalizing CSV / DB / API datasets
- Deduplication and missing-value handling
- Anomaly detection and field-level data validation
- Generating synthetic attributes via models or embeddings

### 2.3 Template Systems

Every pSEO template must contain:

| Component | Requirement |
|---|---|
| Title / H1 / Meta | Parameterized from dataset |
| Intro Logic | Intent-matched per modifier |
| Data Modules | Dynamic, pulled from dataset |
| Comparison Tables | Auto-generated |
| Maps / Stats / Dynamic Blocks | Injected per variant |
| CTA | Decision-tree-driven |
| Schema | JSON-LD, auto-injected |
| Internal Links | Rule-based, auto-generated |
| Value Floor | Minimum uniqueness score enforced |

### 2.4 Safeguards
- Auto-noindex thin variants
- Automatic canonicalization of template families
- Duplicate-content detection via embeddings
- Conflict resolution between templates
- Scheduled: `dataset refresh → template regen → selective redeploy`

---

## Section 3 — AI Generation Systems & Automation

### 3.1 Prompt Engineering at Template Level
- Intent-matched prompts aligned to SERP patterns
- Entity-complete content generation
- Hallucination prevention gates
- Keyword variation orchestration
- Brand-tone injection

### 3.2 RAG + Embedding Systems
- Vector indexing of proprietary datasets
- Context-window optimization
- Semantic stitching and data-consistency validation
- Retrieval scoring

### 3.3 AI Quality Assurance

Auto-score content for:

- Uniqueness and similarity drift
- Factual alignment with dataset
- SERP pattern match
- Entity completeness
- Toxicity / spam heuristics

### 3.4 SEO Automation Workflows

Automate:

- Keyword clustering
- Opportunity discovery from GSC
- Dead pages detection
- Schema creation and meta generation
- Internal linking graphs
- Content briefs and competitive gap analysis

### 3.5 AI Agents / API Workflows

Build agents that:

- Pull data from Search Console, GA4, Ahrefs
- Analyze patterns and output recommended changes
- Orchestrate automated re-generation of content
- Deploy pages programmatically

---

## Section 4 — Engineering & DevOps Integration

### 4.1 Coding Fluency

Reason and build in:

- Node.js / TypeScript / Python
- SQL for dataset transformations
- React / Next.js or Vue / Nuxt (SSR / SSG / ISR)
- Liquid / Handlebars / CMS template engines

### 4.2 Deployment & Hosting Awareness
- CDN layer behavior (Fastly, Cloudflare)
- Cache invalidation rules and edge redirects
- robots headers on edge
- AWS / GCP hosting SEO implications
- Multi-region latency impact on LCP

### 4.3 Version-Control SEO

Git-based management of:

- Schema and canonical rules
- Redirect rules and robots
- Template variations and experiment branches

---

## Section 5 — Schema, Entity SEO & Knowledge Graph Engineering

### 5.1 Schema Templates (JSON-LD)

| Page Type | Schema |
|---|---|
| Blog / Guide | Article |
| FAQ Pages | FAQ |
| Tutorial | HowTo |
| Product | Product + AggregateRating |
| SaaS Tool | SoftwareApplication |
| Local | LocalBusiness |
| All Pages | Breadcrumb + WebSite |

### 5.2 Knowledge Graph Optimizations
- Entity extraction and salience building
- Entity → attribute → relationship chains
- Internal linking for entity reinforcement
- Co-occurrence pattern alignment
- Fact-level verification

### 5.3 Multi-lingual & Hreflang Engineering
- Canonical + hreflang interaction
- Reciprocal mapping and regional variations
- Translation consistency systems
- Language dataset normalization

---

## Section 6 — Analytics, Observability & Experimentation

### 6.1 SEO Observability — Monitor:
- Crawlability and index coverage
- Rendering success rates
- Template-level performance
- Keyword movement volatility
- CWV regressions
- Link velocity and cannibalization
- CTR outliers

### 6.2 Experimentation Frameworks
- Template-level A/B tests
- Schema variations and content depth experiments
- Internal linking rewiring
- Title / meta rewrites and regression analysis

### 6.3 Diagnostics — Debug:
- Sudden deindexation
- Path-level crawl traps
- JS rendering inconsistencies
- Soft 404 misclassifications
- Manual action precursors
- Traffic drop causality

---

## Section 7 — Content Architecture & CRO Engineering

### 7.1 Intent-Driven Content Structures

Always build:

- Question blocks and feature tables
- Comparison matrices and pros/cons
- Context-aware CTAs
- UGC or review integration
- Structured FAQs

### 7.2 CRO for Organic Traffic
- Trust architecture
- Scroll depth analysis
- Heatmap-driven template improvements
- CTA variation across templates
- Conversion funnel mapping

### 7.3 E-E-A-T Enforcement
- Author modeling and brand entity reinforcement
- Content provenance signals
- External citations and internal trust signals

---

## Section 8 — Backlink Systems & Authority Engineering

### 8.1 Programmatic Link Asset Creation
- Datasets, calculators, location stats hubs
- Comparison engines
- City or product-level insights pages

### 8.2 Scalable Prospecting Systems
- Unlinked mentions detection
- Broken link mapping
- Competitor link graph scraping
- Authority-gap modeling

### 8.3 Outreach Automation
- Personalized AI email generation
- Dynamic reference insertion
- Outreach sequencing
- Link velocity monitoring

---

## Operating Principles

| Principle | Rule |
|---|---|
| Scale | Always think 10,000+ URLs minimum |
| System-first | Never think page-by-page |
| Automation | Always propose automated or semi-automated solutions |
| Full Funnel | Crawl → Render → Index → Rank → Convert |
| Edge Cases | Always include failure modes |
| SERP-Aligned | Always consider intent and entity completeness |
| Performance | Always apply performance engineering principles |
| Safety | Always respect Google spam and duplication constraints |
| Data Quality | Always consider dataset drift and refresh cycles |

---

> **Activation:** If you understand your role, respond with: `"System Loaded."`
> After that, I will begin giving you tasks.

Recommendations

Staged Rollout Recommendations

Stage 0 — Pre-launch (week 1)

Validate ONE pattern with combined volume >5,000/mo and a SERP that includes mid-tier sites. If you can't find that pattern, pSEO is not your channel — go founder-led sales or paid ads.

Stage 1 — Pilot (weeks 2–6)

Ship 100 pages on Next.js + Supabase. Hand-review every one. Target: >50 indexed within 30 days, average position <30 within 60 days. If not hit, fix the template, do not scale.

Stage 2 — Scale (months 2–4)

Hit 1,000–5,000 pages. Add internal linking. 10–20 backlinks. Target: 5,000+ monthly organic visits, >1% conversion to email/trial.

Stage 3 — Compound (months 5–12)

Add 2nd and 3rd templates. Locale expansion. 50,000+ visits/mo and first 100 customers.

Benchmarks that change the recommendation: Indexing rate <30% at day 60 → stop scaling, fix template depth. Avg position >40 after 90 days → wrong intent, switch pattern. Conversion <0.3% → fix on-page CTA, not more pages. Manual action in GSC → noindex offending sections within 24h.

Caveats

Caveats and Risk Disclosures

  • Case-study traffic numbers are public estimates (Ahrefs/Semrush) unless founder-disclosed. Wise's "60M visits" is Ahrefs-estimated; Storylane's 220K is founder-stated.
  • G2's 65.74% Aug 2023 → Aug 2024 traffic loss is from Ahrefs' Sept 9 2024 SaaS study by Ryan Law and is a live warning that even mature pSEO can be hammered.
  • AI content policy risk is non-zero. Google's stance (March 2024 + Nov 2024 + Feb 2025 + Aug 2025): scale itself isn't the violation, scale without per-page unique value is.
  • The Indexing API technically restricts to JobPosting/BroadcastEvent. Broader use is grey-hat; do not depend on it as your primary indexing channel.
  • Indie hacker MRR claims are self-reported (Senja $1M ARR, Angel Match $42K MRR — founder-disclosed on Twitter/IndieHackers, not audited).

The One-Sentence pSEO Mandate

Build one template that satisfies one specific intent better than anything else on the SERP — then multiply it by your data.

Solo founders who execute this 90-day roadmap rigorously typically see first indexed pages within 7 days, measurable rankings by week 8, and first 100 customers by month 4–6. The infrastructure cost of pSEO has collapsed to near-zero — the moat is now in your data, your template, and your discipline.