SEO Skill

SEO testing report for control and variant page groups.

Use this SEO testing report after a page, template, internal-link, migration, or content change with a known date. It can compare a changed page or group with a control, while keeping incomplete windows and competing explanations in view.

Run this report from the CLI, an MCP client, or application code. Every surface uses the same report definition and returns the same evidence. JSON is the source of truth; Markdown makes it readable without hiding dates, limits, warnings, or skipped work.

What this report helps you decide

What changed in the measured search evidence after this specific site change?

  • A title, template, internal-link, migration, or content change has a clear deployment date.
  • You can wait for a complete after-window that matches the before-window.

Command facts

Report id
measure-change
Execution
Local process
Outputs
JSON and Markdown
Example parameters
site, scope, target, title, changedAt, beforeDays, afterDays
Agent discovery
seo reports describe measure-change --json
Interactive prompts
Human CLI commands only

When this report is not the right tool

These cases need a different report, more evidence, or a human decision. Do not force this report to answer a question its data cannot support.

  • You know total performance moved but need to find the pages, queries, countries, or devices behind it. Recommended report: Find which search segments moved. Run segment impact across the same comparable periods. It breaks the movement down by the selected Search Console dimension and keeps unmatched or partial rows visible.
  • You need proof that the recorded change caused the observed movement. No automated report can prove causation from a before-and-after comparison, even with a control. Review releases, seasonality, demand, ranking updates, and experimental design; use this report to preserve the measured windows and confounders for that review.

Data sources and inputs

  • Search Console performance windows. Provides equal finalised periods before and after the recorded change.
  • Saved or ad hoc change details. Defines the site, page, query, or content group being measured and the date it changed.
  • Optional GA4 and control evidence. Adds separate post-click or comparison context when configured.

What this report checks

  • Builds adjacent equal-length windows from finalised Search Console dates and reports any shortfall in usable days.
  • Compares the selected scope while keeping absent rows, controls, GA4 evidence, and known confounders separate.

How it works

  • Uses adjacent equal-length finalised windows, preserves missing and partial states, and keeps control evidence separate from the measured target.

The JSON result keeps dates, thresholds, limits, skipped work, and source completeness beside the finding. Missing, partial, capped, filtered, and complete data remain different states.

Run the report from the CLI

Compare matched Search Console windows around a saved change. Agents and CI should inspect the live schema before their first run.

Run it from the CLI

seo change-log measure --id <change-id>

Check the agent input schema

seo reports describe measure-change --json

Run it from an agent or script

seo reports run measure-change --params '{"site":"sc-domain:example.com","scope":"page","target":"https://example.com/page","title":"Updated page title","changedAt":"2026-05-01","beforeDays":28,"afterDays":28}' --json

Project profiles can fill supported property and analytics inputs for the human-facing commands. The catalog form shown here is explicit by design, so agents and CI jobs do not prompt or guess.

How an MCP agent should use it

Call seo_describe_report first so the agent sees when this report is useful and gets the current input schema. Then callseo_run_report with the validated parameters. Read the status, warnings, source limits, and skipped sections before acting on a finding.

Describe the report with MCP

{
  "id": "measure-change"
}

Run the report with MCP

{
  "id": "measure-change",
  "params": {
    "site": "sc-domain:example.com",
    "scope": "page",
    "target": "https://example.com/page",
    "title": "Updated page title",
    "changedAt": "2026-05-01",
    "beforeDays": 28,
    "afterDays": 28
  }
}

Use a follow-up report returned by the result instead of guessing the next tool. The local MCP server and CLI use the same report definition and evidence. Their outer transport envelopes differ.

Use the report in a TypeScript app

Install seo as a project dependency, then call the same report catalog used by the CLI and MCP. executeReportrejects an unknown report id or invalid parameters. Provider and runtime failures come back as structured results withisError set.

Install the library

npm install seo

Run this report from TypeScript

import { executeReport } from 'seo/mcp'

const result = await executeReport(
  'measure-change',
  {
  "site": "sc-domain:example.com",
  "scope": "page",
  "target": "https://example.com/page",
  "title": "Updated page title",
  "changedAt": "2026-05-01",
  "beforeDays": 28,
  "afterDays": 28
},
)

console.log(result)

The TypeScript library guide also covers direct core functions, schema discovery, and the difference betweenexecuteReport and runReport.

What comes back and how to read it

  • Before and after search metrics, absolute and percentage movement, window coverage, and a cautious verdict.
  • Optional control and GA4 comparisons plus warnings for incomplete data and plausible confounders.
  • Read coverage and confounders before percentage changes. A movement is evidence to investigate, not proof that the recorded change caused it.

Start with dataStatus, source details, warnings, and caveats. Then inspect the observed evidence before derived findings or suggested actions.

What this report cannot tell you

  • Seasonality, ranking updates, releases, demand shifts, and attribution changes can all move the same metrics.
  • Rows absent from one returned window are not silently converted to zero.

What to do next

  1. Keep the change if the evidence and page quality support it, or plan a measured reversal.
  2. Use segment impact when you need to locate which pages or queries moved.

Sources behind the guidance

These primary sources define the provider data or search controls used in the interpretation above.

Browse all reports in Change measurement.