// site & deploy
pSEO
/ttm-pseo
Generate programmatic SEO routes (blog, use-case, comparison, alternative) inside your existing /ttm-landing site. Each template has dedicated anatomy and content playbook. JSON CMS input drives generation. AEO + SEO optimized.
Overview
pSEO generates programmatic SEO routes — blog, use-case, comparison, and alternative pages — inside your existing ttm-landing site. Each template has its own page anatomy and content playbook, and generation is driven by JSON CMS input. Output is optimized for both classic SEO and AEO (answer-engine optimization).
Use it when you want to scale the long tail of "X vs Y" and "alternative to X" queries that still pay off in the AI-search era. The trick is that ungoverned pSEO produces thousands of near-duplicate, positioning-drifted pages — so every generated page passes the same gate wall as a single landing page, just in bulk. That gate wall is what makes pSEO defensible at scale.
Invoke it with ttm-pseo. Subcommands: ttm-pseo new <template> <slug> creates a single page; ttm-pseo from-json <template> <path-to-json> creates N pages from a JSON array; and ttm-pseo list enumerates every pSEO route in the site. <template> is one of: blog, use-case, comparison, alternative.
How it works
Step 0: First-run inline education
Read .taketomarket/CONFIG.md. Parse first_run_seen (object) and inline_education (boolean, default true).
If inline_education is false: skip this step. Else if first_run_seen.ttm-pseo is not true, print the explainer below verbatim, then mark this skill as seen:
node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-pseoUse this exact check (bash) to decide whether to print: node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-pseo --raw — the JSON seen field is true once the explainer has run before.
Explainer for ttm-pseo
ttm-pseo is programmatic SEO: given a template and a dataset (competitors-vs-you, alternatives, integrations, etc.), it generates N landing pages with consistent positioning across all of them. Each page passes the same gate wall as a single landing page, but in bulk.
Why it matters: pSEO is one of the few SEO plays still worth running in the AI-search era because the long tail of "X vs Y" queries doesn't get cannibalized as quickly. The catch is that ungoverned pSEO produces thousands of near-duplicate, positioning-drifted pages. The gate wall is what makes pSEO defensible at scale.
(Canonical source: references/inline-education-blurbs.md. Embedded verbatim because workflows do not @-resolve files at runtime.)
Required reading:
${CLAUDE_PLUGIN_ROOT}/references/pseo-page-anatomy.md${CLAUDE_PLUGIN_ROOT}/references/pseo-templates/[template]-anatomy.md${CLAUDE_PLUGIN_ROOT}/references/pseo-templates/[template]-content-playbook.md${CLAUDE_PLUGIN_ROOT}/templates/pseo/[template]-cms-schema.json${CLAUDE_PLUGIN_ROOT}/playbooks/pseo.md(delivered in P6).taketomarket/POSITIONING.md,BRAND.md,PRODUCT-DNA.md,ICP.md
Step 1: Verify ttm-landing is run
Read .taketomarket/CONFIG.md for landing_path. If not set: print "Run /ttm-landing first" and exit.
Step 2: Parse args
<template> must be one of: blog, use-case, comparison, alternative. <sub> is either new, from-json, or list.
Step 3 (new): Generate one page
Read appropriate anatomy + content playbook + CMS schema.
AskUserQuestion to gather CMS-schema-required fields, or:
- For blog: title, tldr, key sections (h2 list), takeaways, FAQ.
- For use-case: useCase name, problem, feature pillars, walkthrough steps.
- For comparison: competitor, comparison table rows, when-we-win, when-they-win.
- For alternative: competitor, why-people-leave, why-we-are-alternative, migration steps.
Validate against CMS schema. If invalid: prompt to fix.
Generate page using content playbook guidance.
Render as Next.js page at [landing_path]/app/[route]/[slug]/page.tsx:
/blog/[slug]for blog/use-cases/[slug]for use-case/vs/[slug]for comparison/alternatives/[slug]for alternative
Include Schema.org markup (Article + FAQPage + BreadcrumbList).
Mandatory humanize step on the generated copy.
Update sitemap.ts and public/llms.txt to include new route.
Step 4 (from-json): Batch generate
Parse JSON file. Validate each entry against schema. For each: same as Step 3 but skip user-question phase.
Step 5 (list): Just enumerate
List all existing pSEO routes by scanning [landing_path]/app/{blog,use-cases,vs,alternatives}/.
Step 6: Quality gates
Run gates from quality-gates.md on each new page.
Step 7: Print next steps
What if this doesn't fit?
Looks like ttm-pseo can't do that yet.
- Want a new skill?
ttm-request-skill - Existing skill needs work?
ttm-improve-skill