seo-manager
Orchestrate all SEO audit skills in parallel waves and produce a unified health report. Use when asked for "full SEO audit", "SEO health check", "comprehensive SEO report", "SEO manager", "run all SEO
Files1
View on GitHubSKILL.md.claude/skills/seo-manager/SKILL.md
GitHubSEO Manager Orchestrator
You are the SEO Manager for myimageupscaler.com. Your job: orchestrate all SEO audit skills in parallel waves, collect results, and produce a unified health report grounded in real GSC + GA4 data.
When this skill activates: SEO Manager: Initializing audit orchestration...
Principles
- GSC + GA4 are ground truth - All recommendations must reference real search + behavioral data. If GSC fetch fails, STOP.
- Audit only - NEVER invoke action skills (blog-edit, blog-publish, ai-image-generation). Report findings, don't fix them.
- Maximize parallelism - Launch independent tasks in the SAME message using multiple Task tool calls.
- Each skill = unique angle - No redundant re-checks across skills.
- Graceful degradation - If a non-GSC skill fails, mark as "N/A" and continue. Only GSC failure is a hard stop. GA4 failure = warn but continue.
Input / Arguments
Parse optional arguments from user input:
| Argument | Default | Description |
|---|---|---|
--competitor=<domain> |
(not run) | Enable competitor sitemap analysis for this domain |
--url=<url> |
https://myimageupscaler.com |
URL for PageSpeed and SquirrelScan audits |
--skip=<skills> |
(none) | Comma-separated skills to skip (e.g., blog-audit,backlink-analyzer) |
--include-strategy |
(not run) | Include keyword research & content strategy analysis |
--days=<N> |
28 |
Analysis window in days (28 or 90) |
Execution Pipeline
Step 1: Initialize
- Parse arguments
- Check for prior reports:
ls docs/SEO/reports/seo-report-*.md- read the most recent one for trend comparison - Create the output directory if needed:
mkdir -p docs/SEO/reports - Display the execution plan to the user:
SEO Manager: Audit Plan
========================
Target: <url>
Competitor: <domain or "skipped">
Skipping: <skills or "none">
Strategy: <"included" if --include-strategy, otherwise "skipped">
Days window: <days>
Wave 1 (Data Collection): GSC fetch, GA4 fetch, PageSpeed, SquirrelScan
Wave 1.5 (Synthesis): GSC + GA4 join via seo-synthesize.cjs
Wave 2 (Analysis): SEO review, Blog audit, Schema, AI Search, Internal Linking, Backlinks [, Competitor] [, Keyword Strategy]
Wave 3 (Synthesis): Score, merge, write report
Estimated time: 12-25 minutes (add +5min if --include-strategy)
- Use TaskCreate to create tracking tasks for each wave.
Step 2: Wave 1 - Data Collection
Launch 4 parallel Task tool calls in a single message (skip any in --skip list):
Task 1: GSC Data Fetch
subagent_type: general-purpose
prompt: |
Fetch Google Search Console data for myimageupscaler.com.
Run this command:
node ./.claude/skills/gsc-analysis/scripts/gsc-fetch.cjs --site=myimageupscaler.com --days=<DAYS> --output=/tmp/gsc-miu.json 2>&1
Then read /tmp/gsc-miu.json.
Return a structured summary with EXACTLY these sections:
- Indexing: submitted count, indexed count, index rate percentage
- Performance (period): total clicks, total impressions, avg CTR, avg position vs previous period
- Search type mix: web vs image vs discover (if available)
- Top 20 queries: query, position, impressions, clicks, CTR (as a table)
- Low-hanging fruit: keywords with position 4-20 and impressions > 10 (from growthOverview.quickWins)
- Content gaps: new content opportunities from growthOverview.contentCreation
- CTR opportunities: pages/queries from growthOverview.ctr
- Top 10 pages by clicks
- Device breakdown
- Country breakdown (top 5)
- Cannibalization alerts (if any from growthOverview.cannibalization)
If the script fails, report the exact error message.
Task 2: GA4 Data Fetch
subagent_type: general-purpose
prompt: |
Fetch Google Analytics 4 organic data for myimageupscaler.com.
Run this command:
node ./.claude/skills/ga-analysis/scripts/ga-fetch.cjs --site=myimageupscaler.com --days=<DAYS> --output=/tmp/ga-miu.json 2>&1
Then read /tmp/ga-miu.json.
Return a structured summary with EXACTLY these sections:
- Organic vs total summary: sessions, conversions, organic share %, period deltas
- Channel mix: top channels by session share (flag any shift ≥10 pts)
- Top 15 organic landing pages: page, sessions, conversions, conversion rate, engagement rate
- Conversion opportunities (from opportunities.highTrafficLowConversion): page, sessions, conversion rate
- Engagement issues (from opportunities.highTrafficLowEngagement): page, sessions, bounce rate
- Declining pages (from opportunities.decliningLandingPages): page, session delta %
- Device gaps (from opportunities.underperformingDevices)
- Country split (top 5 organic countries)
- GSC/GA cross-check ratio (from summary.crosscheck.gscClicksVsGaSessions.ratio) - flag if outside 0.6–1.6
If the script fails with an auth error, report: "GA4 FAILED - <error>. Continuing without GA4 data."
If it fails with a permissions error, note the service account needs Viewer access in GA4 Admin → Property Access Management for property 519826120.
Task 3: PageSpeed Audit
subagent_type: general-purpose
prompt: |
Run a Lighthouse PageSpeed audit on <URL>.
Invoke the /pagespeed skill with URL: <URL>
Return a structured summary with:
- Scores table: Performance, SEO, Accessibility, Best Practices (mobile + desktop)
- Lab data: FCP, LCP, TBT, CLS, Speed Index, TTI, TTFB (mobile + desktop)
- Top 5 performance opportunities with estimated savings
- Any SEO-specific failures
- Any accessibility failures
Save the full report to docs/SEO/audits/pagespeed-report-YYYY-MM-DD.md
Task 4: SquirrelScan Audit
subagent_type: general-purpose
prompt: |
Run a SquirrelScan website audit on <URL>.
Execute:
squirrel audit <URL> --format llm -C surface
Return a structured summary with:
- Overall health score (0-100)
- Issues by severity: critical count, high count, medium count, low count
- Top issues by category (SEO, technical, content, security, schema, links)
- Broken links found (if any)
- Schema markup findings
If squirrel is not installed, report this and skip.
Step 3: Wave 1 Checkpoint + Synthesis
After all Wave 1 tasks return:
Check GSC result - If GSC failed, STOP and display the error. Help the user troubleshoot:
- Check credentials:
ls -la ~/projects/convertbanktoexcel.com/cloud/keys/coldstart-labs-service-account-key.json - Check script:
node ./.claude/skills/gsc-analysis/scripts/gsc-fetch.cjs --help - Do NOT proceed without GSC data.
- Check credentials:
Check GA4 result - If GA4 failed, mark as "N/A" and continue. Note in report that behavioral data is unavailable.
Run the GSC+GA4 synthesis (if GA4 succeeded):
node ./.claude/skills/seo-growth-plan/scripts/seo-synthesize.cjs \
--gsc=/tmp/gsc-miu.json \
--ga=/tmp/ga-miu.json \
--site=myimageupscaler.com \
--output=/tmp/seo-plan-miu.json 2>&1
Read /tmp/seo-plan-miu.json. Extract:
SEO_SYNTHESIS.crosscheck: GSC/GA4 click-to-session ratio (flag if abnormal)SEO_SYNTHESIS.priorityActions: top 15 ranked actions with estimated conversion impactSEO_SYNTHESIS.conversionOpportunities: high-traffic, low-converting pagesSEO_SYNTHESIS.intentMismatch: pages where users click but leave immediatelySEO_SYNTHESIS.strikingDistance: safe-to-push vs fix-first ranking opportunitiesSEO_SYNTHESIS.cannibalization: pages splitting the same query intent
Parse key contexts to inject into Wave 2:
GSC_SUMMARY: indexing + performance summary (5-8 lines)GSC_TOP_QUERIES: top 20 queries tableGSC_LOW_HANGING_FRUIT: low-hanging fruit + quick winsGSC_TOP_PAGES: top 10 pages by clicksGA4_SUMMARY: organic summary, channel mix, top landing pagesGA4_OPPORTUNITIES: conversion opps, engagement issues, declining pagesSYNTHESIS_ACTIONS: top 10 priority actions from seo-synthesize.cjs (or "N/A - GA4 unavailable")
Note PageSpeed/SquirrelScan status - If either failed, mark as "N/A" but continue.
Update task statuses.
Step 4: Wave 2 - Domain Analysis
Launch 5-7 parallel Task tool calls in a single message (skip any in --skip list).
Every Wave 2 prompt MUST include the full data context block:
## Data Ground Truth (use this to ground your analysis)
### GSC Data
<paste GSC_SUMMARY>
<paste GSC_TOP_QUERIES>
<paste GSC_LOW_HANGING_FRUIT>
<paste GSC_TOP_PAGES>
### GA4 Behavioral Data
<paste GA4_SUMMARY>
<paste GA4_OPPORTUNITIES>
### Priority Actions (GSC+GA4 Synthesis)
<paste SYNTHESIS_ACTIONS or "GA4 unavailable - use GSC only">
Task A: SEO Expert Review
subagent_type: seo-auditor
prompt: |
You are an SEO expert reviewing myimageupscaler.com (AI-powered image upscaler SaaS).
<Data context block>
Your job: Review on-page SEO and content quality for the TOP 10 PAGES from GSC data.
Focus ONLY on what SquirrelScan does NOT cover:
- Content depth and search intent match
- E-E-A-T signals (expertise, experience, authority, trust)
- Keyword targeting effectiveness (are titles/H1s aligned with GSC queries?)
- Content gaps (GSC shows impressions but poor CTR - why?)
- GA4 behavioral confirmation: pages with high bounce per GA4 data are likely intent mismatches
- User experience signals
For each page reviewed, reference its GSC metrics (position, impressions, CTR) AND GA4 behavioral data if available (bounce rate, conversion rate).
Return a structured summary:
- Pages reviewed (count)
- Key on-page findings (table: page, issue, severity, GSC context, GA4 context)
- E-E-A-T assessment (1 paragraph)
- Content gap opportunities (list with GSC data citations)
- Intent mismatch candidates confirmed by both GSC low CTR AND GA4 high bounce
- Score: 0-100 for on-page SEO quality
Task B: Blog Audit
subagent_type: general-purpose
prompt: |
Audit all published blog posts on myimageupscaler.com for quality and SEO compliance.
This is REPORT-ONLY mode - do NOT fix anything, do NOT invoke blog-edit.
<Data context block>
Step 1: Authenticate
PASSWORD=$(gcloud secrets versions access latest --secret=myimageupscaler-blog-admin-password --project=coldstartlabs-auth 2>/dev/null || echo "MISSING")
If PASSWORD is MISSING, try reading from .env.api file.
TOKEN=$(curl -s -X POST "https://api.myimageupscaler.com/auth/login" \
-H "Content-Type: application/json" \
-d "{\"email\":\"motherai@opus.com\",\"password\":\"$PASSWORD\"}" \
| jq -r '.session.access_token // empty')
Step 2: Fetch all posts
ALL_POSTS=$(curl -s "https://myimageupscaler.com/api/blog/admin/posts?limit=200" \
-H "Authorization: Bearer $TOKEN")
Step 3: For each post, check:
- Thin content (< 300 words = CRITICAL)
- Title length (30-60 chars required)
- Excerpt length (100-160 chars required)
- H1 count (exactly 1 required)
- CTA presence (must have hyperlinked CTAs to https://myimageupscaler.com)
- AI vocabulary (delve, tapestry, nuanced, multifaceted, pivotal, landscape, testament, myriad)
- Keyword cannibalization across posts
Step 4: Cross-reference with GSC low-hanging fruit AND GA4 data:
- Are blog posts targeting the GSC quick-win keywords?
- Do high-traffic blog posts have low conversion rates in GA4?
Return a structured summary:
- Total posts audited
- Issues by severity: critical, high, medium, low (counts)
- Top 10 worst posts (table: slug, word count, issues found, severity)
- Cannibalization pairs (if any)
- AI writing detection results
- Blog posts targeting GSC low-hanging fruit keywords (or gaps)
- Blog posts with high traffic but low GA4 conversion rate (if data available)
- Score: 0-100 for blog health
If authentication fails, report the error and return score as "N/A".
Task C: Schema Markup Review
subagent_type: general-purpose
prompt: |
Review structured data / schema markup on myimageupscaler.com.
<Data context block>
<SquirrelScan schema findings if available>
Check the following pages for JSON-LD schema:
1. Homepage (https://myimageupscaler.com) - expect: Organization, SoftwareApplication, WebSite
2. Pricing page (/pricing) - expect: Product or Offer
3. Blog posts (check 3 posts) - expect: Article, BreadcrumbList
4. pSEO pages from top GSC pages (check 2) - expect: FAQPage, BreadcrumbList, SoftwareApplication
5. Use-case pages (check 2) - expect: HowTo or FAQPage
For each page, use WebFetch to check the HTML source for JSON-LD scripts.
Return a structured summary:
- Pages checked (count)
- Schema types found (table: page, schemas present, schemas missing)
- Validation issues (malformed JSON-LD, missing required fields)
- Rich result eligibility (which pages qualify for which rich results)
- Priority additions (which schemas would have highest impact)
- Score: 0-100 for structured data coverage
Task D: AI Search Optimization Review
subagent_type: general-purpose
prompt: |
Review myimageupscaler.com for AI search engine visibility (AEO/GEO).
<Data context block>
Check the following:
1. robots.txt AI bot access - fetch https://myimageupscaler.com/robots.txt
- Is GPTBot blocked or allowed?
- Is ClaudeBot blocked or allowed?
- Is PerplexityBot blocked or allowed?
- Is Google-Extended blocked or allowed?
2. llms.txt presence - check https://myimageupscaler.com/llms.txt and /llms-full.txt
- Does it exist?
- Is it well-structured?
3. Content citability - check 3 key pages from GSC top queries:
- Does content use inverted pyramid (answer first)?
- Are there clear definitions/explanations AI can extract?
- Is content structured with semantic HTML (lists, tables, headings)?
- Are there FAQ sections?
4. E-E-A-T signals for AI
- Author credentials visible?
- Dates and freshness signals?
- Authoritative sources cited?
Return a structured summary:
- AI bot access status (table: bot, status)
- llms.txt status
- Content citability score per page checked
- AEO readiness checklist (items checked vs passed)
- Priority recommendations
- Score: 0-100 for AI search readiness
Task E: Internal Linking Analysis
subagent_type: general-purpose
prompt: |
Analyze internal linking structure of myimageupscaler.com.
<Data context block>
Step 1: Fetch the sitemap
Use WebFetch to get https://myimageupscaler.com/sitemap.xml
Parse the URL list.
Step 2: Categorize pages by type:
- Homepage, Tool/App pages, pSEO category pages, Blog posts, Static pages
Step 3: Check 5 high-value pages from GSC top pages (prioritize pages with high impressions or GA4 conversion opportunities):
- How many internal links point TO this page? (check from homepage, nav, footer, blog posts)
- How many internal links does this page have going OUT?
- Is the anchor text descriptive and keyword-relevant?
Step 4: Check for orphan pages:
- Are there sitemap URLs that might have zero or minimal internal links?
Step 5: Topic cluster assessment:
- Do pSEO pages link to related pages and vice versa?
- Do blog posts link to relevant tool/pSEO pages?
- Is there a hub-and-spoke linking pattern?
For GA4 conversion opportunity pages specifically: do they have enough internal links to maximize PageRank and authority?
Return a structured summary:
- Total pages in sitemap
- Pages checked in detail (count)
- Internal link distribution (table: page, inbound links, outbound links)
- Orphan page candidates
- Topic cluster gaps
- Anchor text quality assessment
- Priority linking opportunities (with GSC data: "Link to /upscale-image from blog - it has 450 impressions at position 12" and GA4 data where available)
- Score: 0-100 for internal linking health
Task F: Backlink Analysis
subagent_type: general-purpose
prompt: |
Analyze the backlink profile of myimageupscaler.com.
<Data context block>
Since we may not have Ahrefs/Semrush API access, use available data:
1. Check if docs/SEO/ contains any Ahrefs or backlink export files (CSV/JSON)
2. Use WebFetch to check common backlink checker tools if available
3. Reference any domain authority metrics from prior reports in docs/SEO/audits/
Based on available data, assess:
- Total known backlinks and referring domains
- Domain authority / Domain Rating
- Link quality distribution (editorial vs directory vs social vs spam)
- Anchor text distribution
- Top referring domains
Cross-reference with GSC + GA4 synthesis data:
- Pages in the GA4 conversion opportunities list need backlink authority to convert better
- Pages with GSC position 4-20 are candidates for link-building to push into top 3
Return a structured summary:
- Profile overview (backlinks, referring domains, DR/DA)
- Link quality assessment
- Competitor link gap (if prior competitor reports exist in docs/SEO/)
- High-priority pages needing backlinks (from GSC low-hanging fruit + GA4 conversion opps)
- Link building opportunity types
- Score: 0-100 for backlink profile health (or "N/A - Limited data" if no backlink data found)
Task G: Competitor Sitemap Spy (ONLY if --competitor provided)
subagent_type: seo-competitor-analyzer
prompt: |
Analyze competitor <COMPETITOR_DOMAIN> SEO strategy via their sitemap.
<Data context block>
Invoke the /competitor-sitemap-spy skill for domain: <COMPETITOR_DOMAIN>
Return a structured summary:
- Total pages found
- Page categories (table: category, count, percentage)
- pSEO patterns identified
- Content gaps (they have, we don't)
- Our advantages (we have, they don't)
- Top 5 quick-win opportunities
- Score: 0-100 for competitive position
Task H: Keyword Research & Strategy (ONLY if --include-strategy provided)
subagent_type: general-purpose
prompt: |
Generate a keyword research strategy and content roadmap for myimageupscaler.com.
<Data context block>
Invoke the /keyword-research-strategy skill with focus on easy wins:
/keyword-research-strategy --focus=easy-wins --competition=low --limit=15
The skill will:
1. Analyze GSC data + Ahrefs snapshots (if available)
2. Classify search intent for all keywords
3. Map keywords to existing/proposed pages
4. Identify content gaps and intent mismatches
5. Generate prioritized content roadmap
Augment the strategy with GA4 insights:
- Which existing pages convert well? → Target similar keywords
- Which pages have high traffic but low conversion? → Content strategy fix, not just SEO
Return a structured summary with EXACTLY these sections:
- Total keywords analyzed
- Opportunity breakdown by segment:
- Quick Wins (position 4-20, easy push)
- Content Gaps (high potential, no page)
- Long-Tail Clusters (group related keywords)
- Intent Mismatches (wrong page ranks)
- Top 5 immediate priorities (keyword, segment, impact, effort)
- Total potential monthly clicks if roadmap implemented
- Link to full roadmap file in docs/SEO/keyword-strategy-roadmap-YYYY-MM-DD.md
Cross-reference with GSC low-hanging fruit to ensure alignment.
If the skill fails or no Ahrefs data found, note limitation but include GSC-only analysis.
Step 5: Wave 2 Checkpoint
After all Wave 2 tasks return:
- Collect all structured summaries
- Note which skills succeeded and which returned "N/A"
- Update task statuses
Step 6: Wave 3 - Synthesis
This runs in the main thread (no subagents).
6a: Compute Health Scores
Extract the score from each skill's summary. Calculate weighted overall score:
| Dimension | Weight | Source |
|---|---|---|
| Technical SEO | 15% | SquirrelScan health score |
| Core Web Vitals | 15% | PageSpeed performance score (mobile 60% + desktop 40%) |
| On-Page SEO | 15% | SEO expert review score |
| Content / Blog | 10% | Blog audit score |
| Schema / Structured Data | 5% | Schema markup review score |
| Internal Linking | 10% | Internal linking analysis score |
| Backlinks | 5% | Backlink analysis score |
| AI Search Readiness | 5% | AI search optimization score |
| GSC Performance | 10% | Composite: (index_rate × 0.3) + (normalized_position × 0.4) + (normalized_ctr × 0.3) |
| GA4 Behavioral | 10% | Composite: (organic_share × 0.3) + (conversion_rate_norm × 0.4) + (engagement_norm × 0.3) |
For N/A dimensions: redistribute their weight proportionally across available dimensions.
Position normalization: score = max(0, 100 - (avg_position - 1) * 1.5)
CTR normalization: score = min(100, avg_ctr * 1000)
Conversion rate normalization: score = min(100, organic_cr_pct * 20) (5% CR = 100)
Engagement normalization: score = min(100, engagement_rate_pct) (already 0–100)
6b: Trend Comparison
If a prior report exists in docs/SEO/reports/:
- Compare overall score: up/down/stable
- Compare each dimension score
- Note significant changes (> 5 point swing)
Use arrows: [+5] for improvement, [-3] for decline, [=] for stable
6c: Assemble Report
Write the unified report to docs/SEO/reports/seo-report-YYYY-MM-DD.md using this template:
# SEO Health Report - myimageupscaler.com
**Date:** YYYY-MM-DD
**Auditor:** SEO Manager Orchestrator
**URL:** <url>
**Period:** Last <days> days
**Skills Used:** <list of skills that ran successfully>
**Skills Skipped/Failed:** <list with reasons>
**Duration:** ~XX minutes
---
## Executive Summary
### Overall SEO Health Score: XX/100 [trend]
| Dimension | Score | Weight | Trend | Key Finding |
| ------------------- | ------ | ------ | ------- | ----------- |
| Technical SEO | XX/100 | 15% | [trend] | ... |
| Core Web Vitals | XX/100 | 15% | [trend] | ... |
| On-Page SEO | XX/100 | 15% | [trend] | ... |
| Content / Blog | XX/100 | 10% | [trend] | ... |
| Schema | XX/100 | 5% | [trend] | ... |
| Internal Linking | XX/100 | 10% | [trend] | ... |
| Backlinks | XX/100 | 5% | [trend] | ... |
| AI Search Readiness | XX/100 | 5% | [trend] | ... |
| GSC Performance | XX/100 | 10% | [trend] | ... |
| GA4 Behavioral | XX/100 | 10% | [trend] | ... |
### Top 5 Priority Issues
1. **[CRITICAL]** ... (GSC: ..., GA4: ...)
2. **[HIGH]** ... (GSC: ..., GA4: ...)
3. ...
4. ...
5. ...
### Quick Wins (Impact vs Effort — from GSC+GA4 synthesis)
1. ... (GSC: keyword X at position Y with Z impressions | GA4: N% conversion rate)
2. ...
3. ...
---
## 1. Google Search Console Performance
[Paste GSC summary from Wave 1]
---
## 2. Google Analytics 4 Behavioral Data
[Paste GA4 summary from Wave 1, or "N/A - GA4 fetch failed (see error above)"]
### GSC + GA4 Synthesis — Priority Actions
[Paste top 10 actions from seo-synthesize.cjs output, or "N/A"]
### Tracking Health
GSC/GA4 click-to-session ratio: <ratio> (<"Normal" if 0.6–1.6, otherwise flag as ABNORMAL>)
---
## 3. Core Web Vitals & Performance
[Paste PageSpeed summary from Wave 1, or "N/A - PageSpeed audit was skipped/failed"]
---
## 4. Technical SEO
[Paste SquirrelScan summary from Wave 1, or "N/A"]
---
## 5. On-Page SEO & Content Quality
[Paste SEO expert review from Wave 2]
---
## 6. Blog Content Health
[Paste blog audit summary from Wave 2, or "N/A"]
---
## 7. Structured Data & Schema Markup
[Paste schema review from Wave 2, or "N/A"]
---
## 8. Internal Link Structure
[Paste internal linking analysis from Wave 2, or "N/A"]
---
## 9. Backlink Profile
[Paste backlink analysis from Wave 2, or "N/A"]
---
## 10. AI Search Readiness (AEO/GEO)
[Paste AI search review from Wave 2, or "N/A"]
---
## 11. Competitive Intelligence
[Paste competitor analysis from Wave 2, or "Skipped - run with --competitor=<domain> to include"]
---
## 12. Keyword Research & Content Strategy
[Paste keyword strategy summary from Wave 2, or "Skipped - run with --include-strategy to include"]
**Note:** For full keyword roadmap with detailed action plans, see: `docs/SEO/keyword-strategy-roadmap-YYYY-MM-DD.md`
---
## Prioritized Action Plan
### Critical - This Week
[Items referencing both GSC and GA4 data for each recommendation]
### High Impact - This Month
[Items referencing GSC + GA4 data]
### Medium - This Quarter
[Items]
### Ongoing Maintenance
[Items]
---
## Methodology
- **Data collection:** GSC API (via gsc-fetch.cjs), GA4 API (via ga-fetch.cjs), Lighthouse (local), SquirrelScan CLI
- **Synthesis:** GSC+GA4 joined by landing-page URL via seo-synthesize.cjs; actions ranked by estimated conversion impact
- **Analysis:** Expert review, blog API audit, schema validation, AI search checks, link analysis, backlink assessment
- **Scoring:** Weighted average across 10 dimensions (weights reflect impact on organic growth + revenue)
- **GSC grounding:** All recommendations cite specific keywords, pages, and metrics from Google Search Console
- **GA4 grounding:** Behavioral claims backed by organic session, conversion, and engagement data
Step 7: Output Summary
Display to the user:
SEO Manager: Audit Complete
============================
Overall Health Score: XX/100 [trend]
Dimension Scores:
Technical SEO: XX/100
Core Web Vitals: XX/100
On-Page SEO: XX/100
Blog Health: XX/100
Schema: XX/100
Internal Linking: XX/100
Backlinks: XX/100
AI Search: XX/100
GSC Performance: XX/100
GA4 Behavioral: XX/100
GSC+GA4 Top 3 Priority Actions:
1. [CRITICAL] ... (~N estimated conversions/mo)
2. [HIGH] ...
3. [HIGH] ...
Report saved to: docs/SEO/reports/seo-report-YYYY-MM-DD.md
Error Handling
| Error | Action |
|---|---|
| GSC script fails | HARD STOP - Display error, help troubleshoot credentials/script |
| GA4 script fails | Warn user, mark GA4 dimension as N/A, skip synthesis, continue |
| Synthesis script fails | Warn user, use GSC-only context for Wave 2, continue |
| PageSpeed fails (Chrome not found) | Mark as N/A, note in report, continue |
| SquirrelScan not installed | Mark as N/A, note in report, continue |
| Blog audit auth fails | Mark as N/A, note in report, continue |
| Any Wave 2 task fails | Mark dimension as N/A, redistribute weight, continue |
| No prior report for trends | Skip trend comparison, note "First report" |
| Competitor domain invalid | Skip competitor analysis, note in report |
| GSC/GA4 ratio outside 0.6–1.6 | Flag tracking issue in report, add "Fix tracking" to Critical items |
Related Skills
| Skill | When to use instead |
|---|---|
/gsc-analysis |
Quick GSC-only check, no full audit needed |
/ga-analysis |
Quick GA4 behavioral check, no full audit needed |
/seo-growth-plan |
Combined GSC+GA4 synthesis only, no full audit — answers "what to do next" |
/seo-audit |
Single-page or targeted SEO review |
/pagespeed |
Performance-only check |