"(proactive) Pull analytics from PostHog, GSC, and Ahrefs. Correlate data and produce an actionable SEO briefing. Use when the user wants an SEO status report, morning briefing, analytics overview, or wants to understand how their site is performing. Examples: 'SEO briefing', 'how is the site doing', 'pull analytics', 'morning report', 'check indexing status', 'what keywords are we ranking for'."
Install
npx skillscat add dcouple/agent-farm/seo-briefing Install via the SkillsCat registry.
SEO Briefing
Pull data from all connected analytics sources, correlate it, and produce a
single actionable briefing. This is the CEO morning report for SEO.
Important: Run with Claude Opus 4.6.
Data sources
The more sources connected, the better the briefing. At minimum, you need
analytics (PostHog, GA4, Plausible, etc.) and search data (GSC). Keyword/backlink
data (Ahrefs, Semrush) makes the briefing significantly more actionable.
Check what's available via MCP tools, Composio integrations, or direct API access.
If a source isn't connected, skip that section and note the gap in the briefing
so the user knows what they're missing.
Goal
Produce .seo/briefing.md with:
- What's working (traffic up, rankings improving, new keywords)
- What's not working (traffic down, pages not indexed, rankings dropping)
- What to do about it (specific, prioritized action items)
Every claim must cite the data source and specific numbers. No vibes.
Steps
1. Run seo-data-pull
Run seo-data-pull to discover connected sources and pull fresh data into.seo/data/. If .seo/data/manifest.md exists and is less than 24 hours old,
skip the pull and use the cached data.
Success criteria: .seo/data/ exists with analytics, search console, and/or SEO tool snapshots.
2. Check for active experiments
Read .seo/experiments.md if it exists. For any experiment past its review date:
- Pull the current metrics for the same pages/queries from the fresh data
- Compare current vs baseline metrics recorded in the experiment
- Report the result: improved, no change, or regressed
- Add a "Result" section to that experiment entry with the measured outcome
For experiments not yet past their review date, note them in the briefing
under a "Running Experiments" section so the user knows what's in flight.
Success criteria: Every past-due experiment has a measured outcome. Active experiments are listed.
3. Correlate and produce briefing
Cross-reference the three data sources:
- Pages with high impressions but no clicks -> title/description problem
- Pages with traffic drops + ranking drops -> content quality or competition
- Pages not indexed -> submit for indexing
- New pages indexed + gaining traffic -> working, do more like this
- Competitor keywords you don't rank for -> content gaps to fill
- High-traffic pages with poor readability -> readability pass candidates
Write .seo/briefing.md with sections:
# SEO Briefing — [date]
## Summary
3-5 bullet executive summary
## Traffic (PostHog)
Numbers, trends, top pages, biggest movers
## Search Performance (GSC)
Queries, impressions, clicks, CTR, position trends
## Indexing Status
Pages indexed, not indexed, recently submitted, errors
## Rankings (Ahrefs)
Keyword positions, movement, new/lost keywords
## Backlinks (Ahrefs)
New/lost, referring domains, domain rating
## Content Gaps
Keywords competitors rank for that we don't
## Running Experiments
Active experiments from `.seo/experiments.md` not yet past review date.
## Experiment Results
Experiments past their review date with measured before/after metrics.
## Action Items (prioritized)
1. [specific action] — [why] — [expected impact]
2. ...Success criteria: Briefing written with every claim citing a data source and number. Action items are specific and prioritized.
Artifacts: .seo/briefing.md feeds into seo-content-strategy.
Committing .seo/
After writing the briefing, commit all .seo/ changes to the working branch
and push. This ensures other worktrees and future sessions can access the data,
experiments, and briefing. Never add .seo/ to .gitignore.