pseo-discovery
Skill54 starsChanged 15 days agoMITView on GitHub
Analyze a codebase and business context to discover programmatic SEO opportunities, identifying what page types to generate, what data assets exist, and what search intent can be matched at scale. Use when starting a new pSEO project, when the user isn't sure what to build programmatically, or when exploring what structured data exists in the codebase or business that could power scalable pages.
1 other project uses a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- karrolcia/hippocampusedited, first seen Mar 2, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 1
- karrolcia/hippocampus★ 1392% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository17 other files it gives its agents.
- gscSkill
- pseo-auditSkill
- pseo-dataSkill
- pseo-linkingSkill
- pseo-llm-visibilitySkill
- pseo-metadataSkill
- pseo-orchestrateSkill
- pseo-performanceSkill
- pseo-quality-guardSkill
- pseo-scaleSkill
- pseo-schemaSkill
- pseo-templatesSkill
- seo-content-refreshSkill
- seo-i18nSkill
- seo-log-analysisSkill
- seo-migrationSkill
- seo-regression-guardSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
21 rules. About 0 are common, 19 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈19
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 16
Data-first: Only propose page types backed by structured data that exists or can be sourced
- Distinctive: line 17
Intent-matched: Every proposed page type must target a real search intent with volume
- Distinctive: line 26
Search the codebase for existing structured data that could power pages:
- Distinctive: line 29
Search for schema definitions (Prisma, Drizzle, TypeORM, Mongoose, SQL migrations)
- Distinctive: line 34
Check for headless CMS configs (Contentful, Sanity, Strapi, etc.)
- Distinctive: line 41
Check for paginated endpoints (signals large datasets)
- Very specific: line 44
Search for JSON, CSV, YAML, MDX files in data/, content/, src/data/ directories
- Distinctive: line 46
Check for categorization or taxonomy structures
- Distinctive: line 75
Check for long-tail variations that indicate intent depth
- Distinctive: line 76
Verify that existing top results are not exclusively high-authority domains
- Distinctive: line 117
If 3+ of these elements are essentially the same text with different proper nouns, the data is insufficient.
- Distinctive: line 150
Search for the target keyword patterns and see what ranks
- Distinctive: line 151
Check if competitors have programmatic pages (signs: similar URL patterns, templated content, large indexed page counts)
- Distinctive: line 153
Look for gaps they haven't covered (long-tail variations, underserved locations, new categories)
- Very specific: line 203
If $ARGUMENTS specifies a focus:
- Distinctive: line 226
Elevate content quality requirements: Every page needs cited authoritative sources, expert attribution, and review processes
- Distinctive: line 248
If running within a single Claude Code session, the report can also be kept in conversation context.
- Distinctive: line 255
If the codebase has no usable structured data, say so.
- Distinctive: line 256
If a page type would produce thin or near-identical pages, flag it as rejected with a clear reason.
- Distinctive: line 260
Runs before: All other pseo-* skills
- Distinctive: line 262
Independent of: All implementation skills - this is pure research
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
pSEO Discovery
Analyze the codebase, business context, and market to determine what programmatic SEO pages can and should be built. This skill answers the question: "What should we generate, and do we have the data to do it?"
This skill runs BEFORE pseo-audit. The audit checks if the codebase is ready; this skill figures out what to build.
Core Principles
- Data-first: Only propose page types backed by structured data that exists or can be sourced
- Intent-matched: Every proposed page type must target a real search intent with volume
- Differentiated: Each page must be able to produce genuinely unique content - not just variable swaps
- Feasible: Proposals must be realistic given the current data, codebase, and team capacity
- Business-aligned: pSEO pages should serve the business's actual audience and goals
Discovery Procedure
1. Explore the Codebase for Data Assets
Search the codebase for existing structured data that could power pages:
Database/ORM models:
- Search for schema definitions (Prisma, Drizzle, TypeORM, Mongoose, SQL migrations)
- Identify entities with many records (products, locations, services, users, listings, articles)
- Note which entities have rich attributes (descriptions, categories, images, metadata)
CMS content types:
- Check for headless CMS configs (Contentful, Sanity, Strapi, etc.)
- Identify content types and their field schemas
- Count records per content type
API endpoints:
- Map all API routes and their response shapes
- Identify list endpoints that return collections of entities
- Check for paginated endpoints (signals large datasets)
Static data files:
- Search for JSON, CSV, YAML, MDX files in
data/,content/,src/data/directories - Count records and inspect field richness
- Check for categorization or taxonomy structures
What to extract per data source:
- Entity name and count (e.g., "2,500 products", "150 cities", "80 services")
- Available fields (especially: name, description, category, attributes, images)
- Relationships between entities (product → category, service → location)
- Data freshness (how often updated, is there a lastModified field)
2. Map Business Entities to Page Types
For each data asset found, evaluate whether it can power a pSEO page type:
| Question | Must answer "yes" |
| Are there 50+ unique records? | Minimum for pSEO to make sense |
| Does each record have enough data for a full page? | Title, description, 3+ unique attributes |
| Would someone search for this? | Real search intent exists |
| Can each page be meaningfully different? | Not just variable swaps |
| Does this serve the business? | Drives traffic the business can convert |
Common pSEO page patterns by business type: see references/pseo-patterns.md. In short: pick page types where each record is a real entity with its own data (products, listings, locations with real local data, integrations, glossary terms), and compare them against the risk table in step 3.
3. Identify Keyword Patterns and Search Intent
For each proposed page type, validate that search demand exists:
Keyword pattern analysis:
- Identify the base keyword pattern (e.g.,
[service] in [city],best [product] for [use-case]) - Estimate volume per pattern using keyword research tools or inferred demand
- Check for long-tail variations that indicate intent depth
- Verify that existing top results are not exclusively high-authority domains
Intent classification per page type:
- Informational: User wants to learn (guides, definitions, how-tos)
- Commercial investigation: User is comparing options (comparisons, reviews, "best X")
- Transactional: User wants to buy/sign up (product pages, pricing, service pages)
- Navigational: User wants a specific entity (brand pages, location pages)
Each pSEO page type should clearly map to one intent category.
Pattern risk under Google spam policies (state as of 2026-10):
| Pattern | Risk | Why |
| City x service pages with only the place name swapped | High | Doorway policy: pages "targeted at specific regions or cities that funnel users to one page"; also scaled content abuse |
| Many pages for query variations or fan-out queries of one intent | High | Named in Google's AI optimization guide (2026-05-15) as scaled content abuse; also aimed at manipulating AI answers |
| "Best X for Y" lists with no real data or first-hand testing | High | Commodity content; rater guidelines 4.6.6 (little-to-no effort, originality or added value) |
| Substantially similar pages closer to search results than a browseable hierarchy | High | Doorway policy wording |
| Auto-translated or synonymized copies of existing pages | High | Scaled content abuse (scraping, translation without value) |
| Pages built only on scraped or aggregated third-party content | High | Scraping policy: no substantial added value |
| Third-party content hosted on a strong domain mainly for its ranking signals | High | Site reputation policy (updated 2026-08-28) |
| Pages that cover a real entity with proprietary or first-hand data (listings, prices, stats, measurements) | Viable | Value comes from the data, each page differs substantially |
| Interactive tools and calculators with unique inputs/outputs | Viable | Custom functionality counts as effort in rater guidelines |
| Comparisons backed by first-hand data or testing | Viable | Non-commodity content |
| Location pages with real local data (inventory, staff, prices, reviews, regulations) in a browseable hierarchy | Viable with care | Needs substantive per-location content and a clear hierarchy |
| Glossary, integration, profile pages with unique facts per record | Viable with care | Depends on per-record depth |
Google publishes no numeric page-count or velocity limits. Judge each page type on added value, not volume. If a page type falls in a High row and the data does not clearly change that, reject it in the report.
4. Evaluate Data Sufficiency for Content Uniqueness
For each proposed page type, assess whether the data produces genuinely unique pages:
The Content Differentiation Test: Take 5 random records. For each, write out what the page would contain:
- Title
- H1
- Intro paragraph
- Main content sections
- Real questions answered with page-specific data (not templated FAQ)
If 3+ of these elements are essentially the same text with different proper nouns, the data is insufficient. Either:
- Enrich the data (add more attributes, descriptions, real Q&A per record)
- Combine data sources (e.g., product data + user reviews + competitor data)
- Narrow the page type to records with richer data
- Abandon the page type as a pSEO candidate
Minimum data requirements per page:
- 2+ unique text fields beyond title and description (for body content)
- 3+ structured attributes (for data tables, stat highlights)
- Category or taxonomy data (for hub-spoke linking)
- Ideally: page-specific answers to real user questions (for content depth; FAQ rich results no longer show in Google, so do not plan FAQPage schema)
5. Assess URL Structure and Taxonomy
Propose a URL hierarchy for the pSEO pages:
/{category}/{slug} # standard
/{location}/{service} # location-based
/{product-type}/{product-slug} # e-commerce
/{topic}/{subtopic} # content-basedCheck:
- Will all slugs be unique within their URL namespace?
- Does the hierarchy create natural hub-spoke relationships?
- Is the URL structure human-readable and keyword-inclusive?
- How deep is the hierarchy? (Maximum 3 levels recommended)
6. Competitive Landscape Check
Identify whether competitors are already doing pSEO for the same patterns:
- Search for the target keyword patterns and see what ranks
- Check if competitors have programmatic pages (signs: similar URL patterns, templated content, large indexed page counts)
- Assess competitor content quality - can you do meaningfully better?
- Look for gaps they haven't covered (long-tail variations, underserved locations, new categories)
7. Propose a pSEO Strategy
Compile findings into a ranked list of pSEO opportunities.
Output Format
## pSEO Discovery Report
### Data Assets Found
| Entity | Record Count | Key Fields | Source |
|--------|-------------|------------|--------|
| [entity] | [count] | [fields] | [DB/CMS/API/files] |
### Proposed Page Types (ranked by opportunity)
#### 1. [Page Type Name]
- **Pattern**: [URL pattern, e.g., /services/[service]-in-[city]]
- **Record count**: [number of pages this would generate]
- **Search intent**: [informational / commercial / transactional]
- **Keyword pattern**: [e.g., "[service] in [city]"]
- **Data source**: [where the data comes from]
- **Content uniqueness**: [High / Medium / Low - with justification]
- **Data gaps**: [what fields are missing or need enrichment]
- **Feasibility**: [Ready / Needs data enrichment / Needs new data source]
#### 2. [Next page type...]
### Rejected Candidates
| Entity | Reason Rejected |
|--------|----------------|
| [entity] | [too few records / insufficient data / no search intent / ...] |
### Recommended URL Structure
[Proposed hierarchy with examples]
### Data Enrichment Needed
[List of data fields that need to be added to unlock page types]
### Next Steps
1. [Confirm page types with stakeholder]
2. [Enrich data where needed]
3. [Run pseo-audit on the codebase]
4. [Begin implementation with pseo-data]Scope Parameter
If $ARGUMENTS specifies a focus:
all(default): Full discoverycodebase: Only analyze existing data assets in the code (steps 1-2)business: Focus on business entity mapping and page type proposals (steps 2-4)keywords: Focus on keyword patterns and competitive landscape (steps 3, 6)
Section numbers above refer to the numbered steps under Discovery Procedure.
YMYL Risk Assessment
Google's September 2025 Quality Rater Guidelines expanded YMYL (Your Money or Your Life) to include civic information alongside health, finance, and legal content. pSEO in YMYL verticals carries elevated risk.
YMYL categories (as of September 2025):
- Health and medical information
- Financial information (investing, taxes, loans, insurance)
- Legal information
- Civic information (voting, government, public trust)
- Safety information (product safety, emergency procedures)
- News about major events
If the proposed page types fall into ANY YMYL category:
- Flag the risk explicitly in the discovery report
- Elevate content quality requirements: Every page needs cited authoritative sources, expert attribution, and review processes
- Evaluate if pSEO is appropriate at all: YMYL content often requires human expert review per page, which conflicts with the "programmatic" approach. Be honest about this tension.
- Recommend stricter quality guard thresholds: Higher minimum word counts, stricter uniqueness requirements, mandatory E-E-A-T fields
- Consider hybrid approach: Programmatic data structure + human-reviewed content per page
Discovery output should include a YMYL assessment:
### YMYL Assessment
- YMYL category: [None | Health | Finance | Legal | Civic | Safety | News]
- Risk level: [Low | Medium | High]
- Recommendation: [Standard pSEO OK | Needs elevated quality standards | Human review per page required | pSEO not recommended for this vertical]Output Artifact
Save the discovery report to .pseo/discovery-report.md in the project root. This file is consumed by pseo-audit and pseo-orchestrate to inform subsequent phases. The file must include at minimum:
- Confirmed page types with their URL patterns
- Data source locations (file paths, API endpoints, CMS content types)
- YMYL assessment (if applicable)
- Data gaps that need enrichment before implementation
If running within a single Claude Code session, the report can also be kept in conversation context. The file serves as a persistent artifact for multi-session workflows.
Important Constraints
- This is a research-only skill. Do not modify code; the only file written is
.pseo/discovery-report.md. - Be honest about data gaps. Don't propose page types the data can't support.
- Quantity of pages is not the goal. 200 genuinely unique pages beats 5,000 thin pages.
- If the codebase has no usable structured data, say so. The answer may be "build the data layer first" or "this business isn't a good fit for pSEO."
- If a page type would produce thin or near-identical pages, flag it as rejected with a clear reason.
Relationship to Other Skills
- Runs before: All other pseo-* skills
- Feeds into: pseo-audit (what to look for), pseo-data (what models to build)
- Independent of: All implementation skills - this is pure research
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

