toolkit

Before/after check · Playbook

The verdict model — and why the split matters

snapatu returns one of three verdicts, and the boundary between them is the most important design decision in the tool.

Verdict Exit Means
PASS 0 Nothing detectable changed.
REVIEW 2 Things changed. A human should look. This is the normal result for an intentional edit.
FAIL 1 The page is worse than before.

Why not just “changed / unchanged”

Because a tool that flags your intentional copy edit with the same red as a 500 error trains people to ignore it. Within a week nobody reads the output, and the safety net is gone.

So FAIL is reserved for a page that regressed:

  • HTTP status ≥ 400 or unreachable — the page errors now.
  • A newly introduced redirect (was 2xx, now 3xx) — the URL silently moved.
  • Newly broken links — a link that returned OK before and doesn’t now.

Everything else is REVIEW: title changed, meta description changed, canonical changed, h1 changed, copy changed. Those are usually what you meant to do — the report’s job is to show you precisely what moved so you can confirm it was intentional.

The cases this is designed to catch

The failure mode for a small WordPress edit isn’t usually “the page is blank.” It’s quieter:

  • Editing a page in the builder blanks the meta description the SEO plugin had set.
  • A page duplicated from another one keeps the original’s canonical, deindexing the new one.
  • A find-and-replace across content changes more copy than intended three sections down.
  • A link is retyped with a typo, or points at a page that was deleted in the same ticket.
  • The title gains or loses the brand suffix.
  • og:image is dropped, so the social preview breaks.

None of these are visible in a screenshot. All of them are caught here.

What a REVIEW should look like when everything went right

REVIEW — https://client.com/services
  • copy changed (+12/−4 words)

One line, matching the edit you actually made. If REVIEW lists things you didn’t touch — canonical, robots, links you never edited — that’s your signal that the CMS did something on your behalf.

Dynamic content

Rotating testimonials, a footer year, “posted 3 hours ago” — these produce copy-change noise on every run. That’s honest rather than wrong: the diff shows you it was the testimonial, and you move on. If a page is unusable because of it, --no-links and reading only the metadata table is a reasonable fallback, or compare the two snapshots’ snapshot.json directly.