blast-prompt
Generate a complete build brief in BLAST format — Blueprint, Link, Architect, Stylize, Trigger — so a build agent can one-shot a…
Git-for-SEO — capture baselines of on-page SEO-critical elements and diff against them to catch regressions a deploy introduced (title changed, canonical flipped, noindex added, schema removed). Stores baselines in a local SQLite history so you can compare and trend over time.
Claude Code
$ npx -y skills add ZachArticulateV/designer-pro-and-seo --skill seo-drift --agent claude-code
Codex
$ npx skills add ZachArticulateV/designer-pro-and-seo --skill seo-drift -a codex -y
Cursor
$ npx skills add ZachArticulateV/designer-pro-and-seo --skill seo-drift -a cursor -y
Gemini CLI
$ npx skills add ZachArticulateV/designer-pro-and-seo --skill seo-drift -a gemini-cli -y
GitHub Copilot
$ npx skills add ZachArticulateV/designer-pro-and-seo --skill seo-drift -a github-copilot -y
OpenCode
$ npx skills add ZachArticulateV/designer-pro-and-seo --skill seo-drift -a opencode -y
Windsurf
$ npx skills add ZachArticulateV/designer-pro-and-seo --skill seo-drift -a windsurf -y
name: seo-drift description: Git-for-SEO — capture baselines of on-page SEO-critical elements and diff against them to catch regressions a deploy introduced (title changed, canonical flipped, noindex added, schema removed). Stores baselines in a local SQLite history so you can compare and trend over time. Trigger when the user says "SEO drift", "SEO baseline", "track changes", "did anything break", "SEO regression", "compare SEO", "before and after deploy", "monitor SEO changes", or "deployment check".
**Family:** seo **Status:** Stable
Baseline + diff for SEO state — "git for SEO." Capture a page's SEO-critical elements, store the snapshot, then after a deploy or content change diff a fresh capture against the stored baseline to catch silent regressions before they cost rankings. Two modes: a quick one-off **JSON baseline** (`drift_tools.py`), or a **local SQLite history** (`drift_baseline/compare/history`) that remembers every snapshot so you can compare and trend over time. Works offline on local HTML or by fetching a URL through the shared SSRF guard.
it refuses to default *inside* the plugin — run from your project, or pass `--db` to a path under your workspace), a `--label` (e.g. `prod`, `pre-deploy`), a `--baseline-id`
1. **Capture a baseline into the SQLite store** (before a deploy, or at handoff):
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/seo/drift_baseline.py" --url <URL> --db .seo-drift/baselines.db --label pre-deploy # or --file page.html; add --robots robots.txt for rule D15Records title, meta description, h1, canonical, meta robots, OG tags, schema-block count, h2 count, and word count (the canonical capture set from `drift_tools.py`), tagged with a timestamp and label, indexed by URL. 2. **Compare after a change** against the stored baseline:
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/seo/drift_compare.py" --url <URL> --db .seo-drift/baselines.dbResolves the latest baseline for that URL (or `--label` / `--baseline-id`), captures fresh, and runs the severity engine. It treats **adding `noindex`/`nofollow`** and a **canonical flip or drop** as **critical**, **title / h1 / schema-loss** changes as **high**, and meta-description / OG / h2 / word-count drift as **advisory** (word-count moves under 20% are suppressed as editing noise). Full rationale: `references/seo-drift/severity-model.md`. 3. **Trend the history** to see drift across deploys:
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/seo/drift_history.py" --url <URL> --db .seo-drift/baselines.db --trendLists stored baselines, or with `--trend` reports the per-transition change count and critical/high/advisory tally — a regression timeline where a deploy that quietly added noindex shows up as a critical-count spike. 4. **Quick one-off (no store):** for a single before/after without history, use the original JSON path — `drift_tools.py --capture --out baseline.json`, then `drift_tools.py --diff --baseline baseline.json`. Same capture set; the JSON baseline is a plain file you can commit. 5. **Interpret.** Walk the regressions worst-first: intended change or accident? Fix any critical/high immediately. The store design is documented in `references/seo-drift/sqlite-schema.md`.
| Output | What it contains | Format | Quality bar (how it is scored) | |---|---|---|---| | Stored baseline | A captured SEO-element snapshot tagged with url / label / timestamp, in a local SQLite db | SQLite row (snapshot as JSON) + `--human` ASCII | Capture is deterministic given the same input + `--captured-at`; written under the user's workspace, never the plugin | | Compare report | Changed elements with before/after, each carrying a rule code (D1–D14), severity tier, and a plain-language note | JSON (default) + ASCII `--human` | Sorted critical → high → advisory; severity comes from the captured-element model, not a guess; "no SEO drift detected" when nothing material changed | | Trend timeline | Per-transition change count + critical/high/advisory tally across the stored history | JSON `transitions[]` / ASCII `--human` | One transition per consecutive snapshot pair; counts reproduce the compare engine exactly | | Severity verdict | The tier per change + why (de-index risk vs primary signal vs secondary) | tier label + note | No fabricated magnitude — severity is a structural judgment, never an invented traffic/ranking number |
Filed to: the user's project workspace (the SQLite db and any JSON baselines), never the plugin. The engine never estimates a traffic or ranking-position impact from a diff — that would be a synthesized number.
| Condition | Detection | Behavior (degrade, never fail) | User-facing message | |---|---|---|---| | No network / offline | fetch raises or `--no-network` set | run the offline `--file` path (the canonical capturer reads local HTML) | "Offline — analyzed the provided file; a live URL would capture the deployed page." | | Blocked / internal URL | the shared `net_safety.safe_open` guard refuses a private/loopback/metadata host | return no body + the guard's error; never fetch it | "That URL resolves to a non-public address — refused by the SSRF guard." | | Bad / empty input | no `--file` and no reachable `--url` → JSON `{"error"}` + non-zero exit | report the validation error; capture nothing | "Provide --file or a reachable --url." | | No baseline store yet | `drift_compare`/`drift_history` find no db at `--db` → JSON error + non-zer
A Claude Code plugin for the web-design + SEO workflow: research a niche, generate a coherent design system, write a complete build brief, build, run a pre-delivery QA gate, port the result into any CMS, and review on-page SEO.
Generate a complete build brief in BLAST format — Blueprint, Link, Architect, Stylize, Trigger — so a build agent can one-shot a…
Generate cold-outreach openers, value-led follow-up sequences, niche-authority positioning, and a tool-import CSV with…
Draft long-form content (blog post, service page, landing page, guide) from a brief or outline — structured, on-intent, and…
Write conversion-focused copy for a page or section — headlines, subheads, value propositions, CTAs, feature/benefit blocks, and…
Convert a raw CSV into a structured, business-ready report using a 3-step framework — load + label, define rules, request…
Audits HTML against WCAG 2.2 — no-tools structural checks (alt text, heading order, form labels, lang, landmarks, skip link,…
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use…
Comprehensive SEO analysis for any website or business type. Full site audits, single-page analysis, technical SEO (crawlability,…
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…