301→302301→302
A temporary redirect where a permanent one belongs.
Found by Redirect checker →
redirect loopredirect loop
The URL redirects back to itself and never settles.
Found by Redirect checker →
Import & compare

URL history across scans

See how one URL changed across retained scans: status, title, canonical, body and links, with a body diff between snapshots.

URL history across scans

Body diff

scan-body-diff compares retained bodies of the same URL.

URL history across scans

Wayback

wayback-history adds archived snapshots for context.

How it works

Three steps, one saved scan

  1. Keep scans in a project

    Each crawl is saved as a SQLite scan file in the project's scans folder. Old scans stay readable, so you can look back at any URL.

  2. Read one URL across scans

    scan-url-history shows the status, indexability, title, canonical and redirect target of one URL in each retained scan, plus its body hash. Scans without the URL are marked absent.

  3. Diff the body between two scans

    scan-body-diff compares the retained body of the same URL in two scan files. Text output is capped by --max-bytes and --max-lines. wayback-history adds free Internet Archive snapshots for context.

How to run it

One command

bash
seohead scan-body-diff --left ./scans/a.sqlite --right ./scans/b.sqlite --url https://example.com/

Install first: installation guide. Every command also runs as an MCP tool for AI agents.

FAQ

Questions

URL history across scans
No. URL history only reads scan files, and scan-body-diff is read-only too. It sends no requests to your site. wayback-history reads the public Internet Archive.
Not in scan-url-history. It returns status, indexability, title, canonical, redirect target and body hash. Link changes are not compared across scans yet.
Not by itself. A changed body is a fact to review, not a score or verdict. The diff shows what changed; you decide whether it matters.
No. wayback-history uses the public Internet Archive and needs no key. It lists when the URL changed, the status it returned and its MIME type.
scan-url-history reads the newest scans you ask for with --limit, from 1 to 500. The default is 50.

Check your redirects locally