pseo-audit
Audit programmatic SEO program health for penalty risk, content quality at scale, indexation efficiency, and scaling readiness. Based on the Value Threshold Framework. Use when asked for "pSEO audit",
SKILL.md.claude/skills/pseo-audit/SKILL.md
GitHubProgrammatic SEO Health Audit
You are a Programmatic SEO Strategist specializing in scaling content safely. Your job: evaluate the overall health of a pSEO program using the Value Threshold Framework, detect penalty risk signals, score quality at scale, and provide a scaling readiness assessment.
This is NOT a page-by-page content audit (use seo-pseo-content-auditor for that). This skill evaluates the strategic health of the entire pSEO program.
When this skill activates: pSEO Audit: Initializing program health assessment...
Core Philosophy
"Your fear of Google penalties isn't the enemy — it's your quality control system."
Google doesn't penalize automation. Google penalizes value deficiency at scale. The four official penalty triggers:
- Doorway pages (manual action): Ranking-focused pages with funneling, no per-variation unique value
- Automatically generated content (manual action): Automation without unique value
- Thin content at scale (algorithmic): Pages existing primarily for search engines, not humans
- Index bloat (algorithmic): More pages than domain authority supports, crawl budget waste
Success = systematically scaling genuinely useful pages, not maximizing page count.
Input / Arguments
| Argument | Default | Description |
|---|---|---|
--deep |
(off) | Sample 20+ pages instead of 10, run engagement tests |
--pages=N |
10 |
Number of pages to sample for quality scoring |
--alert-only |
(off) | Only report Yellow/Red flag conditions, skip details |
Project Context
pSEO Categories
This project has ~337 English base pages across multiple categories in app/seo/data/:
| Category | Data File | Route Pattern | Notes |
|---|---|---|---|
| scale | scale.json | /scale/[slug] | Localized (7 locales) |
| formats | formats.json | /formats/[slug] | Localized |
| use-cases | use-cases.json | /use-cases/[slug] | Localized |
| tools | tools.json | /tools/[slug] | Localized |
| alternatives | alternatives.json | /alternatives/[slug] | Localized |
| platforms | platforms.json | /platforms/[slug] | Localized |
| device-optimization | device-optimization.json | /device-optimization/[slug] | Localized |
| photo-restoration | photo-restoration.json | /photo-restoration/[slug] | Localized |
| industry-insights | industry-insights.json | /industry-insights/[slug] | Localized |
| free | free.json | /free/[slug] | Localized |
| guides | guides.json | /guides/[slug] | English-only |
| format-conversion | format-conversion.json | /format-conversion/[slug] | English-only |
| format-scale | format-scale.json | /format-scale/[slug] | English-only |
| bulk-tools | bulk-tools.json | /bulk-tools/[slug] | English-only |
| camera-raw | camera-raw.json | /camera-raw/[slug] | English-only |
| comparison | comparison.json | /comparison/[slug] | English-only |
| competitor-comparisons | competitor-comparisons.json | /competitor-comparisons/[slug] | English-only |
| platform-format | platform-format.json | /platform-format/[slug] | English-only |
| social-media-resize | social-media-resize.json | /social-media-resize/[slug] | English-only |
| interactive-tools | interactive-tools.json | /tools/[slug] (interactive) | English-only |
| ai-features | ai-features.json | ⚠️ ZOMBIE (no route, 404s) | In ENGLISH_ONLY_CATEGORIES |
| device-specific | device-specific.json | ⚠️ orphan (not in PSEOCategory type) | No registered route |
| device-use | device-use.json | ⚠️ orphan | No registered route |
| content | content.json | ⚠️ orphan | No registered route |
Total: ~337 English base pages, ~1,324 total including localized variants (10 categories × 7 locales)
Sitemap Architecture
- 81 total sitemaps in sitemap.xml index
- 10 localized categories × 7 locales (en + de, es, fr, it, ja, pt) = 70 sitemaps
- 11 English-only sitemaps
- Sitemap index:
app/sitemap.xml/route.ts - Locale sitemaps:
app/sitemap-{category}-{locale}.xml/route.ts - English sitemaps:
app/sitemap-{category}.xml/route.ts - Config:
lib/seo/localization-config.ts(LOCALIZED_CATEGORIES, ENGLISH_ONLY_CATEGORIES)
Known Issues to Check
ai-features: zombie category (12 pages in data, no route handler, 404s)device-specific,device-use,content: orphan categories (not in PSEOCategory type)comparisons-expanded,personas-expanded,technical-guides,use-cases-expanded: orphan JSON files- 9 duplicate slugs across data files (interactive-tools overlaps with bulk-tools, free, social-media-resize)
Audit Framework
Phase 1: Data Collection
Collect these data points before any analysis:
1A: Sitemap & Page Inventory
# Count pages across all pSEO data files
ls app/seo/data/*.json | xargs -I{} sh -c 'echo "$(basename {}): $(cat {} | python3 -c "import sys,json; d=json.load(sys.stdin); print(len(d.get(list(d.keys())[0], [])))" 2>/dev/null || echo "?")"'
# Check sitemap index
curl -s https://myimageupscaler.com/sitemap.xml | grep -c "<loc>"
# Check English pSEO sitemap (e.g., scale category)
curl -s https://myimageupscaler.com/sitemap-scale.xml | grep -c "<loc>"
# Check a locale sitemap
curl -s https://myimageupscaler.com/sitemap-scale-de.xml | grep -c "<loc>"
Record:
- Total pSEO pages by category (from JSON files)
- Total URLs in sitemap index
- Sample category page counts from live sitemaps
- Zombie/orphan category status
1B: GSC Indexation & Performance
Invoke the /gsc-analysis skill to fetch and analyze GSC data:
Use the Skill tool: skill="gsc-analysis", args="myimageupscaler.com"
This runs the full GSC analysis (queries, pages, devices, countries, sitemaps, low-hanging fruit). From the GSC analysis output, extract pSEO-specific metrics:
- Total pSEO pages submitted vs indexed (indexation rate)
- Crawl stats for pSEO paths (if available)
- Average position for pSEO pages specifically (filter pages matching
/scale/,/formats/,/use-cases/,/tools/,/alternatives/,/platforms/, etc.) - Average CTR for pSEO pages vs site-wide CTR
- Impressions & clicks for pSEO pages vs site average
- "Not indexed" reasons breakdown (discovered, crawled, excluded, etc.)
- Low-hanging fruit keywords on pSEO pages (position 8-25 with high impressions)
- Cannibalization issues between pSEO pages
1C: Page Sample Collection
Select a stratified random sample of pages for quality testing:
- 30% from highest-performing pSEO pages (by clicks from GSC)
- 30% from lowest-performing pSEO pages
- 20% from newest pSEO pages (check JSON file
lastModifiedor file mtime) - 20% random selection across different categories
For each sampled page, use WebFetch to capture:
- Full rendered content
- Word count
- Unique data points present (upscaling-specific stats, format specs, device specs, etc.)
- Template text percentage
- Schema markup (use
pagespeedor inspect meta tags) - Internal links count
- CTA presence and position (Try Free / Upload Image buttons)
- Before/after examples presence
1D: Core Web Vitals (Page Performance)
Invoke the /pagespeed skill on 2-3 sampled pSEO pages to capture Core Web Vitals:
Use the Skill tool: skill="pagespeed", args="https://myimageupscaler.com/scale/[sampled-slug]"
Pick one high-performing and one low-performing pSEO page from the GSC data. Record:
- LCP (Largest Contentful Paint) — target < 2.5s (baseline: mobile 7.8s, desktop good)
- CLS (Cumulative Layout Shift) — target < 0.1
- TBT (Total Blocking Time) — target < 200ms
- Performance score (mobile & desktop) — baseline: mobile 56, desktop 91
- SEO score from Lighthouse — baseline: 100/100
These feed into the Engagement Sustainability Test (Phase 2, Test 3) and Quality Score (Phase 3).
Phase 2: Value Threshold Framework
Apply three tests to the sampled pages:
Test 1: Unique Answer Test
"If you can swap one modifier and retain 85%+ identical content, you fail."
For each sampled page:
- Extract the page content via WebFetch
- Compare with 2-3 sibling pages (same template, different image format/scale factor/use case)
- Calculate content uniqueness percentage (content that changes between siblings)
Image upscaler-specific signals to check:
- Does each scale page have unique guidance for that specific scale factor (2x vs 4x vs 8x)?
- Do format pages show unique quality/compression trade-offs per format (JPEG vs PNG vs WebP)?
- Do use-case pages have unique workflows for that specific use case?
- Do alternatives pages have genuine differentiators vs each competitor?
Scoring:
- 60%+ unique content across siblings: ✅ PASS (3 points)
- 40-59% unique: 🟡 MARGINAL (1 point)
- Below 40% unique: ❌ FAIL (0 points) — Scaled Content Abuse risk
Test 2: Data Substantiation Test
"Minimum 40% of page content requires unique data sources that competitors couldn't replicate."
For each sampled page, check for image-upscaling-specific data points:
- Format-specific compression ratios and quality metrics
- Scale-factor-specific use case guidance (print DPI requirements, screen resolutions)
- Platform-specific image dimension requirements (Instagram, Twitter, etc.)
- Device-specific optimization tips (iPhone camera RAW handling, etc.)
- Before/after example images
- Processing time benchmarks
- Supported file size limits
- Real comparison data vs competitors (for alternatives/comparison pages)
Scoring:
- 5+ unique data points with real data: ✅ PASS (3 points)
- 3-4 unique data points: 🟡 MARGINAL (2 points)
- 0-2 unique data points: ❌ FAIL (0 points)
Test 3: Engagement Sustainability Test
"Programmatic pages should match hand-crafted content engagement within 30%."
Compare pSEO page metrics against site-wide averages from GSC:
- CTR of pSEO pages vs site average
- Average position trend (improving, stable, declining)
- Impressions per page (growing, flat, declining over 90 days)
- Note: bounce rate / time on page not available via GSC — use as limitation
Scoring:
- Within 30% of site average: ✅ PASS (3 points)
- 30-50% below average: 🟡 MARGINAL (1 point)
- 50%+ below average: ❌ FAIL (0 points)
Value Threshold Score = Sum of three tests / 9 * 100 (0-100)
Phase 3: Automated Quality Scoring (0-100)
Score the overall pSEO program on five dimensions:
| Dimension | Points | How to Measure |
|---|---|---|
| Unique content percentage | 20 | Average uniqueness from Test 1 across all sampled pages |
| Unique data points per page | 15 | Average data substantiation from Test 2 |
| Engagement vs site average | 25 | CTR and position comparison from Test 3 |
| Organic traffic trend | 20 | Are pSEO pages gaining or losing impressions/clicks over 90 days? |
| Conversion actions | 20 | CTA presence (Try Free / Upload Image), above-fold, clear path |
Quality tiers:
- 80-100: 🚀 Excellent — safe to scale aggressively
- 60-79: ✅ Good — maintain current pace, optimize weak areas
- 40-59: ⚠️ Warning — pause scaling, enhance existing pages first
- Below 40: 🚨 Critical — stop creating, consider pruning worst performers
Phase 4: Traffic Light Assessment
Evaluate against three signal levels:
🟢 Green Flags (Safe to Scale)
Check each and report status:
- Indexation rate 60%+ of submitted pSEO pages
- pSEO page engagement within 30% of site average CTR
- Consistent or growing organic traffic per pSEO page
- 5-15 internal links per pSEO page
- Crawl efficiency above 50% (indexed / crawled ratio)
- Content uniqueness above 60% across sibling pages
- No manual actions in Search Console
- No zombie categories serving 404s (ai-features issue resolved)
🟡 Yellow Flags (Caution — Pause Scaling)
- Indexation rate 40-60%
- Engagement 30-50% below site average
- Flat or declining traffic per pSEO page over 90 days
- Crawl budget waste 30%+ (pages crawled but not indexed)
- More than 20% of pSEO pages with fewer than 3 unique data points
- Zombie/orphan categories in sitemap not serving valid pages
Yellow action: Pause new page creation. Audit top 100 pages. Implement improvements. Resume only after metrics recover.
🔴 Red Flags (Stop Immediately)
- Indexation rate below 40%
- Engagement 50%+ below site average
- Site-wide traffic decline after pSEO launches
- Manual action notice in Search Console
- Crawl errors above 10% on pSEO pages
- Duplicate content warnings affecting 20%+ of pSEO pages
- Average content uniqueness below 40% (variable substitution pattern)
Red action: Halt all page creation. Emergency quality improvements. Consider noindexing or deleting worst 30% of pages. Request reconsideration if manual action.
Phase 5: Scaling Readiness Assessment
Evaluate where the pSEO program sits on the maturity scale:
Stage Assessment
| Stage | Page Count | Requirements |
|---|---|---|
| Foundation | 0-100 | Baseline metrics established, monitoring in place, pilot pages live |
| Pilot | 100-500 | 70%+ indexation, engagement within 30% of average, zero crawl errors |
| First Scale | 500-2,000 | Automated quality checks, engagement tracking by page group |
| Growth | 2,000-10,000 | Conditional indexing, engagement features, scoring systems |
| Maturity | 10,000+ | AI-powered enhancement, dynamic personalization, competitive moat |
Current estimate: ~1,324 total pages (including locales) → likely Pilot → First Scale transition.
For the current stage, check:
- Are prerequisites met for the current stage?
- Are prerequisites met to advance to the next stage?
- What's blocking advancement?
Scaling Rate Recommendation
Based on current health:
- Quality Score 80+: 🚀 Scale 20-30% monthly
- Quality Score 60-79: ✅ Scale 10-15% monthly
- Quality Score 40-59: ⚠️ No scaling — improve existing pages
- Quality Score below 40: 🚨 Prune 20-30% of worst pages
Phase 6: Conditional Generation Model Compliance
Check if the pSEO system follows the four rules of safe content generation:
Rule 1: Data Requirement Gate
"Minimum 5 unique, valuable data points required per page (not just keyword swaps)"
- Does the template enforce minimum data requirements before generating a page?
- Are pages generated for combinations with insufficient data?
- Check
app/seo/data/JSON files for data completeness per category
Rule 2: Search Demand Validation
"Prioritize by actual search volume and user request signals"
- Are pages generated for keywords with actual search demand?
- Check if any pages target zero-volume keywords
- Cross-reference sitemap pages against keyword research in
docs/SEO/
Rule 3: Engagement-Based Indexing
"Publish with noindex initially, monitor 2-4 weeks, conditionally remove noindex if metrics pass"
- Does the system use conditional indexing?
- Or are all pages immediately indexed?
- Check
generateMetadatain pSEO page routes for robots directives
Rule 4: Continuous Quality Scoring
"Automated quality scoring identifies underperforming pages for enhancement or deprecation"
- Is there an automated quality monitoring system?
- Are underperforming pages flagged for review?
- Has any pruning been done historically? (check git history on JSON data files)
- Are SEO tests in
tests/unit/seo/covering quality thresholds?
Phase 7: Penalty Risk Score
Calculate an overall penalty risk score (0-100, higher = more risk):
| Risk Factor | Weight | Score Calculation |
|---|---|---|
| Content uniqueness below 60% | 25% | (60 - actual_uniqueness) * 2.5 if below 60%, else 0 |
| Indexation rate below 60% | 20% | (60 - actual_indexation) * 2.0 if below 60%, else 0 |
| No unique data points (variable swap only) | 20% | % of pages with fewer than 3 unique data points * 100 |
| Engagement 30%+ below site average | 15% | Normalized engagement gap percentage |
| Page count exceeds authority ratio | 10% | Pages / (DA * 10) if ratio > 1, capped at 100 (DA ≈ 0) |
| Missing conditional generation gates | 10% | 0, 33, 66, or 100 based on how many of 4 rules are missing |
Risk levels:
- 0-20: 🟢 Low risk — continue operations
- 21-40: 🟡 Moderate risk — implement monitoring improvements
- 41-60: 🟠 High risk — pause scaling, improve quality
- 61-80: 🔴 Critical risk — stop creation, begin pruning
- 81-100: 🆘 Emergency — immediate action required, mass noindex underperformers
Output Report
Write the report to docs/SEO/reports/pseo-audit-YYYY-MM-DD.md:
# Programmatic SEO Health Audit — MyImageUpscaler
**Date:** YYYY-MM-DD
**Auditor:** pSEO Audit Skill
**Pages in Program:** X total (by category breakdown)
**Pages Sampled:** N pages
**Mode:** Standard / Deep
---
## Executive Summary
### Overall Program Health: [EMOJI] RATING (Score/100)
| Metric | Value | Status | Benchmark |
| ---------------------- | ------- | -------- | ---------------------- |
| Quality Score | XX/100 | 🟢/🟡/🔴 | 80+ = 🟢 |
| Penalty Risk Score | XX/100 | 🟢/🟡/🔴 | Below 20 = 🟢 Safe |
| Indexation Rate | XX% | 🟢/🟡/🔴 | 60%+ = 🟢 |
| Content Uniqueness | XX% | 🟢/🟡/🔴 | 60%+ = 🟢 |
| Value Threshold Score | XX/100 | 🟢/🟡/🔴 | 67%+ = 🟢 |
| Scaling Stage | [Stage] | - | - |
| Scaling Recommendation | [Rate] | - | Based on quality score |
### Signal Status: 🟢 GREEN / 🟡 YELLOW / 🔴 RED
[1-2 sentence summary of the overall signal and what it means]
---
## 1. Value Threshold Framework Results
### Test 1: Unique Answer Test — ✅ PASS / 🟡 MARGINAL / ❌ FAIL
[Details of sibling comparison, uniqueness percentages, specific examples]
### Test 2: Data Substantiation Test — ✅ PASS / 🟡 MARGINAL / ❌ FAIL
[Details of unique data points found per page, what's present vs missing]
### Test 3: Engagement Sustainability Test — ✅ PASS / 🟡 MARGINAL / ❌ FAIL
[GSC metrics comparison: pSEO vs site average for CTR, position, impressions]
---
## 2. Quality Score Breakdown (XX/100)
| Dimension | Score | Max | Evidence |
| --------------------- | ----- | --- | -------------------------- |
| Unique Content % | XX | 20 | Avg XX% across siblings |
| Unique Data Points | XX | 15 | Avg X.X per page |
| Engagement vs Average | XX | 25 | CTR: X.X% vs X.X% average |
| Organic Traffic Trend | XX | 20 | [Growing/Stable/Declining] |
| Conversion Actions | XX | 20 | CTA above fold: X/N pages |
**Tier:** 🚀 Excellent / ✅ Good / ⚠️ Warning / 🚨 Critical
---
## 3. Traffic Light Assessment
### Green Flags Passing: X/8
[List each flag with status]
### Yellow Flags Triggered: X/6
[List each flag with status and evidence]
### Red Flags Triggered: X/7
[List each flag with status and evidence]
**Signal:** 🟢 GREEN / 🟡 YELLOW / 🔴 RED
---
## 4. Indexation Health
| Metric | Value | Benchmark | Status |
| ------------------------ | ----- | ----------- | -------- |
| Pages Submitted | X | - | - |
| Pages Indexed | X | 60%+ of sub | 🟢/🟡/🔴 |
| Indexation Rate | XX% | 60%+ | 🟢/🟡/🔴 |
| Not Indexed - Discovered | X | < 10% | 🟢/🟡/🔴 |
| Not Indexed - Crawled | X | < 15% | 🟢/🟡/🔴 |
| Not Indexed - Excluded | X | < 5% | 🟢/🟡/🔴 |
| Crawl Efficiency | XX% | 50%+ | 🟢/🟡/🔴 |
### Zombie/Orphan Category Status
| Category | Data File | Route | Status |
| ----------- | ------------- | -------- | ------------- |
| ai-features | 12 pages | None | ⚠️ 404 zombie |
| [others] | [pages count] | [route?] | [status] |
---
## 5. Penalty Risk Assessment (XX/100)
| Risk Factor | Score | Max | Evidence |
| -------------------------- | ----- | --- | --------- |
| Content Uniqueness Gap | XX | 25 | [details] |
| Indexation Gap | XX | 20 | [details] |
| Missing Data Points | XX | 20 | [details] |
| Engagement Gap | XX | 15 | [details] |
| Authority/Page Ratio | XX | 10 | [details] |
| Generation Gate Compliance | XX | 10 | [details] |
**Risk Level:** 🟢 Low / 🟡 Moderate / 🟠 High / 🔴 Critical / 🆘 Emergency
[Specific penalty risks identified with evidence]
---
## 6. Scaling Readiness
**Current Stage:** [Foundation / Pilot / First Scale / Growth / Maturity]
**Current Page Count:** X (English) / X (including locales)
**Next Stage Requirements:**
| Requirement | Met? | Current Value | Target |
| --------------- | ----- | ------------- | -------- |
| [Requirement 1] | ✅/❌ | [value] | [target] |
| [Requirement 2] | ✅/❌ | [value] | [target] |
| [Requirement 3] | ✅/❌ | [value] | [target] |
**Scaling Recommendation:** [XX% monthly / Pause / Prune]
---
## 7. Conditional Generation Compliance
| Rule | Implemented? | Evidence |
| -------------------------- | -------------------- | --------- |
| Data Requirement Gate | ✅ / 🟡 Partial / ❌ | [details] |
| Search Demand Validation | ✅ / 🟡 Partial / ❌ | [details] |
| Engagement-Based Indexing | ✅ / 🟡 Partial / ❌ | [details] |
| Continuous Quality Scoring | ✅ / 🟡 Partial / ❌ | [details] |
**Compliance:** X/4 rules implemented
---
## 8. Page Sample Details
| Page URL | Category | Uniqueness | Data Points | CTA | Schema | Links | Quality |
| --------------- | -------- | ---------- | ----------- | --- | ------ | ----- | ------- |
| /scale/[slug] | scale | XX% | X | Y/N | Y/N | X | XX/100 |
| /formats/[slug] | formats | XX% | X | Y/N | Y/N | X | XX/100 |
| ... | ... | ... | ... | ... | ... | ... | ... |
---
## 9. Prioritized Action Plan
### Immediate (This Week)
[Critical items with specific file paths and changes needed]
### Short-Term (This Month)
[High-impact improvements]
### Medium-Term (This Quarter)
[Scaling preparation and quality improvements]
### Ongoing Monitoring
[Metrics to track and alert thresholds]
---
## 10. Comparison with Best-in-Class
### How Top pSEO Programs Succeed
**Canva Model** (image editing tool pages):
- Unique per-format design templates with real examples
- Platform-specific dimension guides with visual previews
- Tool-specific tutorials that solve real workflow problems
**Cloudinary / Imgix Model** (image processing docs):
- Format comparison tables with real benchmark data
- Use-case specific transformation guides
- Before/after quality comparisons with real images
**Our Gap vs Best-in-Class:**
[Specific comparison of our pages against these models]
---
## Methodology
- **Framework:** Value Threshold Framework (Unique Answer, Data Substantiation, Engagement Sustainability)
- **Quality Scoring:** 5-dimension weighted scoring (0-100)
- **Penalty Risk:** 6-factor weighted risk assessment (0-100)
- **Data Sources:** GSC API, sitemap crawl, page content analysis, `app/seo/data/` JSON files
- **Reference:** [The Programmatic SEO Paradox](https://guptadeepak.com/the-programmatic-seo-paradox-why-your-fear-of-creating-thousands-of-pages-is-both-valid-and-obsolete/)
Alert System
If --alert-only is set, skip the full report and only output alerts:
🆘 Level 1: Manual Action Alert
- Trigger: Manual action notice in GSC
- Action: Halt all creation, audit flagged pages, implement fixes, submit reconsideration
- Recovery: 2-4 weeks for review
🔴 Level 2: Indexation Collapse Alert
- Trigger: 30%+ drop in indexed pSEO pages
- Action: Pause new pages 2-3 months, emergency quality improvements
- Recovery: 3-6 months
🔴 Level 3: Site-Wide Traffic Collapse Alert
- Trigger: 40%+ organic traffic drop within 2 weeks, multiple page types affected
- Action: Site-wide quality review, consider aggressive pruning
- Recovery: 3-12 months
⚠️ Warning 1: Engagement Deterioration
- Trigger: 15%+ bounce rate increase or 20%+ time-on-page decrease
- Action: Pause creation, user testing, engagement improvements
- Recovery: 2-4 weeks
⚠️ Warning 2: Crawl Budget Strain
- Trigger: Crawl rate decrease despite new pages, 40%+ "not indexed" ratio
- Action: 50% reduction in creation rate, improve internal linking, optimize page speed
- Recovery: 4-8 weeks
Execution Pipeline
Step 1: Initialize
- Parse arguments (
--deep,--pages=N,--alert-only) - Check for prior pSEO audit reports:
ls docs/SEO/reports/pseo-audit-*.md - Create output directory if needed:
mkdir -p docs/SEO/reports - Display execution plan
Step 2: Data Collection (Parallel)
Launch 4 parallel tasks:
- Task A: Read
app/seo/data/*.jsonto inventory all pSEO pages by category; check for zombie/orphan categories - Task B: Invoke
/gsc-analysis myimageupscaler.comskill to get full GSC data + analysis - Task C: Sample N pages and fetch their content via WebFetch (stratified across categories)
- Task D: Invoke
/pagespeedskill on 2-3 sampled pSEO pages for Core Web Vitals
Step 3: Analysis (Sequential)
- Run Value Threshold Framework tests on sampled pages
- Calculate Quality Score
- Evaluate Traffic Light signals
- Calculate Penalty Risk Score
- Assess Scaling Readiness
- Check Conditional Generation Compliance
Step 4: Codebase Check
Examine the pSEO system code for structural risks:
# Check pSEO route handlers for robots/noindex directives
grep -r "robots" app/seo/ app/scale/ app/formats/ app/use-cases/ --include="*.ts" --include="*.tsx"
# Check data completeness (fields per entry)
# Look at: app/seo/data/*.json - how much unique data per entry?
# Check: lib/seo/ - content generation / sitemap logic
# Check: tests/unit/seo/ - quality threshold tests
# Verify zombie categories
grep -r "ai-features" app/ lib/ --include="*.ts" --include="*.tsx"
Step 5: Report Generation
- Compile all findings into the report template
- Calculate trend vs prior audit (if exists — check
docs/SEO/reports/pseo-audit-*.md) - Write report to
docs/SEO/reports/pseo-audit-YYYY-MM-DD.md - Display summary to user
Error Handling
| Error | Action |
|---|---|
/gsc-analysis skill fails |
Fall back to manual GSC script if available, note in report |
/pagespeed skill fails |
Skip Core Web Vitals section, note limitation in report |
| Sitemap unreachable | Try localhost:3000, fall back to reading route files directly |
| WebFetch fails on pages | Reduce sample size, note in report |
| No prior audit for trends | Skip trend comparison, note "First audit" |
| Insufficient GSC data | Flag as limitation, score engagement as "N/A" |
| JSON parse fails | Note corrupted data file, flag as risk |
Skills Invoked by This Audit
These skills are called automatically during the audit — do NOT skip them:
| Skill | Phase | Purpose |
|---|---|---|
/gsc-analysis |
1B | GSC data: indexation, performance, low-hanging fruit, cannibalization |
/pagespeed |
1D | Core Web Vitals on sampled pSEO pages (LCP, CLS, TBT, scores) |
Related Skills & Agents
- seo-pseo-content-auditor (agent): Page-by-page content quality audit with Playwright
- pseo-system (skill): Creating and managing pSEO pages
- seo-audit (skill): General site-wide SEO audit
- seo-manager (skill): Full SEO orchestrator across all dimensions
- competitor-sitemap-spy (skill): Compare pSEO strategy against competitors
- gsc-analysis (skill): Google Search Console data fetching and analysis