Free tool · no signup

Can AI find, read, and cite your page?

Enter a URL. We fetch the page the way an AI crawler sees it and score how findable, readable, and citable it is — with the exact fix for each issue.

Sample This is what you'll get — enter a URL above to run your own.
Find 27 / 30
Read 36 / 40
Trust 23 / 30
Content is in the HTML, not JS-only
JSON-LD structured data present
! A direct answer in the first third

What we check, and why

Every check maps to one of three questions an AI engine implicitly asks. The weights are a research-informed hypothesis — we validate them against real index/citation data on the experiments log and adjust. Rigour over false precision.

Find · 30

Can the AI reach it? Crawl access and indexability — a block here is game over.

Read · 40

Can the AI extract it? Structure, depth, and content that isn't JavaScript-only.

Trust · 30

Will the AI cite it? Structured data, a named author, and freshness.

The reasoning behind these comes from how each AI engine sources and cites content. We analyze the served HTML only — if your content is JavaScript-rendered, AI crawlers (and this tool) may not see it, which is itself the finding.

Badge & public API

The checker is free with no signup, so the rest of it is open too: a badge you can embed, and the same JSON endpoint this page runs on.

Embed the badge

If your page checks out, say so — the badge links back here so your readers can run the same check on anything they read.

AI-Ready — checked with the HZ Signal AI Readiness Checker

<a href="https://hzsignal.com/tools/ai-readiness/">
  <img src="https://hzsignal.com/badge/ai-ready.svg"
       alt="AI-Ready — checked with the HZ Signal AI Readiness Checker"
       width="200" height="36" loading="lazy">
</a>

Public API

No key, no signup. Rate-limited to 15 checks per minute per IP — beyond that you get HTTP 429 with "code": "rate_limited". Results are briefly cached at the edge. It's a free tool run by one person; please keep automated use polite.

GET https://hzsignal.com/api/readiness/?url=https://example.com/

Response (illustrative — checks arrays carry the per-check detail, points, and fixes):

{
  "url": "https://example.com/",
  "finalUrl": "https://example.com/",
  "fetchedAt": "2026-07-05T02:00:00.000Z",
  "httpStatus": 200,
  "score": 84,
  "band": "ready",
  "criticalIssues": [],
  "pillars": {
    "find":  { "score": 28, "max": 30, "checks": [ /* per-check detail */ ] },
    "read":  { "score": 32, "max": 40, "checks": [ /* … */ ] },
    "trust": { "score": 24, "max": 30, "checks": [ /* … */ ] }
  },
  "notes": []
}

Errors return error + code: bad input is invalid_url/blocked_url → 400 and the limiter is rate_limited → 429, while page-level problems (unreachable, not HTML) come back as 200 with an error body so responses always parse. The checker reads your served HTML only and identifies itself honestly as HZ-ReadinessBot/1.0 — it never spoofs an AI crawler.