Install
openclaw skills install p-seoBuild Programmatic SEO 2.0 systems at scale — AI-generated content using strict JSON schemas, niche taxonomy, and React renderers. Use when: (1) creating hun...
openclaw skills install p-seoThe core principle: never ask AI to write freeform content. Ask it to fill a strict JSON schema.
Content = JSON data. Design = React components. These two layers never mix.
Niche Taxonomy (309 niches) → AI fills JSON schema → Validated JSON files → React renderers → Published pages
Why schemas beat freeform:
This is the most important investment. Rich niche context is what separates useful pSEO from thin name-swapped filler.
For each niche, define:
{
"slug": "travel",
"name": "Travel",
"context": {
"audience": "Armchair travelers, digital nomads, family vacation planners",
"pain_points": "Seasonal traffic swings, high competition for destination keywords",
"monetization": "Affiliate (booking, gear), display ads, sponsored trips",
"content_that_works": "Itineraries, cost breakdowns, off-the-beaten-path guides",
"subtopics": ["budget travel", "luxury travel", "adventure travel", "solo travel"]
}
}
Start with 20-50 niches, expand to 300+ for scale. This context gets injected into every generation prompt — it's what makes a "travel SEO checklist" different from a "health SEO checklist."
See references/niche-taxonomy.md for the full niche structure and 20 starter niches.
Each content type gets its own schema. Constraints are intentional — they force consistent output.
Example: Resource Article Schema
interface ResourceArticle {
meta: {
content_type: string;
niche: string;
};
seo: {
title: string; // templated, NOT AI-generated
description: string;
keywords: string[];
};
content: {
intro: string;
sections: {
heading: string;
items: {
title: string;
description: string;
difficulty?: 'beginner' | 'intermediate' | 'advanced';
potential?: 'high' | 'medium' | 'standard';
}[]; // exactly 15-20 per section
}[];
pro_tips: string[]; // exactly 5
};
}
Hard constraints (exact counts, required fields) prevent 8-item pages next to 40-item pages. See references/schema-library.md for 6 ready-to-use schemas.
| Category | Share | Notes |
|---|---|---|
| Resource pages | ~58% | Idea lists, checklists, calendars, guides, templates — 34 content types × N niches |
| Comparison pages | ~1% | Smallest category — most obvious, least differentiated |
| Free tools | ~15% | Actual working tools with niche-specific examples |
| Checklist pages | ~10% | Interactive, niche-aware |
| Guide pages | ~8% | Long-form, structured |
| Template pages | ~8% | Downloadable/fillable |
Resource pages are the highest-volume opportunity. Start there.
Use Gemini Flash (cost-to-quality ratio beats GPT-4 for structured JSON at volume).
Why Gemini Flash:
Generation prompt pattern:
Given this niche context: {niche_json}
Fill this schema: {schema}
Content type: {content_type}
Title template: {title}
Return ONLY valid JSON matching the schema. No prose, no markdown.
Validation: After generation, validate every file against the TypeScript schema. Reject and retry any that fail. At 13,000 pages, ~2-5% failure rate is normal.
Speed: 13,000+ pages in under 3 hours with parallel workers (10-20 concurrent API calls).
Each content type gets its own specialized renderer. The renderer consumes the JSON and handles all presentation.
/renderers/
ResourceArticleRenderer.tsx — with filtering by category/difficulty
ChecklistRenderer.tsx — interactive checkboxes
ComparisonTableRenderer.tsx — structured tables
FreeToolRenderer.tsx — working tool UI
Key rule: Renderers never call AI. They only consume pre-generated JSON. This means you can:
references/niche-taxonomy.md — Niche structure + 20 starter nichesreferences/schema-library.md — 6 ready-to-use content type schemasWhen generating pSEO content for gotolstoy.com, always load these files before generating any content:
~/.openclaw/workspace/tolstoy-context/brand-voice.md~/.openclaw/workspace/tolstoy-context/competitor-analysis.md~/.openclaw/workspace/tolstoy-context/features.md~/.openclaw/workspace/tolstoy-context/style-guide.md~/.openclaw/workspace/tolstoy-context/writing-examples.md~/.openclaw/workspace/tolstoy-context/target-keywords.md~/.openclaw/workspace/tolstoy-context/internal-links-map.md~/.openclaw/workspace/tolstoy-pseo/schemas/~/.openclaw/workspace/tolstoy-pseo/SCALE-PLAN.md| Type | Count | Status |
|---|---|---|
| Comparison pages (Tolstoy vs X) | 8 | 1 done (Rep AI) |
| Topic/gap pages (category attack) | 7 | 0 done |
| Use case pages | 4 | 0 done |
Highest priority gaps (Tolstoy absent from AI Overviews):
Tolstoy blog runs on Webflow CMS. Publishing flow:
POST /v2/collections/{collection_id}/itemsPOST /v2/collections/{collection_id}/items/{item_id}/publishRequired fields for Webflow blog item (to be confirmed with API key):
name (post title)slug (URL slug)body (HTML content)meta-title, meta-description (SEO fields)published (boolean)