seo-drift

seo-drift is a skill for Claude Code from ZachArticulateV/designer-pro-and-seo. It costs 106 tokens per session (2,026 once invoked), scanned A, original, MIT.

A change tracker for search-engine optimisation, or SEO—the work of helping pages appear correctly in search results. It saves snapshots of important page settings and compares later snapshots with them.

In plain words
What is it for?
Use it to create one-off or stored baselines from local HTML or a URL, compare pages before and after changes, and review SEO changes over time.
Why use it?
It catches silent deployment changes, such as a changed title, a different canonical URL, a noindex instruction, or removed structured data, before they affect search visibility.

Skill for Claude Code

Written for Claude Code: ${CLAUDE_PLUGIN_ROOT} variable.

Runs only inside its plugin — its command needs a path that Claude Code sets for a plugin’s own hooks and for nothing else. Install the plugin, not this.

Part of the designer-pro-and-seo plugin — 41 skills, 14 agents, 1 MCP server shipped together

Good fit Use it to create one-off or stored baselines from local HTML or a URL, compare pages before and after changes, and review SEO changes over time.

Compare 6 skills from other repositories ↓
Install

Getting it into your agent

This one installs as part of its plugin. Adding the marketplace and installing the plugin brings it with everything else the plugin ships.

Claude Code
/plugin marketplace add ZachArticulateV/designer-pro-and-seo
Claude Code
/plugin install designer-pro-and-seo

Made for: Claude Code.

Or install designer-pro-and-seo, the plugin that ships this one along with the rest of its 41 skills, 14 agents, 1 MCP server.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for seo-drift

README.md
[![agentmods](https://agentmods.dev/badge/skills/zacharticulatev/designer-pro-and-seo/seo-drift/github.svg)](https://agentmods.dev/skills/zacharticulatev/designer-pro-and-seo/seo-drift)
Your own site
<a href="https://agentmods.dev/skills/zacharticulatev/designer-pro-and-seo/seo-drift"><img src="https://agentmods.dev/badge/skills/zacharticulatev/designer-pro-and-seo/seo-drift/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for seo-drift

Your own site · 80×15
<a href="https://agentmods.dev/skills/zacharticulatev/designer-pro-and-seo/seo-drift"><img src="https://agentmods.dev/badge/skills/zacharticulatev/designer-pro-and-seo/seo-drift.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 106 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 2,026 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00106 $0.02026
Opus 5 $0.00053 $0.01013
Sonnet 5 $0.00021 $0.00405
Haiku 4.5 $0.00011 $0.00203

Measured 12d ago against content hash acb3f052a9d2, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-11, from the pricing page.

Security

Grade A, and why

seo-drift scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 12d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/seo-drift/SKILL.md · 123 lines

How it starts

The opening of the file, as written. The whole thing — 123 lines — stays where its author put it; the contents beside it link to each section on GitHub.

seo-drift

Family: seo Status: Stable

Purpose

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.

Triggers

  • "seo drift" / "baseline" / "deployment check"
  • "track changes" / "did anything break" / "seo regression"
  • "compare seo" / "before and after" / "monitor seo changes"

Inputs

  • A URL (fetched, SSRF-guarded) or local HTML file
  • Mode: a one-off JSON baseline+diff, or a stored SQLite baseline / compare / trend
  • Optional: a --db path (default <cwd>/.seo-drift/baselines.db under your workspace; 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

Steps

  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
    
    Records 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.db
    
    Resolves 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 --trend
    
    Lists 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.

Read the full file on GitHub · 123 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 12d ago First seen · 123 lines · 106 tokens per session scan A acb3f052a9d2

Subscribe to this mod's changes

seo-drift is a skill published in the GitHub repository ZachArticulateV/designer-pro-and-seo (8 stars, last pushed 2mo ago), licensed MIT. It adds 106 tokens to every session and 2,026 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

release-retrospective

Produce a structured look-back after a major release or deprecation — capturing what the plan got right, what it missed, and what to do differently. Trigger when someone says: release retrospective, post-release review, what went wrong with the release, how did the deprecation go, release post-mortem, retro on the…

murphytrueman/design-system-ops · 89 tokens

version-bump-advisor

Recommend the correct semver bump with reasoning and a generated changelog entry. Trigger when someone says: what version bump, is this a breaking change, semver recommendation, should this be major or minor, version this release, changelog entry, what kind of release is this, or anything about versioning a design…

murphytrueman/design-system-ops · 72 tokens

parallel-execution-strategy

Use when 3+ independent tasks are ready in .forge/tasks.yaml and multiple agents will work concurrently, when assessing file-conflict risk before dispatching parallel work, when planning branch and merge sequencing for a sprint, or when prior parallel runs have caused merge nightmares.

aneja5/forge-skills · 59 tokens

git-workflow

Use when committing work, creating branches, preparing PRs, resolving merge conflicts, when grouping related changes into commits, when cleaning up history before merging, or when deciding what should be a separate commit vs squashed.

aneja5/forge-skills · 47 tokens

pick-up-task

Pick up or resume a task from dev/TODO.md — marks [WIP], creates or switches to the task's feature branch, rebases with main. Use when the user invokes /pick-up-task or asks to grab/resume a pastiche task.

retz8/pastiche · 60 tokens

release-pastiche

Ship a pastiche release — version bump, plugin build, CHANGELOG entry, release commit, tag, GitHub Release, milestone close. Use when the user invokes /release-pastiche after a TODO group's final feat→main merge. Human-triggered only; never run from an automated routine.

retz8/pastiche · 66 tokens