AI crawler URL inspector
Permission, response and readability for one URL: what robots.txt says, what a real fetch returns, and how much of the page exists before JavaScript runs.
Paste the exact page you want cited. We read the site's robots.txt, then make one request per crawler and report what came back. Free, no sign-up, the whole result is shown.
Four requests, one page.
GPTBot, ClaudeBot, PerplexityBot and Googlebot each get their own fetch. You will get the robots.txt verdict, the HTTP status, the redirect chain hop by hop, the content type and the byte count for each one — plus how much of the page is readable text before any JavaScript runs.
We send our own user-agent and name the crawler we are asking about inside it. We never send somebody else's crawler token.
What this inspector actually does
It answers three questions about one URL, and each answer comes from something it measured rather than something it assumed.
- Permission. It fetches
/robots.txtfrom the origin, parses it into user-agent groups under RFC 9309, and reports what that file says about each crawler's access to the site root. The site root — not the path you pasted. That distinction is deliberate and explained below. - Response. It then makes one real HTTP request per crawler and reports the status code, every redirect hop in order, the content type and the number of bytes returned. This is the half robots.txt cannot tell you: a crawler that is permitted can still be met with a 403, a consent interstitial, a login wall or a redirect to a different page entirely.
- Readability without JavaScript. It takes the HTML that came back, removes
<script>and<style>blocks and HTML comments, strips the remaining tags, and counts what is left. That count, against the size of the whole document, is the text share. The bytes inside<script>tags are counted separately as the script share.
We request as ourselves, asking for what that agent asks for
This matters enough to state twice. Every request this tool makes carries our user-agent, with the crawler we are asking about named inside it — something of the shape Attensira (asking-as GPTBot; not GPTBot). We do not send GPTBot as our user-agent, because sending somebody's crawler token to a stranger's server is a claim to be that company, and tools in this category make it routinely.
The honest consequence: a site that varies its response by user-agent — a bot-management product, a paywall with a crawler allowlist, an edge rule keyed on the token — may answer the real crawler differently than it answered us. What you get here is a real response from your server to a real request, which is far more than robots.txt gives you, and it is not a recording of what OpenAI or Anthropic saw. We cannot see that, we do not intercept anyone's traffic, and nothing on this page should be read as if we did.
The only record of what a crawler genuinely received is the one your own server wrote. That is a question your access logs answer, not this tool.
How this differs from the AI crawler access checker
The two tools are deliberately not the same check, and running both on the same URL is the point.
- This inspector fetches the page. Its robots.txt column is coarser — it reports the verdict at the site root, because that is the one path every site has — but it adds the thing the other tool cannot see: the status code, the redirect chain and the markup a request actually received.
A page can be allowed by robots.txt and return a 404. It can be allowed and 302 to a login screen. It can return a clean 200 whose body is an empty container waiting for a script. Each of those is invisible to a robots.txt check and each of them ends the same way: nothing to cite.
Reading the text-versus-script split
The two percentages are shares of the same denominator — the bytes the server returned — and they do not add up to 100. The remainder is tags, attributes and CSS: neither readable prose nor executable script.
There is no pass mark here, and we are not going to invent one. No operator publishes a threshold for how much server-rendered text a page needs, so any line we drew would be a number we made up, and it would be the number you acted on. What the split tells you is factual and narrow: an agent that fetches your HTML without running a browser has exactly the words in the text column available to it. If that column is nearly empty on a page you want quoted, the words you want quoted are not in the response.
Whether a given crawler executes JavaScript is a separate question, and not one this tool can answer. Operators change that behaviour without announcing it, and several documented crawlers fetch HTML only. We measure what was served; what each crawler does with it is the operator's to say, which is why every token in the table links to its own operator documentation.
One more limit worth stating: this is a single sample. One fetch, from one place, at one moment. A CDN that varies by region, an origin under load, a deploy mid-flight — any of these change the answer. Treat a single run as evidence to check, not as a settled fact about the page. If a number here matters to you, run it again in an hour.
What to do with each finding
- Allowed by robots.txt, but the fetch returned 403. Something between the crawler and your origin is refusing on its own terms — a WAF rule, bot management, or a rate limiter that treats unusual user-agents as hostile. robots.txt cannot undo that. The fix is in the same product that imposed it.
- A long redirect chain before the 200. Each hop is a chance to lose the crawler and a chance to lose the canonical signal. Chains built from http to https to www to a trailing slash are the usual cause; collapse them into one hop.
- Blocked at the root, but the page itself matters. A blanket
Disallow: /is usually a staging file that shipped. Write the file you meant with the robots.txt generator and re-run both checks. - 200, HTML, and almost no text. The page renders client-side. Server-rendering the primary content is the real fix; a summary in the HTML is a partial one. Once the words are in the response, check how they are organised with the content structure analyzer.
- An empty mount point in the markup with no text around it. The inspector reports this only when it actually parsed an element with no children — it is a fact about the bytes, not a guess about your framework. It usually travels with a very low text share, and it has the same fix.
Questions people ask about this check
Are you showing me what ChatGPT or Claude actually saw?
No, and we will not pretend otherwise. We make our own request and name the crawler we are asking about in our user-agent, without sending that crawler's token. If your infrastructure varies its response by user-agent, the real crawler may have been served something different. We do not intercept traffic between anyone and an AI assistant, and no tool that does not run on your server can.
Why is the robots.txt verdict for the site root rather than my URL?
Because this tool's job is the fetch, and the root verdict is the context around it. A root-level Disallow is what stops a crawler reaching anything, so it is the verdict that decides whether the rest of this report matters. Path-scoped verdicts — which specific rule, on which line, decides one URL — are not reported here yet.
What counts as text in the text share?
Everything left after removing script and style blocks and HTML comments, stripping the remaining tags and decoding entities. noscript content is kept, because an agent that does not run JavaScript is precisely who that content was written for. Alt text and other attribute values are not counted — they are markup, and counting them would inflate the number.
The byte count looks smaller than my page. Is it wrong?
We stop reading a response at a size cap, and when we do the result says so explicitly. Past that point every count is a floor rather than a total, and the page labels it that way rather than quietly reporting a partial read as a whole document.
Do you store the URLs I inspect?
No. The requests are made inside your request and the result is returned to your browser. There is no account and no saved history. The shareable link simply re-runs the same inspection against the same URL, which means the numbers can differ from the ones you saw — it is a re-run, not a saved snapshot.
Where to go next
- Write a robots.txt that allows the crawlers you wantIf this report shows a crawler blocked at the root, this builds the file that unblocks it, per crawler.
- See which AI crawlers actually reached your serverThe one record of what a crawler really received is the one your own origin wrote. This tool makes a request; your logs hold theirs.
- Write the robots.txt rules you actually intendedIf the verdict column is blocking a page you want cited, this builds the per-crawler file that changes it.
- Measure how the served text is structuredOnce the words are in the HTML, headings, lists and paragraph length decide whether a model can lift an answer out of them.
- Track whether assistants cite the page you just fetchedFetchable is the first gate, not the last. Prompt tracking says which answers name you and which URLs they cite.
- Confirm the sitemap advertising this URL is validA URL that redirects or 404s for a crawler but sits in your sitemap is a contradiction worth catching before a crawler does.