Skip to content

What crawlwise cannot tell you

Every SEO tool is a set of measurements with an edge. This page is ours: what the audit cannot see, what the number means, why “not measured” is a real answer, and what this product deliberately refuses to do. Where a limit is enforced in code, the file is named so you can check that it is.

What a single-page audit cannot see

An audit fetches one URL, once, from one machine. Everything below follows from that and none of it is a bug:

It does not see the rest of your site. Duplicate titles across 400 pages, orphan pages, broken internal links and redirect chains are cross-page findings and come from a crawl, not an audit — `lib/checks` and `lib/crawl` keep them separate for exactly this reason.

It does not see anything behind a login, a paywall or a geographic block. If a page answers a stranger with a login form, that form is what gets audited.

It does not run your JavaScript. The checks read the HTML the server returns. A client-rendered page can look empty here and be fine in a browser — and we would rather tell you that than count the empty document against you.

It sees one answer from one location. A CDN can serve a different response to a crawler in another region, and the AI-crawler check is the only place we look at that, by fetching as each crawler on purpose.

It cannot tell you why a page does not rank. Nothing can, from outside. The audit reports what the page declares and what the server returns, and stops there.

What the checklist score is, and is not

The score is our own count of the checks that applied to the page: how many of them the page passes, out of the ones that were applicable. `lib/types.ts:scoreBreakdown` is the whole implementation and it is short on purpose.

It is not a Google score. Google publishes no such number, and any tool showing you one is showing you its own arithmetic — including us.

It does not predict ranking. A page can pass every check and rank nowhere; that is the normal case for a competitive query.

It is null, not zero, when nothing scorable applied. A report where every scorable check was inapplicable has no score, and printing 0% would be a claim about your page rather than about our coverage of it.

The denominator travels with it everywhere it is shown, and those two numbers are computed from the same array so they cannot disagree.

Checks are retired rather than redefined. When one is withdrawn, `lib/scope.ts:RETIRED_CHECK_IDS` filters it out of every view of an old report instead of pretending it never ran.

Why you will sometimes read "not measured"

Because it is true. If a vendor did not return a value, a request timed out, or a check could not be evaluated from the outside, the report says not measured and distinguishes it from a failure. The three states are kept apart in `lib/types.ts` — `pass`, `warning`, `fail`, plus `info` and `unavailable` — and `unavailable` is never rendered as a defect or counted as a pass.

Concretely: Core Web Vitals are a PageSpeed call, and if that call fails the audit still completes and says the vitals were not measured. Field data from the Chrome UX Report is absent for low-traffic URLs, so a young site genuinely has no field number, and showing a zero there would invent one.

This is the single rule that survives every phase of this product: never invent a number. If you find us breaking it anywhere, that is the most serious kind of bug and there is a place to report it.

What bought data does and does not prove

Backlinks, referring domains, anchors and domain overview come from a third-party index, not from the web. Two vendors will give two different answers for the same domain. Their index is what it is, and we pass through what it returned and charge you for what it cost us.

Domain Rating is an Ahrefs metric. It is not a Google ranking factor, Google does not know it exists, and a high number does not mean a page ranks.

Rank positions are a snapshot of a SERP at one moment, at one location, on one device. Positions move between two checks minutes apart; that is the measurement, not a failure of it.

Search Console click counts shown beside estimated traffic are measured, and the estimate next to them usually disagrees with it. We show both rather than replacing the measured number with the modelled one.

AI answer visibility comes from sending a prompt to a model and reading what came back. It is one sample of one model at one moment, with no randomness control we can honestly claim, and it is a lagging indicator: it tells you what happened, not what to do.

Local rank grids are a fixed grid of points across an area, not a rank for a city. There is no such thing as "rank 3 in London", and reporting eight checkpoints as a local ranking would be a number we made up.

Things we deliberately refuse to do

No completeness percentage for a Google Business Profile. Google publishes no field weighting, so 73% complete would be invented. The profile screen reports missing fields and never a total.

No AI-visibility score, no readiness percentage, no citation score. `lib/ai-visibility/logic.ts` is written as an ordered diagnosis instead, and the word "score" appears in the shipped source only in the sentence explaining why it is not there.

No posting review replies for you. The product drafts a reply and you post it. Automating a review reply would put words in a business owner's mouth under their own name.

No traffic-light grade for a check we cannot evaluate. A red light on something unmeasured is the same lie as a green one.

No testimonial on this site that is not from a named customer. There are none, so there are none shown.

No discount that makes the people already paying feel foolish: a price change applies to new subscriptions and grandfathers existing ones. See the pricing promise on Plans.

When we get something wrong

A wrong finding is worse than a missing one, because you would act on it. Three things follow from that:

Every action in a report cites the check that produced it and shows the evidence it was derived from, so you can disagree with the finding without having to trust the prose.

The feedback form takes a check id and a URL, and the record of what was confirmed and what we changed is public, with names of the fixes rather than a count of resolved tickets.

Retiring a check is a normal outcome. When a rule turns out to be wrong about the web, it is withdrawn from every future report instead of being softened.

Think one of these is wrong

If a limit above is out of date, or you have found a place where we broke the no-invented-numbers rule, that is worth more to us than a feature request. Report it and it goes on the public record.

Report a wrong finding Read the full check methodology