HOME SKILLS BLOG GITHUB
// SKILL

SEO DRIFT MONITORING
GIT FOR ON-PAGE SEO

SEO drift is the gradual loss of search-critical page signals after site changes. A deploy can remove a meta description, rename an h1, strip schema, or flip a canonical. Claude SEO records a baseline, compares any future state, and reports what changed and how severe the regression is.

By Daniel Agrici · Command surface verified:

CONTRIBUTED BY DAN COLTA · PRO HUB CHALLENGE · original repo
$
/seo drift baseline https://your-site.com

REQUIRES CLAUDE SEO INSTALLED IN CLAUDE CODE

A saved page baseline is compared with a later capture and recorded in local history
// RUN PREVIEW

What will happen if you start this skill?

The workflow stores a defined local baseline and reports changes; severity does not make the current utility a CI gate.

OUTCOME

A baseline, comparison, or history report across the fields and 17 rules implemented by the current utilities.

REQUIRED INPUT

Use /seo drift baseline <url>, /seo drift compare <url>, or /seo drift history <url>.

READINESS

Needs a reachable public page and persistent local cache. Optional PageSpeed evidence needs compatible credentials and availability.

LOCAL OUTPUT

JSON results plus history in ~/.cache/claude-seo/drift/baselines.db. Select an older record with --baseline-id.

SIDE EFFECTS

Fetches the page and writes baseline or comparison records to the user cache. It does not edit the monitored site.

COST + APPROVAL

Claude Code and optional PageSpeed access can cost separately. Define and test any external severity gate before it blocks deployment.

// HOW IT WORKS

How does SEO drift monitoring work?

SEO drift is an unintended change to tracked page elements between captures. A title can disappear after a CMS change, a canonical can point to a different URL, a noindex directive can appear, or a JSON-LD block can be removed. The comparison makes those changes reviewable; it does not prove that a finding caused ranking loss.

The drift skill captures a defined set of fields in local SQLite, assigns the baseline a numeric ID and timestamp, and compares a later fetch with the latest or a selected baseline. It reports critical, warning, and info findings. The current script does not turn critical findings into a failing process exit.

Primary references: Google's Search Analytics API documentation explains the performance data used to investigate traffic changes, and the URL Inspection API reference documents programmatic index-status checks.

The Six Pillars

Drift monitoring is built on six load-bearing capabilities. Each is described below.

01
BASELINE CAPTURE
One command captures the supported fields in SQLite and returns a numeric baseline ID. Use the most recent baseline or select an ID at runtime.
02
17 COMPARISON RULES
Rules cover title, meta description, canonical, noindex, h1, h2, schema, Open Graph, status, optional CWV, and content hashes.
03
SEVERITY TIERS
Critical (fix now): canonical flip, noindex added, or h1 removed. Warning (review): title or meta description changed. Info (track): h2 structure or full content hash changed.
04
SQLITE HISTORY
Baselines and comparison summaries persist in the user's local cache. History lists stored records for the normalized URL.
05
CI INPUT
The scripts can produce CI artifacts, but severity does not control the current exit code. Add and test a separate gate before blocking a build.
06
DEPLOYMENT GUARD
Pair with claude-seo audit for full-stack confidence: drift catches the small stuff, audit catches the systemic stuff.
// USAGE

How do you run SEO drift checks?

Commands

CommandWhat it does
/seo drift baseline <url>Capture the supported page fields and store a timestamped baseline with a numeric ID
/seo drift compare <url>Compare the current fetch with the most recent stored baseline
claude-seo run drift_compare.py <url> --baseline-id NUse a specific numeric baseline ID through the script runtime
/seo drift history <url>List stored baselines and comparison summaries for the URL

Severity Tiers

Every triggered rule has one of three severity levels. Severity drives the report summary only; it does not currently change the process exit code.

TierMeaningExamples
CRITICALHigh-priority review in the skill rubricCanonical changed or removed, noindex added, h1 or title removed, schema removed, status changed to 4xx/5xx
WARNINGPotential regression to investigateTitle or meta description changed, CWV regressed, performance score dropped, OG tags removed, schema modified
INFOAwareness item that may be intentionalSchema added, h2 structure changed, or the full HTML content hash changed

CI Boundary

The scripts can run in CI and emit JSON, but drift_compare.py exits nonzero only when execution returns an error. Critical, warning, and info findings are printed while the process still succeeds. To block a build, add a separate tested step that parses the JSON summary and applies your approved severity policy.

claude-seo run drift_baseline.py https://example.com
claude-seo run drift_compare.py https://example.com --baseline-id 5

The SQLite database lives at ~/.cache/claude-seo/drift/baselines.db, not in the project root. A CI job must provide persistent storage or an explicit baseline handoff if history needs to survive between runs. Baselines include timestamps and numeric IDs, so repeated captures are not byte-identical.

What Gets Captured

Each baseline records the SEO-critical fields below. The 17 comparison rules operate on subsets of these fields.

  • Title tag and meta description
  • Canonical URL and meta robots
  • Heading hierarchy: h1, h2, h3 arrays
  • JSON-LD schema blocks (parsed and hashed)
  • Open Graph tags
  • Core Web Vitals via PageSpeed Insights (optional, skip with --skip-cwv)
  • HTTP status code
  • SHA-256 hashes of full HTML body and schema content for fast change detection

The current baseline does not store hreflang, Twitter Card tags, image alt text, internal anchor distribution, or h4-h6 headings.

// FAQ

What should you know about SEO drift?

SEO drift is an unintended change to tracked page elements between captures. The current implementation can report changes such as a removed title, changed canonical, added noindex directive, removed schema, changed headings, or an error status. A finding is evidence for review, not proof of ranking loss.
// RELATED SKILLS

EXPLORE MORE

VIEW ALL 26 SKILLS →

CATCH SEO REGRESSIONS
BEFORE THEY SPREAD.

$
git clone --depth 1 https://github.com/AgriciDaniel/claude-seo.git && bash claude-seo/install.sh
VIEW ON GITHUB ALL SKILLS >