Skill: chichoss/p-seo (version 1.0.0)

--- name: pseo-generator description: "Build Programmatic SEO 2.0 systems at scale — AI-generated content using strict JSON schemas, niche taxonomy, and React renderers. Use when: (1) creating hundreds or thousands of programmatic pages, (2) building a niche taxonomy for pSEO content, (3) designing JSON schemas for AI-generated content types, (4) separating content generation from UI presentation, (5) generating resource pages, comparison pages, free tools, or checklist pages at scale. NOT for: traditional one-off page writing, keyword research only, or thin AI content that ignores niche context." --- # Programmatic SEO 2.0 — Agent Skill Reference The 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. ## System Architecture ``` Niche Taxonomy (309 niches) → AI fills JSON schema → Validated JSON files → React renderers → Published pages ``` **Why schemas beat freeform:** - Consistent structure across all pages - Predictable output quality - Pages are validatable and type-safe - Redesign UI without regenerating content - Scale to 10,000+ pages without quality degradation ## Step 1: Build the Niche Taxonomy This is the most important investment. Rich niche context is what separates useful pSEO from thin name-swapped filler. For each niche, define: ```json { "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. ## Step 2: Design JSON Schemas per Content Type Each content type gets its own schema. Constraints are intentional — they force consistent output. **Example: Resource Article Schema** ```typescript 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. ## Step 3: The 6 Content Categories | 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. ## Step 4: Generation at Scale Use Gemini Flash (cost-to-quality ratio beats GPT-4 for structured JSON at volume). **Why Gemini Flash:** - Native structured JSON output (no markdown wrapping to parse) - Cheap enough for 10,000+ pages - Fast enough for batch generation **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). ## Step 5: React Renderers 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: - Redesign any page without regenerating content - A/B test layouts without touching data - Add new niches without touching UI ## Key Metrics (Jake Ward experiment, 60 days) - 13,000+ pages live - Weekly organic clicks: 971 → 5,500 (+466%) - ~50% of pages not yet indexed (curve still going up) - Generation time: < 3 hours for all 13,000 pages ## Quick Start Checklist - [ ] Define 20+ niches with full context (audience, pain points, monetization, subtopics) - [ ] Choose 2-3 content types to start (resource pages recommended) - [ ] Write strict TypeScript schemas with hard constraints - [ ] Build generation script with niche injection and JSON validation - [ ] Build React renderers per content type - [ ] Generate first batch (start with 100 pages to validate quality) - [ ] Review output — check niche specificity, not just structure - [ ] Scale up generation - [ ] Submit sitemap, monitor indexation rate ## References - `references/niche-taxonomy.md` — Niche structure + 20 starter niches - `references/schema-library.md` — 6 ready-to-use content type schemas --- ## Tolstoy-Specific Configuration When generating pSEO content for **gotolstoy.com**, always load these files before generating any content: - **Brand voice:** `~/.openclaw/workspace/tolstoy-context/brand-voice.md` - **Competitor analysis:** `~/.openclaw/workspace/tolstoy-context/competitor-analysis.md` - **Features:** `~/.openclaw/workspace/tolstoy-context/features.md` - **Style guide:** `~/.openclaw/workspace/tolstoy-context/style-guide.md` - **Writing examples:** `~/.openclaw/workspace/tolstoy-context/writing-examples.md` - **Target keywords:** `~/.openclaw/workspace/tolstoy-context/target-keywords.md` - **Internal links map:** `~/.openclaw/workspace/tolstoy-context/internal-links-map.md` - **Schemas:** `~/.openclaw/workspace/tolstoy-pseo/schemas/` - **Scale plan:** `~/.openclaw/workspace/tolstoy-pseo/SCALE-PLAN.md` ### Tolstoy Voice Rules (non-negotiable) 1. **Positioning:** Always use "AI Agent for Ecommerce" — never "tool" or "software" 2. **Products:** Name specifically: AI Studio, AI Player, AI Shopper 3. **Vocabulary:** "at scale," "autonomous," "closed loop," "without manual work" 4. **Tone:** Second-person ("you"), data-forward, peer-to-peer operator voice 5. **Proof metrics:** 7x PDP conversion lift, 232% AOV uplift, 11x conversion rate with AI Shopper, 2,000+ brand partners 6. **Do NOT:** Name competitors directly in body copy — stay category-level 7. **Closed loop framing:** AI Studio creates → AI Player distributes → AI Shopper converts → data loops back ### Tolstoy Content Map (20 pages total) | 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): - "Best AI agent apps for Shopify 2026" - "Best AI agents for Shopify Plus brands" - "Best AI agents for dynamic product pages on Shopify" - "AI agents for DTC brands" - "Virtual try-on for fashion ecommerce" ### Webflow Publishing (when API key is available) Tolstoy blog runs on Webflow CMS. Publishing flow: 1. Generate content JSON against schema 2. Render to HTML/markdown via renderer 3. POST to Webflow CMS API: `POST /v2/collections/{collection_id}/items` 4. Publish item: `POST /v2/collections/{collection_id}/items/{item_id}/publish` Required 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)


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)