The verify loop
How every SEO action is logged with a GSC baseline and later graded win, neutral, or loss
Why it exists
Most SEO tooling shows you rankings. dx-seo shows you cause and effect: every change you make is recorded, given a baseline, and then judged against Search Console once enough time has passed. Over a few cycles the ledger tells you which action types actually move rankings on a given site — and which don't.
The action ledger
The seo/actions.jsonl file is an append-only ledger. Commands write to it; seo_sync_actions mirrors each line to the dashboard, upserted by entry id, so pushing the whole file every run is safe.
Each entry captures:
| Field | Meaning |
|---|---|
id, date, cmd |
Ledger slug, log date, and the producing command |
type |
Action type — internal-link, title-meta, content-expansion, publish, republish-301, 301-merge, noindex, canonical, differentiation, link-exchange, other |
target |
The page whose ranking the action should move |
keyword |
The tracked query, when there is one |
status |
executed or dismissed |
baseline |
The GSC reading at log time — position, clicks, impressions over a 28-day window |
verify_after |
The date from which the action becomes eligible to grade |
outcome |
/seo-verify's verdict once judged — filled in later |
For a brand-new page there is no prior GSC history, so baseline is null. The verdict then reads from an absolute floor rather than a delta.
The cooling window
An executed action isn't judged immediately — rankings take time to settle. Each entry carries a verify_after date, typically four to six weeks out. Until then the action sits in the Cooling group on the Actions page. Once that date passes, it moves to Due for verify.
The verdict
/seo-verify pulls fresh Search Console data for every due action and compares it to the baseline:
- Win — the target query improved meaningfully.
- Neutral — no clear movement either way.
- Loss — the target query slipped.
The verdict is written back into the entry's outcome and re-synced. On the dashboard, the Actions page shows the before → after position, and the Overview and Portfolio pages tally win rate by action type — the signal you actually act on.
Because verdicts are grouped by action type, the ledger becomes a per-site playbook: if internal-link wins repeatedly here but title-meta keeps landing neutral, you know where to spend the next hour.
The full cycle
Act and log
A command executes an action and appends it to seo/actions.jsonl with its GSC baseline and a verify_after date.
Push
seo_sync_actions mirrors the ledger to the dashboard. The action appears under Cooling.
Wait out the window
Rankings settle. When verify_after passes, the action moves to Due for verify.
Grade
/seo-verify fetches fresh GSC data, assigns win / neutral / loss, and re-syncs. Win rates update across Overview and Portfolio.