Why it exists
dx-seo records each change with a Search Console baseline and compares later performance using the same measurement scope. The ledger helps identify promising actions, but before/after movement does not prove that an edit caused it. Other changes, seasonality, and search updates can affect the result.
The action ledger
The dashboard is the system of record. Commands read the ledger through seo_list_actions and write applied actions and verification outcomes through seo_sync_actions, upserted by entry id.
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 pre-edit GSC reading — position, clicks, impressions, window length, inclusive start/end dates, country, device, and search type |
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.
Verification reuses the baseline's exact page/query filters, country, device, search type, and window length. It waits for a complete, finalized post-action window. Legacy entries whose measurement scope cannot be recovered remain ungraded, as do comparisons with insufficient query data. Follow-up dates and scope are saved in outcome.after.
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 Site 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 captures the pre-edit baseline, applies and checks the action, then prepares its ledger entry with a verify_after date.
Push
seo_sync_actions saves the entry 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 the Overview and Site pages.