Programmatic SEO
by coreyhaines31 / marketingskills
Create SEO-driven pages at scale using templates and data.
Suede AI Programmatic SEO Skills: playbook, source model, templates, unique value, internal links, sitemaps, phased rollout, and KPIs.
Listed ·Updated
Install data from skills.sh
Suede Programmatic SEO is a Programmatic SEO skill for AI agents, published in the seoskills.sh catalog. Reach for it when your work involves large-scale page generation and ecommerce SEO built for consistent quality. Install it with one command and it runs inside your own agent, so the work happens in your workflow, not a separate SEO tool.
Requires a source dataset with reuse rights, query-pattern evidence, and page/template access. Current search policies require browsing. Local planning/building needs no new integration; publication requires authority.
For a concrete input, expected output, recovery path, and validation check, read the worked contract. Use it to check the handoff before treating the task as complete.
Programmatic pages work when each one answers a real query with data the searcher cannot get faster elsewhere. They fail, and can drag the whole site down, when they are one template with a swapped city name. This skill treats page count as something a sample earns, never a target.
Every gate and verdict here is a recommendation to the user, not a control on the agent. A failed gate changes what you report, never what you do. Single exception: an extremely risky finding (data loss, credential exposure, legal or rights violations, payment mistakes, irreversible public damage) pauses for the user's choice.
Google's spam policies name three patterns programmatic sites trip most:
Google also says AI answers need no special pages; producing variants for AI is the same abuse. Every gate below exists to keep a page set on the right side of this line. Source: https://developers.google.com/search/docs/essentials/spam-policies
Read .agents/product-marketing.md (or .claude/product-marketing.md, or the
legacy product-marketing-context.md) if present. Then establish:
unknown).noindex and canonicals per page.The data decides whether the set is worth building. Rank it:
A set built only on tier-5 data needs an original layer (scoring, comparison, calculation, local verification) or it is a doorway set.
| Playbook | Pattern | Example |
|---|---|---|
| Templates | "[type] template" | "invoice template" |
| Curation | "best [category] for [segment]" | "best CRM for agencies" |
| Conversions | "[X] to [Y]" | "kg to lbs" |
| Comparisons | "[X] vs [Y]" | "webflow vs wordpress" |
| Examples | "[type] examples" | "landing page examples" |
| Locations | "[service] in [place]" | "coworking in austin" |
| Personas | "[product] for [audience]" | "crm for real estate" |
| Integrations | "[A] [B] integration" | "slack asana integration" |
| Glossary | "what is [term]" | "what is churn rate" |
| Translations | localized versions | "/es/", "/de/" |
| Directory | "[category] tools" | "ai writing tools" |
| Profiles | "[entity]" or "[entity] [attribute]" | "stripe pricing history" |
Read references/playbooks.md when choosing, layering, or implementing one. It
holds per-playbook value requirements, URL patterns, and the asset-to-playbook
table.
Name the pattern, the variables, and the candidate list. Keep only combinations with demand evidence or a clear reader need. Combinations with no evidence wait for phase 2 or never ship.
One row per page. Columns for every page-unique field, its source, its
last-verified date, and a publish flag computed from the gates below. Rows
that fail stay in the table with publish = false.
BreadcrumbList and
Organization via a shared @id are usually safe.<a href> links.noindex and
left out of the sitemap until they pass.Run on a sample of 10 pages or 5% of the planned set, whichever is larger, drawn across the data range (best-populated, median, thinnest rows), never only showcase pages. At least 90% of the sample must pass every gate before generating, publishing, or submitting anything beyond the sample. A failing sample means fix the template or shrink the set.
Index-worthiness (content)
Doorway test
Technical
Linking and indexation
noindexShip in phases: sample, then phase 1 (the strongest rows), then expansion only when phase 1 earns it. Read these at 30 and 60 days after each phase:
| KPI | Source | Expand when | Stop and fix when |
|---|---|---|---|
| Indexation rate (indexed / submitted per sitemap) | Search Console Pages | 70% or more | Below 60% |
| Pages with impressions / pages indexed | Search Console Performance | Rising | Flat after 60 days |
| CTR on the set vs site average | Search Console | At or above | Well below |
| Engaged sessions per page | GA4 | Comparable to hand-built pages | Near zero |
| Conversions from the set | GA4 | Positive and growing | None after 60 days |
| "Crawled, currently not indexed" count | Search Console | Falling | Rising |
| Manual actions | Search Console | None | Any: halt and remove |
These thresholds are Suede defaults; adjust them to the user's baseline and
record the change. Hand ongoing reporting to suede-analytics.
Close every programmatic SEO pass with this block. Write the literal templates.
PLAYBOOK: [name], chosen because [pattern + data fit]
DATA DEFENSIBILITY: [tier 1-5], source, rights, provenance, refresh cadence
ORIGINAL LAYER: [what exists only because the data was combined]
PAGE-COUNT BOUND: sample [N] -> phase 1 [N] -> ceiling [N], expansion condition [KPI threshold]
URL: [literal pattern] TITLE: [literal] META: [literal] H1: [literal]
OPENING ANSWER TEMPLATE: [literal, with data variables]
UNIQUENESS: [page-unique fields per page] | template-shared body text: [N%]
DOORWAY TEST: [pass/fail on sample, examples]
LINK PLAN: hub [URL] -> spokes [pattern] | cross-links [rule] | sitemap [file]
SAMPLE VERDICT: [N of N pass], failing gates: [list or "none"]
KPI PLAN: [metrics, sources, 30/60-day thresholds]
SHIP GATE: ship | ship-with-caveats | hold, reason
suede-seo-audit.suede-ai-seo.suede-content-strategy.suede-competitors.suede-free-tools.suede-analytics.Not using the CLI? Copy the SKILL.md and paste it straight into ChatGPT, Claude, or any agent.