Phase 4: Drift Monitoring
The audit produces a point-in-time snapshot. Drift monitoring converts that snapshot into something you can detect regressions against.
What /seo-drift adds
The seo-drift skill captures a SHA-256-hashed baseline of 13 SEO-critical elements per URL: title, meta description, canonical, meta robots, H1/H2/H3 arrays, JSON-LD schema, Open Graph, Core Web Vitals, HTTP status, and HTML/Schema content hashes. Comparison applies 17 rules across 3 severity levels (CRITICAL / WARNING / INFO).
Setup and baseline verification
Use the complete shared script bundle and setup checks in the runbook §1 before capture (--with-drift --seo-bundle "<bundle>"). Run baseline and compare through that same managed runtime. A minimum verification is:
python "<bundle>/scripts/runtime.py" run drift_baseline.py <url> --skip-cwv
python "<bundle>/scripts/runtime.py" run drift_compare.py <url> --baseline-id <saved-id> --skip-cwv
Replace <saved-id> with the returned baseline ID. --skip-cwv is for this verification or unavailable performance evidence; it does not measure Core Web Vitals. Record any omitted performance evidence and preserve separately collected performance results. Require successful capture and comparison, a persisted baseline row in the reported SQLite database, and a comparison referencing that ID. Inspect the captured status/title/headings/canonical/schema against the page evidence; a successful exit with empty or wrong fields is not a valid baseline. Record the absolute database path, URL set, timestamp, baseline IDs, source revision, comparison result, and field coverage. Raw-response-only captures must be labelled as such; they cannot establish rendered coverage for JS-dependent pages. Preserve this initial snapshot, and add a separate post-fix baseline after implementation. If capture or comparison fails, mark drift unavailable with the repair action; do not silently substitute manual JSON and mark the step complete.
Commands
| Command | Purpose | When to run |
|---|---|---|
/seo drift baseline <url> | Capture current SEO state as a “known good” snapshot | End of audit (lock the post-fix state); before any planned deployment or migration |
/seo drift compare <url> | Diff current page state against the stored baseline | Monthly for retainer clients; after every production deployment |
/seo drift history <url> | Show change history for a URL | Retrospectives; ranking-drop investigations |
When to run baseline capture
| Audit context | Baseline timing |
|---|---|
| One-off audit (no retainer) | Capture the initial snapshot at runbook §3.18 and hand over its database path, URL list, and repeat command. A retainer is not required to preserve a useful starting point. |
| Retainer engagement starting | Preserve the initial audit snapshot; add a separate baseline on the top 10-20 commercially important URLs after Tier 1 fixes ship. |
| Pre-migration | Capture baseline of all top organic landing pages on the current site before launch. |
| Pre-deployment | Optionally baseline before any significant template/theme/plugin change. |
Monthly retainer workflow
/seo drift compare <url>against each baselined URL- Triage: review CRITICAL findings promptly and agree any escalation with the client; WARNINGs roll up into the monthly report
- For any CRITICAL or WARNING: judge whether the change was intentional (re-baseline) or accidental (escalate to dev)
- After intentional changes, re-baseline
What drift does NOT replace
- Rank tracking — drift watches on-page state, not SERP position
- GSC monitoring — drift doesn’t see crawl errors or index status
- Squirrel Scan — drift watches 13 elements per URL; Squirrel Scan covers 230+ rules across 18 categories
- Content quality judgment — the skill diffs strings; you judge whether the new string is better