generating-programmatic-seo — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited generating-programmatic-seo (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Programmatic SEO is a 10× traffic lever when done well and a manual-action target when done badly. Tripadvisor runs ~700M indexed pages and pulls 226M monthly organic visits off cuisine × city × neighborhood combinations; Zapier turns ~5,000 tools into ~50,000 integration pages [1]. The line between that and Google's scaled-content-abuse penalty [2] is exactly three things: uniqueness page-to-page, intent-fit per query, and depth per page. Not "filling cells of a matrix with templated phrases."
Since Google folded the Helpful Content system into the core algorithm in March 2024 and shipped scaled-content-abuse alongside it, enforcement is intent- and outcome-based, regardless of whether pages were written by humans, AI, or templates [2][3]. Pure-template pSEO is dead. Template + data + LLM enrichment + quality gates is the surviving pattern [4][5].
analyzing-content-gaps or researching-keywords-pre-launch first)Don't use for: brand-new sites with no audience signal, queries you haven't validated, or "the matrix is interesting" — interesting matrix ≠ search demand.
Every generated page must clear all four. If a row can't, it doesn't get a page.
| Gate | Bar | Why |
|---|---|---|
| Uniqueness | ≥60% non-template content page-to-page | Below this, Google clusters/dedupes or classifies as scaled-content abuse [4][5] |
| Word count | ≥400 substantive words (not boilerplate) | Sub-400 reads as thin; 500+ is safer for competitive verticals [4] |
| Schema | Page-type-appropriate JSON-LD | Eligible for rich results, ~2× more likely cited by AI engines |
| Internal-link membership | Parent hub + 3 siblings + 1 pillar | Orphaned pages don't get crawled or ranked [6] |
Template can be 40% of the page; the remaining 60% must come from row-specific data + LLM enrichment.
app/[city]/[category]/page.tsx. Astro: src/pages/[...slug].astro. SvelteKit: src/routes/[city]/[category]/+page.svelte.adding-schema-markup): LocalBusiness for city pages, Product for products, ItemList for hubs, Service for service-area, BreadcrumbList everywhere.generateSitemaps returns the shards [8].generateStaticParams for the top ~20% of rows (highest demand) + dynamicParams = true for the long tail; ISR revalidate: 86400 (24h) for travel/local, 604800 (7d) for stable directories [8].getStaticPaths with content collections or Supabase fetch; output: 'hybrid' with selective prerendering. @astrojs/sitemap shards automatically.load + prerender = true for the build-time set, entries to enumerate; long tail renders on-demand and edge-caches.refreshing-stale-content.LocalBusiness on a non-local page is worse than no schema.dynamicParams + ISR is the win [8].| Data source | Template route | Schema |
|---|---|---|
| Supabase: cities × services | /[service]/[city] | LocalBusiness + Service |
| CSV: products × use-cases | /[product]/for/[use-case] | Product + FAQPage |
| Sanity: integrations | /integrations/[a]/[b] | SoftwareApplication |
| Supabase: vendors × categories | /[category]/[vendor] | LocalBusiness + Review |
| JSON: locations × topics | /[location]/guides/[topic] | Article + Place |
Growth → Mature. Don't try this in the Initial phase — you don't yet know which queries to target, and pSEO without demand validation is the fastest path to a manual action. Validate with researching-keywords-pre-launch and analyzing-content-gaps first.
Full citations and verification tags in SOURCES.md.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.