Suede AI Programmatic SEO Skills
Compatibility
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.
Gate policy: advisory, not blocking
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.
The policy line you must stay behind
Google's spam policies name three patterns programmatic sites trip most:
- Scaled content abuse: many pages generated mainly to manipulate rankings or AI answers and not to help people, whatever tool produced them.
- Doorway abuse: sites or pages created to rank for similar queries that funnel users to the same destination ("[service] in [city]" pages with nothing local on them).
- Site reputation abuse: third-party pages published on a host site to borrow its ranking signals with little first-party oversight.
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
Initial assessment
Read .agents/product-marketing.md (or .claude/product-marketing.md, or the
legacy product-marketing-context.md) if present. Then establish:
- Business: product, audience, the conversion each page should earn.
- Pattern and demand: the repeating query pattern, its variables, how many
combinations have evidence of demand (Search Console, Keyword Planner, or a
dated export; otherwise
unknown). - Competition: who ranks now, what their pages contain, and whether you can offer something they do not.
- Data: what populates each page, where it comes from, how often it refreshes, and whether you have the rights to publish it.
- Delivery: CMS or framework, and whether it can template, split sitemaps,
and set
noindexand canonicals per page.
Data defensibility
The data decides whether the set is worth building. Rank it:
- Proprietary (you created it: usage stats, tests, benchmarks)
- Product-derived (aggregated from your users, with consent)
- User-generated (reviews, submissions, community)
- Licensed (exclusive or contracted)
- Public (anyone can publish it; weakest, needs real added analysis)
A set built only on tier-5 data needs an original layer (scoring, comparison, calculation, local verification) or it is a doorway set.
Playbooks
| 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.
Implementation
1. Pattern and demand
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.
2. Data model
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.
3. Template
- H1 and title that carry the page's variables naturally.
- A direct answer in the opening that uses the row's own data ("Median [metric] in [city] was [value] in [month year], per [source]"), never generic copy.
- Data sections that render only when the row has the data (conditional blocks, not empty placeholders).
- An original layer: a calculation, ranking, comparison, or note that exists only because you combined the data.
- Related-page links and a CTA matched to intent.
- Schema only where a supported feature fits;
BreadcrumbListandOrganizationvia a shared@idare usually safe.
4. Internal linking
- Hub pages per category and per parent (city, industry, integration category) that link to every published child.
- Children link to the hub, to siblings that share a real relationship (nearby cities, adjacent integrations), and to the main product page.
- No orphans: every published page reachable within three or four clicks from
the home page through crawlable
<a href>links. - Breadcrumbs, visible and marked up.
5. Indexation
- One sitemap per page type so indexation can be read per set.
- Rows below the gates are not generated, or are generated with
noindexand left out of the sitemap until they pass. - Self-referencing canonicals; no canonicalizing many thin pages to one hub as a substitute for not publishing them.
- Use subfolders under the main domain unless there is a technical or organizational reason for a subdomain; Google treats both as crawlable, but a subdomain is managed and measured as a separate property.
- Crawl budget matters only for very large sets (tens of thousands of URLs or more); below that, quality gates are the constraint.
Quality gates
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)
- At least 5 page-unique data fields differ from every sibling, and at least one is not on any competing page you checked
- Template-shared text is 40% or less of rendered body words, measured on the thinnest row
- The opening answers the query with this row's data, not generic copy
- An original layer exists (calculation, ranking, comparison, verified local detail)
- A reader who never buys the product still leaves with something useful
- Facts carry a source and a last-verified date
Doorway test
- Swap the variable (city, persona, tool) with a sibling's: if the page still reads as true, it fails
- Pages do not all funnel to one destination with nothing in between
- No near-duplicate pages for synonyms of the same query ("CRM for realtors" and "CRM for real estate agents" is one page)
Technical
- Unique title, meta description, and H1 per page
- Schema validates and matches visible content
- Core Web Vitals measured on a real sample page (field data where available), not assumed
- Mobile render checked
Linking and indexation
- Linked from a hub and from at least one sibling
- In the right per-type sitemap, crawlable, no conflicting
noindex
Rollout and KPIs
Ship 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.
Common mistakes
- City or persona swapped into identical copy (doorway).
- Pages for combinations nobody searches.
- Stale or unverified data presented as current.
- Canonicalizing hundreds of thin pages instead of not publishing them.
- Generating AI-written filler to hit a word count.
- Publishing the full set before the sample passes.
Output Contract
Close every programmatic SEO pass with this block. Write the literal templates.
textPLAYBOOK: [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
Boundaries
- Do not generate, publish, submit, or index a full page set before a bounded sample passes. When the sample fails or was never run, name the blocking gate and failing count, give 2 to 4 options (fix the template, narrow the set, add data, publish the passing subset), and recommend one. Proceeding is the user's call.
- Do not invent source data, claim rankings or traffic, scrape sources whose terms forbid it, or treat keyword volume as user value.
- Do not alter production routes, templates, canonicals, sitemaps, or internal links without an approved scope and current-site verification.
Routing
- Audit shipped pages and technical health:
suede-seo-audit. - Make the set quotable and measure AI citations:
suede-ai-seo. - Editorial (non-templated) planning:
suede-content-strategy. - Comparison-page evidence and framing:
suede-competitors. - Interactive tools as page anchors:
suede-free-tools. - Rollout reporting:
suede-analytics.


