Comparing audits
How SEOFix compares an audit with the site's previous one, how unchanged pages are re-used for 0.2 credit, and how the health trend is built.
Every full audit of a site is compared with the site's previous completed audit: the report's "Since the last audit" panel shows the health change, new and fixed errors, and which checks appeared or disappeared. Pages that have not changed since that audit are re-used instead of downloaded again and cost 0.2 credit instead of 1. The site page draws the health score of the last 12 audits as a trend.
What is compared
An audit is compared with the latest earlier audit of the same site that:
- finished with status
done, - is a full audit (rechecks from "Verify fix" and previews never count),
- has not been archived (see /help/data-retention).
If there is no such audit, there is no comparison: diff is null, and the site page says "The diff appears after the second completed audit of this site".
An audit started with POST /v1/crawls and only a url is usually not linked to a site, so it is not compared. Use a site (POST /v1/sites, then start_site_audit or POST /v1/sites/{id}/crawls) for repeat audits.
How "new" and "fixed" are decided
An issue is identified by its check code and URL.
- New: the current audit has it, the previous one does not.
- Fixed: the previous audit has it, the current one does not.
- Only URLs that both audits actually checked are compared. A page counts as checked when it was fetched without a network error, answered below 500 and was not blocked by a firewall. So:
- pages a larger audit reaches for the first time do not show up as new issues;
- pages the current audit did not reach, could not fetch, got a 5xx from, or was blocked on do not show up as fixed.
- Site-level issues that are not tied to a crawled page (for example on
robots.txtor/llms.txt) are always compared.
In the app
The "Since the last audit" panel on the audit and site pages shows:
| Item | Meaning |
|---|---|
| Health | Change in health score, for example +4 or -7. |
| New errors | New issues with severity error. |
| Fixed errors | Fixed issues with severity error. |
| New issues, Fixed issues | Up to 6 checks each, with how many URLs changed. |
| "Show N example URLs with new issues" | Up to 20 URLs with new issues, errors first. |
| "Compare with audit #N" | Opens the previous audit. |
Over the API
curl https://api.seofix.ai/v1/crawls/1843/diff \
-H "Authorization: Bearer $SEOFIX_API_KEY"
{
"crawl_id": 1843,
"diff": {
"previous_crawl_id": 1790,
"coverage": { "common_urls": 1912, "prev_urls": 1930, "cur_urls": 1995 },
"health_delta": -3,
"new": { "BROKEN_INTERNAL_LINK": 14, "TITLE_TOO_LONG": 2 },
"fixed": { "META_DESCRIPTION_MISSING": 40 },
"new_errors": 14,
"fixed_errors": 0,
"new_samples": [{ "code": "BROKEN_INTERNAL_LINK", "url": "https://example.com/jobs/old-role" }]
}
}
coverage: URLs the previous audit checked, the current one checked, and both (the compared set).newandfixed: counts per check code.health_delta: current minus previous health score.
MCP: get_diff. To find older audits of a site, use list_site_audits (MCP) or GET /v1/crawls?site_id={id}.
A CI job can use the same response, for example to fail a pull request when new_errors is above 0.
Incremental crawling (304 Not Modified)
When a site's previous full audit is available, SEOFix sends each page's stored ETag and Last-Modified values back with its request (If-None-Match, If-Modified-Since).
- If your server answers
304 Not Modified, SEOFix re-uses that page's stored data, links and page-level issues instead of downloading it. Site-wide checks (links, duplicates, sitemaps) still run on the combined result. - A 304 page costs 0.2 credit instead of 1. The 0.2-credit pages are added up and rounded up once per audit: 15 unchanged pages cost 3 credits, 16 cost 4.
- The report's
stats.not_modifiedshows how many pages answered 304. - When SEOFix's checks have changed since the previous audit, every page is fetched in full once, so no page keeps results from older checks.
- This only works if your server sends
ETagorLast-Modifiedand answers conditional requests. Otherwise every page is fetched and billed normally.
Example: an audit of 2,000 pages where 1,500 answer 304 costs 500 + 300 = 800 credits.
Health trend
The site page's "Health trend" plots the health score of the site's 12 most recent completed full audits, oldest to newest. Click a point to open that report. The latest score shows next to it, with the change "vs previous".
- Rechecks are never trend points.
- A claimed preview is a point only while the site has no completed full audit.
- With one audit the panel says "One audit so far"; the line appears from the second.
Agents read the same points from GET /v1/sites/{id} (trend: crawl_id, health_score, finished_at) or MCP get_site.
Related
- /help/reading-your-report
- /help/monitoring-and-alerts
- /help/data-retention
- /help/plans-and-credits
More in Audits & crawling
Still stuck? Email [email protected] with your site and what you expected to see.