seo-ahrefs
Ahrefs API analyst (extension). Reads referring domains, backlinks, organic keywords, and content explorer data via the tested…
SEO drift monitoring: capture baselines of SEO-critical elements, detect changes, and track regressions over time. Git for SEO: baseline, diff, and track changes to your on-page SEO. Use when user says "SEO drift", "baseline", "track changes", "did anything break", "SEO
Claude Code
$ npx -y skills add AgriciDaniel/claude-seo --skill seo-drift --agent claude-code
Codex
$ npx skills add AgriciDaniel/claude-seo --skill seo-drift -a codex -y
Cursor
$ npx skills add AgriciDaniel/claude-seo --skill seo-drift -a cursor -y
Gemini CLI
$ npx skills add AgriciDaniel/claude-seo --skill seo-drift -a gemini-cli -y
GitHub Copilot
$ npx skills add AgriciDaniel/claude-seo --skill seo-drift -a github-copilot -y
OpenCode
$ npx skills add AgriciDaniel/claude-seo --skill seo-drift -a opencode -y
Windsurf
$ npx skills add AgriciDaniel/claude-seo --skill seo-drift -a windsurf -y
name: seo-drift description: > SEO drift monitoring: capture baselines of SEO-critical elements, detect changes, and track regressions over time. Git for SEO: baseline, diff, and track changes to your on-page SEO. Use when user says "SEO drift", "baseline", "track changes", "did anything break", "SEO regression", "compare SEO", "before and after", "monitor SEO changes", or "deployment check". user-invocable: true argument-hint: "baseline|compare|history <url>" license: MIT metadata: author: AgriciDaniel original_author: "Dan Colta (Pro Hub Challenge)" version: "2.6.0" category: seo
Git for your SEO. Capture baselines, detect regressions, track changes over time.
---
| Command | Purpose | |---------|---------| | `/seo drift baseline <url>` | Capture current SEO state as a "known good" snapshot | | `/seo drift compare <url>` | Compare current page state to stored baseline | | `/seo drift history <url>` | Show change history and past comparisons |
---
Every baseline records these SEO-critical elements:
| Element | Field | Source | |---------|-------|--------| | Title tag | `title` | `parse_html.py` | | Meta description | `meta_description` | `parse_html.py` | | Canonical URL | `canonical` | `parse_html.py` | | Robots directives | `meta_robots` | `parse_html.py` | | H1 headings | `h1` (array) | `parse_html.py` | | H2 headings | `h2` (array) | `parse_html.py` | | H3 headings | `h3` (array) | `parse_html.py` | | JSON-LD schema | `schema` (array) | `parse_html.py` | | Open Graph tags | `open_graph` (dict) | `parse_html.py` | | Core Web Vitals | `cwv` (dict) | `pagespeed_check.py` | | HTTP status code | `status_code` | `fetch_page.py` | | HTML content hash | `html_hash` (SHA-256) | Computed | | Schema content hash | `schema_hash` (SHA-256) | Computed |
---
The comparison engine applies **17 rules across 3 severity levels**. Load `references/comparison-rules.md` for the full rule set with thresholds, recommended actions, and cross-skill references.
| Level | Meaning | Response Time | |-------|---------|---------------| | **CRITICAL** | SEO-breaking change, likely traffic loss | Immediate | | **WARNING** | Potential impact, needs investigation | Within 1 week | | **INFO** | Awareness only, may be intentional | Review at convenience |
---
All data is stored locally in SQLite:
~/.cache/claude-seo/drift/baselines.db
URL normalization ensures consistent matching: lowercase scheme/host, strip default ports (80/443), sort query parameters, remove UTM parameters, strip trailing slashes.
---
Captures the current state of a page and stores it.
**Steps:** 1. Validate URL (SSRF protection via `google_auth.validate_url()`) 2. Fetch page via `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run fetch_page.py <URL>` 3. Parse HTML via `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run parse_html.py <URL>` 4. Optionally fetch CWV via `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run pagespeed_check.py <URL>` (use `--skip-cwv` to skip) 5. Hash HTML body and schema content (SHA-256) 6. Store snapshot in SQLite
**Execution:**
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run drift_baseline.py <url>
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run drift_baseline.py <url> --skip-cwv**Output:** JSON with baseline ID, timestamp, URL, and summary of captured elements.
---
Fetches the current page state and diffs it against the most recent baseline.
**Steps:** 1. Validate URL 2. Load most recent baseline from SQLite (or specific `--baseline-id`) 3. Fetch and parse current page state 4. Run all 17 comparison rules 5. Classify findings by severity 6. Store comparison result 7. Output JSON diff report
**Execution:**
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run drift_compare.py <url>
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run drift_compare.py <url> --baseline-id 5
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run drift_compare.py <url> --skip-cwv**Output:** JSON with all triggered rules, old/new values, severity, and actions.
After comparison, offer to generate an HTML report:
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run drift_report.py <comparison_json_file> --output drift-report.html---
Shows all baselines and comparisons for a URL.
**Execution:**
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run drift_history.py <url>
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run drift_history.py <url> --limit 10**Output:** JSON array of baselines (newest first) with timestamps and comparison summaries.
---
When drift is detected, recommend the appropriate specialized skill:
| Finding | Recommendation | |---------|----------------| | Schema removed or modified | Run `/seo schema <url>` for full validation | | CWV regression | Run `/seo technical <url>` for performance audit | | Title or meta description changed | Run `/seo page <url>` for content analysis | | Canonical changed or removed | Run `/seo technical <url>` for indexability check | | Noindex added | Run `/seo technical <url>` for crawlability audit | | H1/heading structure changed | Run `/seo content <url>` for E-E-A-T review | | OG tags removed | Run `/seo page <url>` for social sharing analysis | | Status code changed to error | Run `/seo technical <url>` for full diagnostics |
---
| Scenario | Action | |----------|--------| | URL unreachable | Report error from `fetch_page.py`. Do not guess state. Suggest user verify URL. | | No baseline exists for URL | Inform user and suggest running `baseline` first. | | SSRF blocked (private IP) | Report `validate_url()` rejection. Never bypass. | | SQLite datab
Universal SEO skill for Claude Code. 26 sub-skills + 19 sub-agents covering technical SEO, E-E-A-T, schema, GEO/AEO, agent readiness (Lighthouse Agentic Browsing, WebMCP, llms.txt), backlinks, local SEO, e-commerce, international SEO, Google APIs, and PDF/Excel reporting. 9 optional extensions for live SEO data.
Ahrefs API analyst (extension). Reads referring domains, backlinks, organic keywords, and content explorer data via the tested…
AI image generation for SEO assets: OG/social preview images, blog hero images, schema images, product photography, infographics.…
Bing Webmaster Tools + IndexNow extension. Microsoft Copilot citations are fed by the Bing index; this skill makes Bing…
Live SEO data via DataForSEO MCP server: SERP analysis, keyword research (volume, difficulty, intent, trends), backlink profiles,…
Full-site crawling, scraping, and site mapping via Firecrawl MCP. Use when user says "crawl site", "map site", "full crawl",…
Matomo Reporting API extension. Self-hosted or Matomo Cloud analytics as a GA4 alternative or complement. Organic traffic,…
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use…
Turn the current project website into a short, polished, shareable launch video using Hyperframes. Use when someone says "/brag",…
Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit…
Build an immersive scroll-scrubbed "fly through the world" landing page for any industry or brand using Higgsfield. As the…