Why it matters
You can’t act on findings you can’t scope
The hard question with any autonomous QA tool is the one it usually won’t answer: what did it actually test? A clean report from a crawl that only saw your logged-out homepage is worse than useless — it’s falsely reassuring. QAtesting answers the question on every scan, in writing, with a record you can read line by line.
What it records
A line for every page it reached — and how
The sitemap lists each page the crawl saw, nested under the page it was first reached from, with a tag for how the agent got there:
Followed a link
an <a href> the crawl walked from a page it had already reached
An in-app route
a client-side route an SPA rendered with no full page reload
Only by clicking
a view nothing links to — reached by driving the interaction that opens it
Found by the AI navigator
an interaction-gated view the optional navigator pass discovered
From your supplied list
a seed route you named that the crawl might not have found on its own
After logging in
the page the app landed on once the credentialed login succeeded
- Expected-vs-covered. The routes it expected to find are checked off against the ones it actually reached, so a gap is visible, not implied.
- Repeated pages, grouped. Fifty product pages off the same template collapse to one row marked ×50 — coverage without the noise.
- Dead ends, with the reason. Routes it couldn’t reach are listed with why — a 404, a redirect loop, a link that went nowhere.
- Click through to any page. Each row links to the real URL the crawl saw, and expands to the findings on that page.
Honesty about gaps
Absence of evidence is never evidence of absence
A partial crawl is the dangerous case: fewer pages checked means fewer problems found, which makes the score go up. So the coverage record feeds a verdict that sits abovethe score and won’t let a short crawl masquerade as a healthy site.
A malfunctioning crawl is flagged, not scored clean
If pages crashed during analysis, a whole check crashed, or the browser aborted early, the scan is marked degraded — its score is treated as a floor, not a verdict, and “no findings” can never render as a clean bill of health. A crawl that quietly checked less would score higher, so we refuse to let it.
A truncated crawl says exactly what it missed
When a crawl stops at its page budget with routes still queued, the score is labelled partial coverage — it covers only the pages actually crawled, and it names how many discovered routes went unvisited. No silent cap dressed up as a full pass.
A crawl that never got in gets no verdict at all
If the login failed or the crawl errored out, there is nothing to grade — so the report withholds the score, grade, and summary entirely rather than showing a green 100 for a scan that never saw your app.
Where you’ll find it
It travels with the findings
The coverage sitemap isn’t a separate export you have to go hunting for — it’s part of every hosted report, right under the findings it scopes, and it prints straight to PDF with the rest. Scope and findings are two halves of one auditable answer. The integrity verdict rides along in the CSV and JSON exports too, so a partial or failed crawl can’t be mistaken for a clean one even once the findings have left the page. The FAQ has the short version.
See it on your own site
Create an account, verify a domain, and run a scan — the coverage sitemap comes with every report.