AI Visibility Checker what a non rendering crawler actually gets from your page

Five checks, 100 points, a rubric published in full further down this page. It runs entirely in your browser and makes no network request of any kind, so the fetch is yours to run: the tool prints the exact command, you paste the response body back, and every score is computed on your real bytes rather than on a questionnaire.

This runs entirely in your browser, so it cannot fetch your page for you. There is no server here, no request leaves this tab, and nothing you paste is transmitted or stored. What that costs you is one copy and paste. What it buys you is that the scoring runs on your real response bytes rather than on a questionnaire, and that a tool about what crawlers can read is not quietly asking you to trust an API you cannot see.

Step 1. Fetch your page the way a crawler does

Used for three things: the path that robots.txt rules are evaluated against, the domain name compared to the name in your schema, and the label on your share link. Use the page you would put in a proposal rather than your best blog post. Those are the pages that fail most often.

Run these two commands. The first is the status code, the second is the body.

curl -s -o /dev/null -w "%{http_code}\n" -A "GPTBot" https://northwind-analytics.example/pricing
curl -s -A "GPTBot" https://northwind-analytics.example/pricing

Both matter and most checks only do the first. Anything other than 200 is a block above your application, usually at your CDN or WAF, and no change to robots.txt will fix it. A 200 that returns a challenge page is a soft block: it passes the status check and fails everything else.

This is the one field the tool cannot verify, and it ships set to not tested. A browser cannot fetch another origin as GPTBot, so this is your observation rather than our measurement. Left as not tested it is excluded from the score and the remaining 82 points are rescaled to 100, which is the honest treatment of an unmeasured check. It is never scored as a zero, because a tool that treats an untested check as a failure is producing noise and calling it a measurement.

Step 2. Paste the body you got back

View Source in your browser works too, as long as it is View Source and not the Elements panel. The Elements panel shows you the document after JavaScript has run, which is the one thing this tool exists to look past. Nothing in what you paste is executed: it is parsed into a document object, measured, and discarded.

Leave this empty if you do not have one. A missing robots.txt scores full marks, because absence of a directive means allowed, and a tool that penalises a missing file is selling a fix for a problem you do not have.

Step 3. The shell probe, optional and worth the minute

Request a URL on your own origin that cannot exist and see what comes back. If your site is a single page app with a catch all route, that request returns your empty shell, and the tool now has your empty baseline measured rather than assumed.

curl -s -o /dev/null -w "%{http_code} %{size_download}\n" \
  https://northwind-analytics.example/x7f3a91c4d0e28b65a1f4c9307de5b2a6

No account, no email, no wall on the result. Nothing here is transmitted, because there is nowhere to transmit it to. Your share link carries the numbers and the URL you typed, and never the page body you pasted.

This browser cannot parse HTML into a document object. Everything here depends on that, so there is no partial result to show you. The curl commands above still work and the rubric is published below, so the two checks that decide most results can be run by hand.

Methodology, assumptions and where this is wrong

What is measured. Everything computed from the response body you pasted: byte length, the visible text left after scripts, styles, noscript blocks, templates and comments are removed, heading counts, paragraph lengths, table and list structure, every JSON-LD block, and the four places your site states its own name. The robots.txt verdict for all ten documented agents is computed from the file you pasted using standard group semantics, where an agent specific group wins over the wildcard group entirely, the longest matching path rule wins inside a group, and Allow wins an exact length tie.

What is assumed, and it is one thing. Crawler fetch access is your observation rather than our measurement, because a browser cannot request another origin as GPTBot. It ships set to not tested, and while it stays there it is excluded from the score and the remaining 82 points are rescaled, never scored as a zero. Nothing else on this page is a self report.

What is policy, chosen by us and published so it can be argued with. The five weights of 30, 30, 20, 12 and 8. Every threshold inside them. The cap at 39 when the crawler received nothing usable. The four schema penalties. The five band boundaries. None of these is a measured coefficient, and nobody has published a study establishing that crawler access is worth 30% of an AI visibility score. What the evidence supports is the ordering: rendering is binary and everything else is conditional on it. We encoded that ordering and we chose the numbers. Rubric version 1.0.0, and a shared result renders under the version it was scored with.

Two numbers in here have a stated origin. The 400 byte boundary in the shell delta comes from a measurement rather than a guess: on the parent site on 6 August 2026 the empty baseline came back at 5,179 bytes and two commercial routes came back at 5,519 and 5,669 bytes, so roughly 340 to 490 bytes is what one heading and one paragraph looks like on the wire. The 1,500 byte floor applied to a minimal 404 baseline is our policy and it is deliberately cautious, in the direction that makes your page look worse rather than better.

It is wrong when your clipboard changes the bytes. The shell delta is a byte comparison, and copying through a clipboard can normalize line endings, and View Source in some browsers pretty prints or re-encodes what it shows you. If your pasted body differs from the wire by more than a few hundred bytes, the shell delta is measuring your clipboard. The curl output is the reliable input, and piping it to a file and opening that file is more reliable still.

It is wrong about one page at a time. Partial coverage is the common failure and it is the hard one to spot, because a single spot check usually lands on a route that happens to pass. Run this against three or four routes before you conclude anything about your site, including the routes nobody sends traffic to.

Three of the formatting checks are approximations. The answer first opening, the definition after each heading, and the self contained section lengths are pattern matches over your text, not comprehension. A page can be genuinely well written and lose points here, and a page can game all three and be worthless. They are indicators that independent research associates with citation influence. They do not measure citations, and nobody outside the platforms can.

The parser is a browser, which is more forgiving than it should be. Your markup is parsed into a document object the same way a browser would, which silently repairs unclosed tags and misnested elements. A crawler's parser may be stricter. If your HTML is badly broken, this tool will flatter it.

It cannot see anything it was not given. No login, no second page, no rendered DOM, no JavaScript injected schema, which is ignored on purpose because the crawlers ignore it too. And the whole thing stops at the two gates you control. Whether an assistant actually cites you depends on a third gate that is off your domain, inside systems that publish nothing about how they rank candidates, and any tool that claims to predict it has invented the part that matters most.

Run performed in your browser on 11 August 2026. Nothing was transmitted. If our number and a number you calculate by hand from the rubric above disagree, ours is the one to distrust.

Quick answer

The AI Visibility Checker scores five things about a page: crawler access, extractable HTML, answer formatting, schema coverage and entity consistency. It also generates an llms.txt file and then tells you not to expect much from it. Because there is no server behind this build, nothing you paste is transmitted or stored, and the one thing that costs you is a copy and paste. What it buys you is that the scoring runs on the response a crawler would actually have received, and that a tool about what machines can read is not quietly asking you to trust an API you cannot inspect. It does not predict whether an assistant will cite you, because nobody can build that honestly.

AI visibility is whether an AI assistant can fetch your page, read it without executing JavaScript, and find a passage in it worth quoting. This tool measures the first two. A browser cannot fetch another origin and read the response back, and it cannot send a custom user agent header at all, so rather than pretend otherwise this build hands you the command and scores what comes back. That has one honest advantage over a hosted fetcher: you see the raw response with your own eyes before any rubric touches it. Most people running it for the first time on a modern marketing site are surprised, and not in the direction they expected.

How do you use it?

Four steps, and the whole thing takes a couple of minutes.

  • Step one. Enter the URL you would send a buyer to. Not your best blog post. Your homepage, your main product page, or the page you would put in a proposal. Those are the pages that fail most often, and they are the ones an assistant fetches when somebody asks what your company does.
  • Step two. Run the two commands the tool prints and paste the response body back. The first returns the status code, the second returns the body, and both matter. View Source works too, with one caveat the tool repeats on screen: your browser has already run your JavaScript, so a copy taken from the Elements panel measures your browser rather than the crawler.
  • Step three. Read the excerpt before you read the score. The first block of the result is the actual text a crawler would have received. If that block is empty, you already have your answer and the number underneath it is a formality.
  • Step four. Fix the one thing at the top. The result names a single instruction rather than a list of twelve. The list is below it, and it will still be there next week.

There is an optional fifth step worth the extra minute, and it is the one that turns an estimate into a measurement. The shell probe asks your own origin for a URL made of random characters that cannot exist. If your site is a single page application with a catch all route, that request returns 200 with your empty shell, and you now have your empty baseline measured rather than assumed. Your real page is then scored against that baseline instead of against absolute thresholds, and the result labels itself estimated if you skip it.

What do the numbers mean?

The score is five dimensions summing to 100 points, plus one rule that overrides the arithmetic when the arithmetic would flatter you.

DimensionPointsThe question it answers
Crawler access30Can the crawler reach the page at all
Extractable HTML30Did it receive any content
Answer formatting20Is there anything here a model can lift
Schema coverage12Can a machine tell what this page and this company are
Entity consistency8Does your site say the same thing about itself everywhere
The five dimensions and what each one is asking

Crawler access splits into two unequal halves. Eighteen of its thirty points come from what the fetch returned, which is something you observed and reported rather than something the tool measured, and it ships set to not tested. Left untested it is excluded and the remaining 82 points are rescaled to 100. It is never scored as a zero, because a tool that treats an unmeasured check as a failure is producing noise and calling it a measurement. The other twelve points come from your robots.txt, parsed per agent against the specific path you entered.

The rule that overrides the arithmetic: if the crawler received no usable content, the score is capped at 39 regardless of how good everything else is. A perfect schema graph attached to an empty page is a perfect schema graph attached to an empty page. Underneath the capped number the tool shows the score you would have had once rendering is fixed, which assumes extractable HTML goes to full marks and leaves the other three dimensions exactly where they were measured. That projection is an assumption and it is labelled as one. It is also the number worth screenshotting for whoever controls the engineering backlog. A separate and harsher cap applies at 19 when nothing got through at all, because a blocked crawler is not a content problem and no amount of writing will move it.

ScoreBandWhat it means
0 to 19BlockedThe crawler cannot reach you, or gets a challenge page instead of a page
20 to 39InvisibleThe fetch works and the page is empty or a stub
40 to 59Readable, not quotableReal HTML arrives, and there is very little in it a model can lift
60 to 79QuotableContent and structure are there, with the specific gaps named
80 to 100Reference gradeBoth measurable gates pass. The remaining work is off your own domain
The five bands

Nobody should read a band as a promise. This tool measures two of the three gates. The third is corroboration, meaning what sources you do not own say about you, and it cannot be measured from a URL. A perfect score here is not a prediction that you will be cited.

Why are some crawlers scored and others only reported?

Because blocking a search agent costs you visibility and blocking a training agent does not. The tool reports ten documented agents and scores five of them, and it will not deduct a point for a decision you made deliberately about whether your content trains a commercial model.

BucketAgentsScoredWhy
SearchOAI-SearchBot, ChatGPT-User, Claude-User, Claude-SearchBot, PerplexityBotYes, all twelve robots pointsThese are the agents that fetch a URL to build or support an answer. Blocking one removes you from the answers that assistant produces.
TrainingGPTBot, ClaudeBot, Google-Extended, CCBotNo, reported onlyWhether your content trains a commercial model is a policy decision with no visibility cost either way. Google states that Google-Extended does not affect inclusion in Search and is not a ranking signal.
UnenforceablePerplexity-UserNo, reported onlyPerplexity documents that this agent generally ignores robots.txt, so that row belongs to your CDN rather than to a text file, and scoring it would imply a control you do not have.
The agent buckets, and why the distinction changes the score

A missing robots.txt scores full marks on this dimension, because absence of a directive means allowed, and a tool that penalises a missing file is selling a fix for a problem you do not have. Malformed lines are reported as parse notes and carry no deduction, for the same reason.

What is the methodology?

The method is one fetch per path with a documented crawler user agent and no JavaScript execution, run by you from your own terminal, with the response body pasted into a rubric that is pure arithmetic and touches no network and no storage. What you paste is parsed into a document object through DOMParser, measured, and discarded. Nothing in it is executed, no subresource is requested, and no script in a pasted page ever runs.

We ignore JavaScript on purpose, because so do the crawlers. The Vercel and MERJ server log study published on 17 December 2024 found no JavaScript execution by any major AI crawler: the OpenAI agents fetched JavaScript files in 11.50% of requests and the Anthropic agents in 23.84%, and neither ran them. A checker that renders your page before scoring it is measuring your browser rather than your visibility. Schema injected by client side JavaScript is ignored for the same reason, which is that scoring it would make the tool lie in the exact direction it exists to correct.

The shell probe is the most important mechanic in the whole rubric and it is the one most people skip. Without it, extractable HTML is scored against absolute thresholds and the result says estimated. With it, your page is scored against your own measured empty baseline, and the delta is the amount of real content in the first response. If the probe returns a designed 404 page rather than a shell, the tool declines the baseline instead of using a bad one. If it returns a minimal 404, the baseline is floored at 1,500 bytes, which is a deliberately cautious policy that makes your page look worse rather than better. This is exactly the method we ran on our own parent site, where the empty baseline came back at 5,179 bytes and two commercial routes came back at 5,519 and 5,669 bytes, which is a heading and one sentence.

Three schema penalties apply after the raw sum and before the cap. Deprecated how to markup costs two points, because it produces nothing and makes your markup look old. A JSON-LD block that fails to parse costs a point each up to two, because broken markup is worse than absent markup, being invisible until something reads it. Rating or review markup costs four, and that one deserves its sentence: we cannot verify it from outside, so if every rating traces to a named customer who approved it in writing then ignore the row, and if not, it is the single schema mistake with legal exposure attached. The FTC rule on consumer reviews has been in force since October 2024 and it is being enforced.

The rubric is versioned and dated, and the full working is on the page behind a toggle rather than behind a support article. There is nothing to reproduce independently, because the reproduction is the input: your bytes are what the arithmetic runs on, so there is no version of this where our number and your number disagree. The one place to be careful is the paste itself, and the tool says so next to the field.

Where is this tool blind or wrong?

Six limits, stated plainly, and each of them is something a competing product will imply it has solved.

  • It does not measure corroboration, which is the third gate and cannot be measured from a URL at all. What sites you do not own say about you is the half of this problem no checker can reach.
  • It does not know whether any assistant has ever cited you, because no first party citation data exists for ChatGPT app answers, Claude or Perplexity. Bing Webmaster Tools and Search Console report on their own surfaces, both are free, and both should be switched on before you read anything into this score.
  • It does not describe what Googlebot sees. Googlebot renders JavaScript on a deferred second pass, so your Google position can be healthy while this score is zero. That gap is the entire reason the tool exists.
  • It does not know how often the crawlers visit, because no vendor publishes crawl frequency and inferring one from a handful of observations is not a measurement.
  • It cannot see anything behind a login, because the command it hands you fetches as an anonymous client, which is what a crawler is.
  • It scores one page. A site is not one page, and a homepage that passes tells you nothing about a route type nobody has checked.

The weights are our editorial judgement rather than a discovered constant. No study establishes that crawler access is worth thirty points. What the evidence supports is the ordering: rendering is binary and everything above it is conditional, and the traits separating high influence citations from low influence ones are definitions, numbers, comparisons and procedural steps. We encoded that ordering and we chose the numbers. Anybody presenting a weighting like this as a measured fact is overselling, ourselves included if we ever do it. Argue with a weight and tell us which one, because the rubric is versioned so that conversation can go somewhere.

One more limit belongs here because it is the one people most want us to remove. This score is not a prediction that an AI assistant will cite you. Nobody can build that, because two of the three inputs sit off your domain inside systems that publish nothing about how they rank candidates. It is a measurement of two gates you control, and it stops there deliberately.

What is gated, and what does a run store?

Nothing is gated and nothing is stored, and on this build there is nothing that could be. The score, the crawler excerpt, all five dimension cards, the agent matrix, the schema inventory, the entity comparison, the generated llms.txt file and the share link are all on the page. No account, no password, no verify your email to see your result. The scoring is a pure function running in your tab: no request goes out, no result comes back, and we never learn which domain you checked. Your share link carries the numbers and the URL you typed, and never the page body you pasted, because a result link is a public statement about a public URL and it should carry nothing else. What that costs us is obvious and we are fine with it, which is that we cannot tell you ran it. A gated tool earns no links and no citations, which would defeat the reason for building this one.

Frequently asked questions

How do I check if my site is blocking GPTBot?

Fetch your homepage with the GPTBot user agent and check two things: the status code and the body. A 403 means your CDN or WAF is refusing the request and no change to robots.txt will fix it. A 200 containing a challenge or interstitial page is a soft block that passes a status check and fails everything else. A 200 containing no body copy is a rendering problem rather than an access problem. The tool prints both commands and scores the three outcomes separately, because the fixes are completely different. Worth knowing before you interpret a refusal: Cloudflare has blocked AI crawlers by default on new domains since 1 July 2025, and nobody tells the marketing team.

Is the score a prediction that AI assistants will cite me?

No, and be careful with any tool that implies otherwise. Citation depends on three things: whether the crawler can read you, whether there is a passage worth lifting, and what sources you do not own say about you. This scores the first two. The third is off your domain and no URL based checker can see it. There is also no published information about how the assistants rank candidates for citation, so a prediction would require inventing the part that matters most.

Why does my score here differ from another AI visibility tool?

Because we score different things and we publish our weights. Most tools in this category render your page before scoring it, which measures your browser rather than the crawler, and many deduct points for blocking training crawlers, which is a policy decision with no visibility cost. Our rubric is on this page with every threshold in it and it is versioned. If you think a weight is wrong, the useful move is to say which one and why.

Should I ship an llms.txt file, given the tool generates one?

Ship it if you like, and never report it as a result. Google states that Search does not use it. A study across roughly 300,000 domains found 10.13% adoption, zero adoption among the top 1,000 domains by traffic, and no citation effect surviving controls for site authority, schema density and content recency. It costs about fifteen minutes and carries no risk, some developer tooling does read it, and the tool generates one because refusing to would be precious. The honest framing is that it is a cheap courtesy rather than a lever.

Do you need my email or an account?

No, and there is no field to enter one into. Nothing you paste leaves the browser, so an email capture around the result could not be built here even if we wanted one. The result, the excerpt, the dimension cards, the generated file and the share link are all on the page with no wall in front of them.

InboundPros is part of the Outbound Pros group, which sells managed outbound. That is disclosed on every page here, including this one, because a site recommending its own group without saying so is misrepresenting its independence. It is also the reason this tool is free and ungated rather than a lead magnet: we would rather be audited than believed.

Bring the result to a scoping call

Paste the score and the crawler excerpt into the booking note. We will tell you which gate you are failing before anything commercial comes up, and if the answer is that you do not need us, that is a short call.