301→302301→302
A temporary redirect where a permanent one belongs.
Found by Redirect checker →
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 →
The URL redirects back to itself and never settles.
Found by Redirect checker →
Import & compare
Compare crawls before and after
Before/after crawl diffs, declared URL migrations and segment diffs from saved scans, without crawling again.
How it works
Three steps, one saved scan
Save a scan for each side
Run crawl-site before and after the change, or import a Screaming Frog audit. Each run leaves one saved file you can compare later.
Diff the two saved files
compare-crawls reads both files and sorts every finding into entered, left, appeared or disappeared. It fetches nothing.
Tell a fix from a missing page
left means the URL was fetched by both crawls and the finding is gone. disappeared means the URL was not rechecked, so it proves nothing. Use verify-fixes for a verdict on specific findings.
What it checks
Checks in this feature
| Check | What it means | Severity | Evidence |
|---|---|---|---|
BROKEN_PAGE_4XX | A page returns a 4xx. The diff shows whether it entered (new breakage) or left (fixed on a URL both crawls fetched). | Critical | Before and after finding rows for the same URL |
SERVER_ERROR_5XX | A page returns a 5xx. The same entered, left or disappeared logic applies between the two crawls. | Critical | Before and after finding rows for the same URL |
TITLE_MISSING | The title element is missing on a page. A regression shows as an entered row, a fix as a left row. | Critical | Before and after finding rows for the same URL |
REDIRECT_CHAIN | A redirect chain has two or more hops. Useful after a migration to confirm chains were not added. | Important | Before and after finding rows for the same URL |
CANONICAL_MISSING | An indexable page has no canonical URL. Catches canonicals dropped in a template release. | Important | Before and after finding rows for the same URL |
URL_NOT_IN_SITEMAP | An indexable page is missing from the sitemap. Shows whether the sitemap caught up with the release. | Tip | Before and after finding rows for the same URL |
How to run it
One command
bash
seohead compare-crawls --before ./scans/before.sqlite --after ./scans/after.sqliteInstall first: installation guide. Every command also runs as an MCP tool for AI agents.
Learn more
From the blog and glossary
Import & compare
More in this group
FAQ

