AXRAY

How it works

One plain HTTP request, then 53 questions about what came back.

No headless browser. No JavaScript execution. No retries. That constraint is the product: it is the budget most crawling agents actually give you, and reproducing it is the only honest way to tell you what they see.

1. We fetch it the way an agent does

AXRAY sends a single GET with an honest user-agent, a twelve-second timeout and a hard byte cap, following redirects manually so the chain is reportable. Then it stops. If your content needs a browser to appear, it does not appear here — which is exactly what happens inside a crawler.

In parallel we fetch the origin-level artefacts an agent looks for before it trusts a site: /robots.txt, /sitemap.xml, /llms.txt, /.well-known/security.txt and /.well-known/mcp.json.

2. We parse it without a DOM

The HTML is parsed by a small, forgiving tokenizer written for this purpose. No browser engine, no third-party parser, no JavaScript. Real pages are malformed and a scanner that throws on bad markup is a scanner nobody trusts, so it is tolerant by design.

3. We ask 53 questions

Each check is a pure function of the same frozen set of facts, which is why the same URL scores the same in the CLI, in CI and on this site. Every check returns a verdict, the evidence behind it, a sentence explaining why an agent cares, and where possible a snippet you can paste.

4. We weight, gate and rank

Checks that do not apply to your page leave the denominator rather than costing you points: a page with no forms is never punished for having no form labels. Pillar scores are combined by weight into the overall number.

Then the gates apply. Some failures are severe enough that a good average would be a lie — a bot wall, a total robots block, a page that ships no content. In those cases the score is capped and the report says so in a sentence, because an unexplained ceiling reads as a bug.

Finally every finding is converted into the points it is costing you on the overall scale, and the fix list is sorted by that number. It is a work queue, not a list of complaints.

What we deliberately do not do

  • We do not render. A rendered score would flatter you and mislead you.
  • We do not hammer your origin. A default scan is a handful of requests; crawls run two at a time with a delay.
  • We do not guess at intent. If a check cannot be evaluated it is marked not applicable, not failed.
  • We do not hide the rubric. The full specification is public and generated from the scoring code.

Does AXRAY pass its own test?

It has to. This site is server-rendered, semantically landmarked, described in JSON-LD, and publishes llms.txt, robots.txt, sitemap.xml and an agent manifest. Run npx axray axray.online and check.