skillfulagents/public-skillset/seo-dashboard
Claude Code and agent skill by skillfulagents/public-skillset
- community
Checking that the SKILL.md file is still in the repository.
Collect and refresh the SEO master dashboard snapshot — Ahrefs (DR, refdomains + quality split, organic keywords, top pages), Search Console (clicks/impressions/queries/pages with WoW deltas), per-article performance, and SEO program activity (backlogs, outreach CRM, run log). Use to refresh the seo-master dashboard, to pull current SEO KPIs for a report, or when the collector needs extending with a new metric.
Install
npx vskill@latest install skillfulagents/public-skillset/seo-dashboardSKILL.md
SEO Dashboard
Backs the `seo-master` dashboard (/workspace/artifacts/seo-master/). collect.py is the single source of truth for the numbers — the weekly report and the dashboard should read the same snapshot rather than each re-deriving KPIs.
Site settings (domain, GSC property, brand terms, targets) come from /workspace/seo/config.json — written by agent-onboarding.
Usage
| Flag | Effect | |
|---|---|---|
| (none) | Serve from cache when warm — GSC 15 min, Ahrefs 6 h. ~0.5 s. | |
--refresh-gsc | Force a live Search Console pull (free, ~8 s). | |
--refresh-ahrefs | Force a live Ahrefs pull (~500–600 units, ~6 s). | |
--refresh | Force both. | |
-o FILE | Output path (default /workspace/seo/dashboard/data.json). |
Writes /workspace/seo/dashboard/data.json and appends a row to /workspace/seo/dashboard/history.jsonl on every live Ahrefs pull (that file is the long-run KPI series — the dashboard's trend charts get denser the longer this runs). Caches live in /workspace/seo/dashboard/cache/; delete them to force a cold pull.
The payload shape is documented in /workspace/seo/dashboard/SPEC.md.
Dashboard
mcp__dashboards__start_dashboard with slug seo-master. First run: bun install in the dashboard directory (package.json's start script builds then serves). The server (serve.js) exposes GET /api/data (runs the collector, honours its caches, falls back to the last good snapshot with stale:true if the collector fails) and POST /api/refresh (forces both). So Search Console is effectively live on page load and Ahrefs is at most 6 h old, with a Hard refresh button for a forced pull.
Before shipping frontend edits run bun run check-render.jsx in the dashboard directory — it SSRs every section against the live payload and against empty/null payloads.
Data sources
- Ahrefs Site Explorer:
domain-rating,backlinks-stats,metrics,
metrics-history, refdomains (limit 1000), organic-keywords, top-pages.
- GSC via a service account (
GSC_SERVICE_ACCOUNT_JSON), property from config:
120 d daily series (all + non-brand), 28 d vs prior 28 d by query and by page, and page×query rows for the per-article drilldown. Data lags ~2 days.
- Content inventory:
seo/content-inventory.json(published posts appended by the
daily content skill), joined to GSC pages for per-article performance.
- Program files:
seo/STATE.md(KPI history),content-backlog.md,
link-backlog.md, outreach/crm.json, log.md.
Gotchas encoded here (don't re-debug)
- Ahrefs
organic-keywordsreturns one row per locale, so a keyword repeats with
different volume/position. The collector rolls up by keyword+URL (min position, max volume, summed traffic, locales count) so the list agrees with metrics.org_keywords. Passing country=us instead would drop terms that only rank outside the US.
- Refdomain counts need a quality split. Young profiles attract spam links (junk TLD,
or traffic < 10 and DR < 15) — refdomains.clean_count vs suspect_count; never report the raw total alone. Ahrefs' own live_refdomains differs from the live row count by a few because of its live/lost accounting.
- Brand filtering must catch misspellings (set
brand_regexin config to include
the typos people actually type) or the non-brand north-star metric is inflated.
gsc.page_querieskeys are trailing-slash-stripped;gsc.pagesrows carry a matching
page_key. Join on that. Only a minority of pages have query rows — GSC suppresses low-volume queries; that's expected, not a bug.
org_cost/paid_costfrom Ahrefs are in cents. If the site runs paid search,
paid_traffic can dwarf organic — keep it out of organic charts.
units.spent_this_pullis clamped at 0 because the counter resets monthly and can run
backwards mid-pull.
d_positionin the GSC tables is sign-flipped so positive = rank improved.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingagents/seo-agent/.claude/skills/seo-dashboard/SKILL.md
Popularity
- Repository forks
- 1
- 7-day trend score
- 0
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/skillfulagents/public-skillset/seo-dashboard)