{"version":"1.2.0","url":"https://axray.online/","finalUrl":"https://axray.online/","host":"axray.online","scannedAt":"2026-09-04T15:21:26.257Z","durationMs":272,"score":100,"grade":"A+","potential":100,"gates":[],"pillars":[{"pillar":"reachability","label":"Reachability","blurb":"Can an agent fetch your content at all, without a browser and without being blocked?","score":100,"earned":89,"available":89,"weight":25,"checks":[{"id":"http-ok","pillar":"reachability","title":"Page responds to a plain HTTP request","status":"pass","weight":10,"earned":10,"detail":"HTTP 200 in 145 ms.","why":"The baseline: an agent with no browser, no cookies and no JavaScript received your page.","evidenceQuality":"strong","impact":0},{"id":"not-blocked","pillar":"reachability","title":"No bot wall in front of the content","status":"pass","weight":12,"earned":12,"detail":"The response body was the real page, not a challenge or block screen.","why":"Bot protection that cannot tell a shopping assistant from a scraper silently removes you from AI answers, with no error anyone on your team will ever see.","evidenceQuality":"strong","impact":0},{"id":"server-rendered","pillar":"reachability","title":"Content exists without running JavaScript","status":"pass","weight":14,"earned":14,"detail":"1510 words of readable text arrived in the HTML itself.","why":"Most crawling agents never execute JavaScript. Whatever is not in the raw HTML does not exist for them.","evidenceQuality":"strong","impact":0},{"id":"robots-exists","pillar":"reachability","title":"robots.txt is present and parseable","status":"pass","weight":4,"earned":4,"detail":"robots.txt served with 4 user-agent groups.","why":"A valid robots.txt is how you talk to crawlers before they read a single page.","evidenceQuality":"strong","impact":0},{"id":"robots-answer-engines","pillar":"reachability","title":"Answer engines are allowed to crawl","status":"pass","weight":12,"earned":12,"detail":"All 5 crawlers in this group may fetch /.","why":"These crawlers are the ones that put your link inside an AI answer. Blocking them removes the referral traffic, not just the training use.","evidenceQuality":"strong","impact":0},{"id":"robots-user-triggered","pillar":"reachability","title":"User-triggered fetchers are allowed","status":"pass","weight":8,"earned":8,"detail":"All 3 crawlers in this group may fetch /.","why":"These fetches happen because a human just pasted your link into an assistant. A block here fails in front of a real person who wanted to read you.","evidenceQuality":"strong","impact":0},{"id":"robots-search","pillar":"reachability","title":"Classic search crawlers are allowed","status":"pass","weight":6,"earned":6,"detail":"All 2 crawlers in this group may fetch /.","why":"AI Overviews and Copilot answers are grounded on the classic search index. Blocking Googlebot or Bingbot now also removes you from AI surfaces.","evidenceQuality":"strong","impact":0},{"id":"agent-live-probe","pillar":"reachability","title":"Real agent user-agents are served normally","status":"na","weight":8,"earned":8,"detail":"Live user-agent probing was not run for this scan.","why":"Some sites answer 200 to a generic client and 403 to a named AI crawler. Only a live probe finds that.","impact":0},{"id":"meta-robots","pillar":"reachability","title":"No directive suppressing AI use of this page","status":"pass","weight":6,"earned":6,"detail":"Robots directives present and permissive: index, follow, max-snippet:-1, max-image-preview:large","why":"noindex and nosnippet remove you from the surfaces that would otherwise quote and link you.","evidenceQuality":"strong","impact":0},{"id":"redirect-chain","pillar":"reachability","title":"Short redirect chain","status":"pass","weight":4,"earned":4,"detail":"The URL served content directly with no redirect.","why":"Every hop costs latency and some agents cap redirects at two or three.","evidenceQuality":"strong","impact":0},{"id":"response-speed","pillar":"reachability","title":"Responds fast enough for an agent budget","status":"pass","weight":5,"earned":5,"detail":"Full response in 145 ms.","why":"Agents fetch many pages per answer and drop the slow ones. Speed is a ranking input you control.","evidenceQuality":"strong","impact":0},{"id":"payload-weight","pillar":"reachability","title":"HTML payload stays inside an agent context budget","status":"pass","weight":5,"earned":5,"detail":"10 KB of HTML, 12% of it inline script.","why":"Agents truncate long documents. Anything past the cut simply is not read.","evidenceQuality":"strong","impact":0},{"id":"content-type","pillar":"reachability","title":"Declares a correct content type","status":"pass","weight":3,"earned":3,"detail":"Content-Type: text/html; charset=utf-8","why":"A declared charset avoids mojibake when an agent quotes your text back to a user.","evidenceQuality":"strong","impact":0}]},{"pillar":"comprehension","label":"Comprehension","blurb":"Once fetched, can the agent work out what this page is and what it says?","score":100,"earned":92,"available":92,"weight":25,"checks":[{"id":"title","pillar":"comprehension","title":"Has a descriptive <title>","status":"pass","weight":10,"earned":10,"detail":"\"AXRAY - See what AI can actually read on your website.\" (54 characters).","why":"This is the label assistants attach to you when they cite this page.","evidenceQuality":"strong","impact":0},{"id":"meta-description","pillar":"comprehension","title":"Has a meta description","status":"pass","weight":8,"earned":8,"detail":"155 characters: \"Paste a web address and find out how much of your page reaches ChatGPT, Claude, Perplexity and Google AI. Free, a score…\"","why":"This is the summary assistants reuse verbatim more often than any other field.","evidenceQuality":"strong","impact":0},{"id":"metadata-consistency","pillar":"comprehension","title":"The page describes itself consistently","status":"pass","weight":6,"earned":6,"detail":"<title>, og:title, twitter:title all describe the same page.","why":"Agreement across the machine-readable labels is what lets an assistant state one name for this page and keep stating it.","evidenceQuality":"strong","impact":0},{"id":"h1","pillar":"comprehension","title":"Exactly one <h1> naming the page","status":"pass","weight":8,"earned":8,"detail":"\"People ask AI about you. See what it reads on your site.\"","why":"The h1 is the strongest in-page signal of what the document is about.","evidenceQuality":"strong","impact":0},{"id":"heading-hierarchy","pillar":"comprehension","title":"Headings form a sane outline","status":"pass","weight":6,"earned":6,"detail":"19 headings with no skipped levels.","why":"A clean outline is what lets an agent quote the right section instead of the whole page.","evidenceQuality":"strong","impact":0},{"id":"content-volume","pillar":"comprehension","title":"Enough substance to be worth citing","status":"pass","weight":10,"earned":10,"detail":"1510 words of readable text, 1397 of them in the main content.","why":"Assistants prefer sources with enough material to answer a question outright rather than pages that just point elsewhere.","evidenceQuality":"strong","impact":0},{"id":"answerable","pillar":"comprehension","title":"Answers questions in a form that can be quoted","status":"pass","weight":8,"earned":8,"detail":"FAQ structured data with 5 question-and-answer pairs, and 8 question-shaped headings.","why":"A question paired with its answer in structured data is the one format an assistant can lift whole, attribute to you, and quote without paraphrasing.","evidenceQuality":"strong","impact":0},{"id":"text-ratio","pillar":"comprehension","title":"Signal-to-markup ratio","status":"pass","weight":8,"earned":8,"detail":"22.6% of the payload is readable text.","why":"A high ratio means an agent spends its limited context on your content instead of your tooling.","evidenceQuality":"strong","impact":0},{"id":"lang","pillar":"comprehension","title":"Declares a document language","status":"pass","weight":5,"earned":5,"detail":"<html lang=\"en\">, and the text is Latin as expected.","why":"Language is how an assistant decides whether to answer a user in your words or translate them.","evidenceQuality":"strong","impact":0},{"id":"image-alt","pillar":"comprehension","title":"Images carry alt text","status":"pass","weight":8,"earned":8,"detail":"1 of 1 images described; 0 intentionally marked decorative.","why":"Alt text is the only way the content of an image reaches an agent.","evidenceQuality":"strong","impact":0},{"id":"landmarks","pillar":"comprehension","title":"Main content is marked as such","status":"pass","weight":6,"earned":6,"detail":"<main> present with <article>; 4 of 4 landmark regions used.","why":"The <main> element tells an extractor where your content stops and your chrome starts. It is the difference between quoting your argument and quoting your nav bar.","evidenceQuality":"strong","impact":0},{"id":"semantic-density","pillar":"comprehension","title":"Uses semantic elements, not div soup","status":"pass","weight":6,"earned":6,"detail":"40% of structural elements are semantic (52 semantic vs 79 div).","why":"Semantic tags carry meaning an agent can use; a div carries none.","evidenceQuality":"strong","impact":0},{"id":"noscript-fallback","pillar":"comprehension","title":"Provides a no-JavaScript fallback","status":"na","weight":4,"earned":4,"detail":"Not needed: the page already server-renders its content.","why":"","impact":0},{"id":"readable-url","pillar":"comprehension","title":"URL describes the content","status":"pass","weight":3,"earned":3,"detail":"Site root.","why":"Assistants show the URL next to the citation, and readable URLs get clicked more than opaque ids.","evidenceQuality":"strong","impact":0}]},{"pillar":"structure","label":"Structure","blurb":"Is the important data machine-readable instead of implied by visual layout?","score":100,"earned":65,"available":65,"weight":18,"checks":[{"id":"jsonld-present","pillar":"structure","title":"Ships structured data","status":"pass","weight":12,"earned":12,"detail":"5 JSON-LD blocks on the page, 14 carrying real properties.","why":"Structured data is the only part of your page an agent reads without having to interpret it.","evidenceQuality":"strong","impact":0},{"id":"jsonld-valid","pillar":"structure","title":"Structured data parses cleanly","status":"pass","weight":8,"earned":8,"detail":"All 5 blocks parse as valid JSON with a schema.org context.","why":"A block with a syntax error is silently discarded by every consumer. You get the maintenance cost with none of the benefit.","evidenceQuality":"strong","impact":0},{"id":"jsonld-types","pillar":"structure","title":"Structured data describes the right thing","status":"pass","weight":8,"earned":8,"detail":"Declared types: Organization, WebSite, WebPage, SoftwareApplication, Offer, FAQPage, Question.","why":"The right @type is what lets an assistant answer \"how much is it\" or \"when is it\" without reading your prose at all.","evidenceQuality":"strong","impact":0},{"id":"open-graph","pillar":"structure","title":"Open Graph card is complete","status":"pass","weight":6,"earned":6,"detail":"og:title, og:description, og:type, og:url and og:image all present.","why":"Open Graph is the fallback summary almost every crawler reads when it cannot parse the page body.","evidenceQuality":"strong","impact":0},{"id":"canonical","pillar":"structure","title":"Declares a canonical URL","status":"pass","weight":6,"earned":6,"detail":"Canonical: https://axray.online/","why":"Agents dedupe sources by canonical URL, and cross-origin canonicals hand your citation to somebody else.","evidenceQuality":"strong","impact":0},{"id":"sitemap","pillar":"structure","title":"Publishes a sitemap","status":"pass","weight":8,"earned":8,"detail":"https://axray.online/sitemap.xml lists 40 URLs.","why":"A sitemap is how a crawler discovers the pages your navigation hides behind JavaScript menus.","evidenceQuality":"strong","impact":0},{"id":"feed-discovery","pillar":"structure","title":"Publishes a feed of its content","status":"pass","weight":4,"earned":4,"detail":"1 feed declared: https://axray.online/writing/feed.xml.","why":"A feed hands an agent the whole content stream already parsed, with dates and titles attached, instead of making it crawl and guess. It is the cheapest way to be re-read as you publish rather than once.","evidenceQuality":"strong","impact":0},{"id":"language-alternates","pillar":"structure","title":"Declares its language alternates","status":"pass","weight":4,"earned":4,"detail":"5 hreflang alternates, self-referencing, with an x-default.","why":"A complete set is what lets an assistant answer a reader in their own language using your own words rather than a machine translation of somebody else's page.","evidenceQuality":"strong","impact":0},{"id":"price-structured","pillar":"structure","title":"Prices are machine-readable","status":"pass","weight":6,"earned":6,"detail":"Prices in the copy ($24.00) are backed by Offer structured data.","why":"A shopping or research agent comparing options reads Offer, not your pricing table CSS.","evidenceQuality":"strong","impact":0},{"id":"breadcrumbs","pillar":"structure","title":"Declares its place in the site","status":"na","weight":4,"earned":4,"detail":"Top-level page; breadcrumbs are not expected.","why":"","impact":0},{"id":"twitter-card","pillar":"structure","title":"Declares a link preview card","status":"pass","weight":3,"earned":3,"detail":"4 twitter:* tags present.","why":"Several agents fall back to card metadata when they cannot extract the body reliably.","evidenceQuality":"strong","impact":0},{"id":"microdata","pillar":"structure","title":"Inline microdata annotations","status":"na","weight":2,"earned":2,"detail":"No microdata; JSON-LD is the preferred format anyway.","why":"","impact":0}]},{"pillar":"actionability","label":"Actionability","blurb":"Can the agent take the next step - navigate, search, submit, buy - without guessing?","score":100,"earned":65,"available":65,"weight":17,"checks":[{"id":"links-crawlable","pillar":"actionability","title":"Navigation uses real links","status":"pass","weight":12,"earned":12,"detail":"All 52 links resolve to a real URL.","why":"Real hrefs are the only navigation primitive an agent has.","evidenceQuality":"strong","impact":0},{"id":"anchor-text","pillar":"actionability","title":"Link text describes the destination","status":"pass","weight":8,"earned":8,"detail":"100% of links have descriptive text.","why":"Link text is how an agent decides which link to follow when it is looking for something specific.","evidenceQuality":"strong","impact":0},{"id":"internal-nav","pillar":"actionability","title":"Links onward into the site","status":"pass","weight":6,"earned":6,"detail":"48 internal links give an agent somewhere to go next.","why":"Agents explore a site breadth-first from whatever page they landed on. Dense internal linking is how the rest of your content gets found.","evidenceQuality":"strong","impact":0},{"id":"form-labels","pillar":"actionability","title":"Form fields are labelled","status":"pass","weight":8,"earned":8,"detail":"All 2 fields have an associated label or aria-label.","why":"An agent filling a form on a user's behalf reads labels to decide what goes in each box.","evidenceQuality":"strong","impact":0},{"id":"form-names","pillar":"actionability","title":"Form fields have stable names","status":"pass","weight":6,"earned":6,"detail":"All 2 fields have readable name attributes.","why":"Names are the keys an agent uses to build a submission. Generated hashes change on every deploy and break automation silently.","evidenceQuality":"strong","impact":0},{"id":"form-autocomplete","pillar":"actionability","title":"Fields declare autocomplete tokens","status":"pass","weight":4,"earned":4,"detail":"2 of 2 fields declare an autocomplete token.","why":"Autocomplete tokens are a standard vocabulary. They remove all ambiguity about which box is the email and which is the company.","evidenceQuality":"strong","impact":0},{"id":"button-semantics","pillar":"actionability","title":"Controls are real buttons","status":"pass","weight":6,"earned":6,"detail":"4 native button controls, no div-as-button patterns found.","why":"A <button> announces itself as an actionable control. A styled div announces nothing.","evidenceQuality":"strong","impact":0},{"id":"contact-affordance","pillar":"actionability","title":"Reachable by a human, discoverably","status":"pass","weight":5,"earned":5,"detail":"3 contact signals: 1 mailto link, contact page link, contactPoint in structured data.","why":"Assistants routinely answer \"how do I contact them\". If they cannot find the answer they say so, and the user goes elsewhere.","evidenceQuality":"strong","impact":0},{"id":"search-affordance","pillar":"actionability","title":"Site search is machine-usable","status":"pass","weight":4,"earned":4,"detail":"A GET form uses the same \"url\" parameter the declared SearchAction names.","why":"A declared SearchAction lets an agent query your site directly instead of crawling it page by page.","evidenceQuality":"strong","impact":0},{"id":"api-discovery","pillar":"actionability","title":"Programmatic surface is discoverable","status":"pass","weight":6,"earned":6,"detail":"/.well-known/mcp.json; docs link: /docs; OpenAPI document referenced","why":"When an agent can call your API it stops scraping your HTML, which is cheaper for you and more reliable for the user.","evidenceQuality":"strong","impact":0}]},{"pillar":"contract","label":"Agent Contract","blurb":"Have you told agents the rules: what they may use, where the docs are, who to contact?","score":100,"earned":51,"available":51,"weight":15,"checks":[{"id":"llms-txt","pillar":"contract","title":"Publishes an llms.txt","status":"pass","weight":14,"earned":14,"detail":"https://axray.online/llms.txt served 6840 bytes, 908 words and 31 usable links.","why":"llms.txt is the one file written for assistants rather than browsers: a curated map of what matters on your site, in the order you want it read.","evidenceQuality":"strong","impact":0},{"id":"llms-txt-quality","pillar":"contract","title":"llms.txt is actually useful","status":"pass","weight":6,"earned":6,"detail":"9 sections, 31 curated links, 18 annotated, with a summary blockquote.","why":"A well-formed llms.txt is read as a table of contents. A dumped sitemap is read as noise.","evidenceQuality":"strong","impact":0},{"id":"ai-policy","pillar":"contract","title":"States an explicit AI policy","status":"pass","weight":6,"earned":6,"detail":"robots.txt names specific AI crawlers rather than relying on the wildcard group.","why":"Naming crawlers explicitly is how you separate \"do not train on me\" from \"do not send me traffic\". The wildcard group cannot express that distinction.","evidenceQuality":"strong","impact":0},{"id":"mcp-manifest","pillar":"contract","title":"Exposes an agent-callable manifest","status":"pass","weight":6,"earned":6,"detail":"https://axray.online/.well-known/mcp.json names \"axray\" and at least one endpoint.","why":"A callable manifest turns you from something an agent scrapes into something an agent uses. Almost nobody has one yet, which is exactly why it is worth having.","evidenceQuality":"strong","impact":0},{"id":"identity","pillar":"contract","title":"Identity is machine-verifiable","status":"pass","weight":5,"earned":5,"detail":"AXRAY declared with 1 sameAs link.","why":"sameAs is how an assistant confirms that this site, that GitHub org and that company are the same entity. Without it you are three unrelated strings.","evidence":["https://www.instagram.com/axray.online/"],"evidenceQuality":"strong","impact":0},{"id":"freshness","pillar":"contract","title":"Says when the content changed","status":"pass","weight":5,"earned":5,"detail":"Last-Modified: Wed, 26 Aug 2026 00:00:00 GMT; ETag present; a usable date in structured data; <time datetime> elements.","why":"Assistants prefer sources they can date, and they say so to users: \"according to a page updated in March\". Undated pages lose to dated ones.","evidenceQuality":"strong","impact":0},{"id":"licence-signal","pillar":"contract","title":"Declares content licensing","status":"pass","weight":5,"earned":5,"detail":"rel=\"license\" pointing at https://axray.online/terms.","why":"A machine-readable licence tells an agent how it may reuse your text. Ambiguity is usually resolved against you.","evidenceQuality":"strong","impact":0},{"id":"security-txt","pillar":"contract","title":"Publishes security.txt","status":"pass","weight":4,"earned":4,"detail":"/.well-known/security.txt names mailto:hello@axray.online, valid until 2027-09-04T15:21:26.051Z.","why":"It is the standard machine-readable place to say who to contact. Agents and researchers both look there first.","evidenceQuality":"strong","impact":0}]}],"checks":[{"id":"http-ok","pillar":"reachability","title":"Page responds to a plain HTTP request","status":"pass","weight":10,"earned":10,"detail":"HTTP 200 in 145 ms.","why":"The baseline: an agent with no browser, no cookies and no JavaScript received your page.","evidenceQuality":"strong","impact":0},{"id":"not-blocked","pillar":"reachability","title":"No bot wall in front of the content","status":"pass","weight":12,"earned":12,"detail":"The response body was the real page, not a challenge or block screen.","why":"Bot protection that cannot tell a shopping assistant from a scraper silently removes you from AI answers, with no error anyone on your team will ever see.","evidenceQuality":"strong","impact":0},{"id":"server-rendered","pillar":"reachability","title":"Content exists without running JavaScript","status":"pass","weight":14,"earned":14,"detail":"1510 words of readable text arrived in the HTML itself.","why":"Most crawling agents never execute JavaScript. Whatever is not in the raw HTML does not exist for them.","evidenceQuality":"strong","impact":0},{"id":"robots-exists","pillar":"reachability","title":"robots.txt is present and parseable","status":"pass","weight":4,"earned":4,"detail":"robots.txt served with 4 user-agent groups.","why":"A valid robots.txt is how you talk to crawlers before they read a single page.","evidenceQuality":"strong","impact":0},{"id":"robots-answer-engines","pillar":"reachability","title":"Answer engines are allowed to crawl","status":"pass","weight":12,"earned":12,"detail":"All 5 crawlers in this group may fetch /.","why":"These crawlers are the ones that put your link inside an AI answer. Blocking them removes the referral traffic, not just the training use.","evidenceQuality":"strong","impact":0},{"id":"robots-user-triggered","pillar":"reachability","title":"User-triggered fetchers are allowed","status":"pass","weight":8,"earned":8,"detail":"All 3 crawlers in this group may fetch /.","why":"These fetches happen because a human just pasted your link into an assistant. A block here fails in front of a real person who wanted to read you.","evidenceQuality":"strong","impact":0},{"id":"robots-search","pillar":"reachability","title":"Classic search crawlers are allowed","status":"pass","weight":6,"earned":6,"detail":"All 2 crawlers in this group may fetch /.","why":"AI Overviews and Copilot answers are grounded on the classic search index. Blocking Googlebot or Bingbot now also removes you from AI surfaces.","evidenceQuality":"strong","impact":0},{"id":"agent-live-probe","pillar":"reachability","title":"Real agent user-agents are served normally","status":"na","weight":8,"earned":8,"detail":"Live user-agent probing was not run for this scan.","why":"Some sites answer 200 to a generic client and 403 to a named AI crawler. Only a live probe finds that.","impact":0},{"id":"meta-robots","pillar":"reachability","title":"No directive suppressing AI use of this page","status":"pass","weight":6,"earned":6,"detail":"Robots directives present and permissive: index, follow, max-snippet:-1, max-image-preview:large","why":"noindex and nosnippet remove you from the surfaces that would otherwise quote and link you.","evidenceQuality":"strong","impact":0},{"id":"redirect-chain","pillar":"reachability","title":"Short redirect chain","status":"pass","weight":4,"earned":4,"detail":"The URL served content directly with no redirect.","why":"Every hop costs latency and some agents cap redirects at two or three.","evidenceQuality":"strong","impact":0},{"id":"response-speed","pillar":"reachability","title":"Responds fast enough for an agent budget","status":"pass","weight":5,"earned":5,"detail":"Full response in 145 ms.","why":"Agents fetch many pages per answer and drop the slow ones. Speed is a ranking input you control.","evidenceQuality":"strong","impact":0},{"id":"payload-weight","pillar":"reachability","title":"HTML payload stays inside an agent context budget","status":"pass","weight":5,"earned":5,"detail":"10 KB of HTML, 12% of it inline script.","why":"Agents truncate long documents. Anything past the cut simply is not read.","evidenceQuality":"strong","impact":0},{"id":"content-type","pillar":"reachability","title":"Declares a correct content type","status":"pass","weight":3,"earned":3,"detail":"Content-Type: text/html; charset=utf-8","why":"A declared charset avoids mojibake when an agent quotes your text back to a user.","evidenceQuality":"strong","impact":0},{"id":"title","pillar":"comprehension","title":"Has a descriptive <title>","status":"pass","weight":10,"earned":10,"detail":"\"AXRAY - See what AI can actually read on your website.\" (54 characters).","why":"This is the label assistants attach to you when they cite this page.","evidenceQuality":"strong","impact":0},{"id":"meta-description","pillar":"comprehension","title":"Has a meta description","status":"pass","weight":8,"earned":8,"detail":"155 characters: \"Paste a web address and find out how much of your page reaches ChatGPT, Claude, Perplexity and Google AI. Free, a score…\"","why":"This is the summary assistants reuse verbatim more often than any other field.","evidenceQuality":"strong","impact":0},{"id":"metadata-consistency","pillar":"comprehension","title":"The page describes itself consistently","status":"pass","weight":6,"earned":6,"detail":"<title>, og:title, twitter:title all describe the same page.","why":"Agreement across the machine-readable labels is what lets an assistant state one name for this page and keep stating it.","evidenceQuality":"strong","impact":0},{"id":"h1","pillar":"comprehension","title":"Exactly one <h1> naming the page","status":"pass","weight":8,"earned":8,"detail":"\"People ask AI about you. See what it reads on your site.\"","why":"The h1 is the strongest in-page signal of what the document is about.","evidenceQuality":"strong","impact":0},{"id":"heading-hierarchy","pillar":"comprehension","title":"Headings form a sane outline","status":"pass","weight":6,"earned":6,"detail":"19 headings with no skipped levels.","why":"A clean outline is what lets an agent quote the right section instead of the whole page.","evidenceQuality":"strong","impact":0},{"id":"content-volume","pillar":"comprehension","title":"Enough substance to be worth citing","status":"pass","weight":10,"earned":10,"detail":"1510 words of readable text, 1397 of them in the main content.","why":"Assistants prefer sources with enough material to answer a question outright rather than pages that just point elsewhere.","evidenceQuality":"strong","impact":0},{"id":"answerable","pillar":"comprehension","title":"Answers questions in a form that can be quoted","status":"pass","weight":8,"earned":8,"detail":"FAQ structured data with 5 question-and-answer pairs, and 8 question-shaped headings.","why":"A question paired with its answer in structured data is the one format an assistant can lift whole, attribute to you, and quote without paraphrasing.","evidenceQuality":"strong","impact":0},{"id":"text-ratio","pillar":"comprehension","title":"Signal-to-markup ratio","status":"pass","weight":8,"earned":8,"detail":"22.6% of the payload is readable text.","why":"A high ratio means an agent spends its limited context on your content instead of your tooling.","evidenceQuality":"strong","impact":0},{"id":"lang","pillar":"comprehension","title":"Declares a document language","status":"pass","weight":5,"earned":5,"detail":"<html lang=\"en\">, and the text is Latin as expected.","why":"Language is how an assistant decides whether to answer a user in your words or translate them.","evidenceQuality":"strong","impact":0},{"id":"image-alt","pillar":"comprehension","title":"Images carry alt text","status":"pass","weight":8,"earned":8,"detail":"1 of 1 images described; 0 intentionally marked decorative.","why":"Alt text is the only way the content of an image reaches an agent.","evidenceQuality":"strong","impact":0},{"id":"landmarks","pillar":"comprehension","title":"Main content is marked as such","status":"pass","weight":6,"earned":6,"detail":"<main> present with <article>; 4 of 4 landmark regions used.","why":"The <main> element tells an extractor where your content stops and your chrome starts. It is the difference between quoting your argument and quoting your nav bar.","evidenceQuality":"strong","impact":0},{"id":"semantic-density","pillar":"comprehension","title":"Uses semantic elements, not div soup","status":"pass","weight":6,"earned":6,"detail":"40% of structural elements are semantic (52 semantic vs 79 div).","why":"Semantic tags carry meaning an agent can use; a div carries none.","evidenceQuality":"strong","impact":0},{"id":"noscript-fallback","pillar":"comprehension","title":"Provides a no-JavaScript fallback","status":"na","weight":4,"earned":4,"detail":"Not needed: the page already server-renders its content.","why":"","impact":0},{"id":"readable-url","pillar":"comprehension","title":"URL describes the content","status":"pass","weight":3,"earned":3,"detail":"Site root.","why":"Assistants show the URL next to the citation, and readable URLs get clicked more than opaque ids.","evidenceQuality":"strong","impact":0},{"id":"jsonld-present","pillar":"structure","title":"Ships structured data","status":"pass","weight":12,"earned":12,"detail":"5 JSON-LD blocks on the page, 14 carrying real properties.","why":"Structured data is the only part of your page an agent reads without having to interpret it.","evidenceQuality":"strong","impact":0},{"id":"jsonld-valid","pillar":"structure","title":"Structured data parses cleanly","status":"pass","weight":8,"earned":8,"detail":"All 5 blocks parse as valid JSON with a schema.org context.","why":"A block with a syntax error is silently discarded by every consumer. You get the maintenance cost with none of the benefit.","evidenceQuality":"strong","impact":0},{"id":"jsonld-types","pillar":"structure","title":"Structured data describes the right thing","status":"pass","weight":8,"earned":8,"detail":"Declared types: Organization, WebSite, WebPage, SoftwareApplication, Offer, FAQPage, Question.","why":"The right @type is what lets an assistant answer \"how much is it\" or \"when is it\" without reading your prose at all.","evidenceQuality":"strong","impact":0},{"id":"open-graph","pillar":"structure","title":"Open Graph card is complete","status":"pass","weight":6,"earned":6,"detail":"og:title, og:description, og:type, og:url and og:image all present.","why":"Open Graph is the fallback summary almost every crawler reads when it cannot parse the page body.","evidenceQuality":"strong","impact":0},{"id":"canonical","pillar":"structure","title":"Declares a canonical URL","status":"pass","weight":6,"earned":6,"detail":"Canonical: https://axray.online/","why":"Agents dedupe sources by canonical URL, and cross-origin canonicals hand your citation to somebody else.","evidenceQuality":"strong","impact":0},{"id":"sitemap","pillar":"structure","title":"Publishes a sitemap","status":"pass","weight":8,"earned":8,"detail":"https://axray.online/sitemap.xml lists 40 URLs.","why":"A sitemap is how a crawler discovers the pages your navigation hides behind JavaScript menus.","evidenceQuality":"strong","impact":0},{"id":"feed-discovery","pillar":"structure","title":"Publishes a feed of its content","status":"pass","weight":4,"earned":4,"detail":"1 feed declared: https://axray.online/writing/feed.xml.","why":"A feed hands an agent the whole content stream already parsed, with dates and titles attached, instead of making it crawl and guess. It is the cheapest way to be re-read as you publish rather than once.","evidenceQuality":"strong","impact":0},{"id":"language-alternates","pillar":"structure","title":"Declares its language alternates","status":"pass","weight":4,"earned":4,"detail":"5 hreflang alternates, self-referencing, with an x-default.","why":"A complete set is what lets an assistant answer a reader in their own language using your own words rather than a machine translation of somebody else's page.","evidenceQuality":"strong","impact":0},{"id":"price-structured","pillar":"structure","title":"Prices are machine-readable","status":"pass","weight":6,"earned":6,"detail":"Prices in the copy ($24.00) are backed by Offer structured data.","why":"A shopping or research agent comparing options reads Offer, not your pricing table CSS.","evidenceQuality":"strong","impact":0},{"id":"breadcrumbs","pillar":"structure","title":"Declares its place in the site","status":"na","weight":4,"earned":4,"detail":"Top-level page; breadcrumbs are not expected.","why":"","impact":0},{"id":"twitter-card","pillar":"structure","title":"Declares a link preview card","status":"pass","weight":3,"earned":3,"detail":"4 twitter:* tags present.","why":"Several agents fall back to card metadata when they cannot extract the body reliably.","evidenceQuality":"strong","impact":0},{"id":"microdata","pillar":"structure","title":"Inline microdata annotations","status":"na","weight":2,"earned":2,"detail":"No microdata; JSON-LD is the preferred format anyway.","why":"","impact":0},{"id":"links-crawlable","pillar":"actionability","title":"Navigation uses real links","status":"pass","weight":12,"earned":12,"detail":"All 52 links resolve to a real URL.","why":"Real hrefs are the only navigation primitive an agent has.","evidenceQuality":"strong","impact":0},{"id":"anchor-text","pillar":"actionability","title":"Link text describes the destination","status":"pass","weight":8,"earned":8,"detail":"100% of links have descriptive text.","why":"Link text is how an agent decides which link to follow when it is looking for something specific.","evidenceQuality":"strong","impact":0},{"id":"internal-nav","pillar":"actionability","title":"Links onward into the site","status":"pass","weight":6,"earned":6,"detail":"48 internal links give an agent somewhere to go next.","why":"Agents explore a site breadth-first from whatever page they landed on. Dense internal linking is how the rest of your content gets found.","evidenceQuality":"strong","impact":0},{"id":"form-labels","pillar":"actionability","title":"Form fields are labelled","status":"pass","weight":8,"earned":8,"detail":"All 2 fields have an associated label or aria-label.","why":"An agent filling a form on a user's behalf reads labels to decide what goes in each box.","evidenceQuality":"strong","impact":0},{"id":"form-names","pillar":"actionability","title":"Form fields have stable names","status":"pass","weight":6,"earned":6,"detail":"All 2 fields have readable name attributes.","why":"Names are the keys an agent uses to build a submission. Generated hashes change on every deploy and break automation silently.","evidenceQuality":"strong","impact":0},{"id":"form-autocomplete","pillar":"actionability","title":"Fields declare autocomplete tokens","status":"pass","weight":4,"earned":4,"detail":"2 of 2 fields declare an autocomplete token.","why":"Autocomplete tokens are a standard vocabulary. They remove all ambiguity about which box is the email and which is the company.","evidenceQuality":"strong","impact":0},{"id":"button-semantics","pillar":"actionability","title":"Controls are real buttons","status":"pass","weight":6,"earned":6,"detail":"4 native button controls, no div-as-button patterns found.","why":"A <button> announces itself as an actionable control. A styled div announces nothing.","evidenceQuality":"strong","impact":0},{"id":"contact-affordance","pillar":"actionability","title":"Reachable by a human, discoverably","status":"pass","weight":5,"earned":5,"detail":"3 contact signals: 1 mailto link, contact page link, contactPoint in structured data.","why":"Assistants routinely answer \"how do I contact them\". If they cannot find the answer they say so, and the user goes elsewhere.","evidenceQuality":"strong","impact":0},{"id":"search-affordance","pillar":"actionability","title":"Site search is machine-usable","status":"pass","weight":4,"earned":4,"detail":"A GET form uses the same \"url\" parameter the declared SearchAction names.","why":"A declared SearchAction lets an agent query your site directly instead of crawling it page by page.","evidenceQuality":"strong","impact":0},{"id":"api-discovery","pillar":"actionability","title":"Programmatic surface is discoverable","status":"pass","weight":6,"earned":6,"detail":"/.well-known/mcp.json; docs link: /docs; OpenAPI document referenced","why":"When an agent can call your API it stops scraping your HTML, which is cheaper for you and more reliable for the user.","evidenceQuality":"strong","impact":0},{"id":"llms-txt","pillar":"contract","title":"Publishes an llms.txt","status":"pass","weight":14,"earned":14,"detail":"https://axray.online/llms.txt served 6840 bytes, 908 words and 31 usable links.","why":"llms.txt is the one file written for assistants rather than browsers: a curated map of what matters on your site, in the order you want it read.","evidenceQuality":"strong","impact":0},{"id":"llms-txt-quality","pillar":"contract","title":"llms.txt is actually useful","status":"pass","weight":6,"earned":6,"detail":"9 sections, 31 curated links, 18 annotated, with a summary blockquote.","why":"A well-formed llms.txt is read as a table of contents. A dumped sitemap is read as noise.","evidenceQuality":"strong","impact":0},{"id":"ai-policy","pillar":"contract","title":"States an explicit AI policy","status":"pass","weight":6,"earned":6,"detail":"robots.txt names specific AI crawlers rather than relying on the wildcard group.","why":"Naming crawlers explicitly is how you separate \"do not train on me\" from \"do not send me traffic\". The wildcard group cannot express that distinction.","evidenceQuality":"strong","impact":0},{"id":"mcp-manifest","pillar":"contract","title":"Exposes an agent-callable manifest","status":"pass","weight":6,"earned":6,"detail":"https://axray.online/.well-known/mcp.json names \"axray\" and at least one endpoint.","why":"A callable manifest turns you from something an agent scrapes into something an agent uses. Almost nobody has one yet, which is exactly why it is worth having.","evidenceQuality":"strong","impact":0},{"id":"identity","pillar":"contract","title":"Identity is machine-verifiable","status":"pass","weight":5,"earned":5,"detail":"AXRAY declared with 1 sameAs link.","why":"sameAs is how an assistant confirms that this site, that GitHub org and that company are the same entity. Without it you are three unrelated strings.","evidence":["https://www.instagram.com/axray.online/"],"evidenceQuality":"strong","impact":0},{"id":"freshness","pillar":"contract","title":"Says when the content changed","status":"pass","weight":5,"earned":5,"detail":"Last-Modified: Wed, 26 Aug 2026 00:00:00 GMT; ETag present; a usable date in structured data; <time datetime> elements.","why":"Assistants prefer sources they can date, and they say so to users: \"according to a page updated in March\". Undated pages lose to dated ones.","evidenceQuality":"strong","impact":0},{"id":"licence-signal","pillar":"contract","title":"Declares content licensing","status":"pass","weight":5,"earned":5,"detail":"rel=\"license\" pointing at https://axray.online/terms.","why":"A machine-readable licence tells an agent how it may reuse your text. Ambiguity is usually resolved against you.","evidenceQuality":"strong","impact":0},{"id":"security-txt","pillar":"contract","title":"Publishes security.txt","status":"pass","weight":4,"earned":4,"detail":"/.well-known/security.txt names mailto:hello@axray.online, valid until 2027-09-04T15:21:26.051Z.","why":"It is the standard machine-readable place to say who to contact. Agents and researchers both look there first.","evidenceQuality":"strong","impact":0}],"agents":[{"name":"OAI-SearchBot","userAgent":"Mozilla/5.0 (compatible; OAI-SearchBot/1.0; +https://openai.com/searchbot)","robotsAllowed":true},{"name":"ChatGPT-User","userAgent":"Mozilla/5.0 (compatible; ChatGPT-User/1.0; +https://openai.com/bot)","robotsAllowed":true},{"name":"GPTBot","userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot)","robotsAllowed":true},{"name":"ClaudeBot","userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","robotsAllowed":true},{"name":"Claude-User","userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Claude-User/1.0; +Claude-User@anthropic.com)","robotsAllowed":true},{"name":"Claude-SearchBot","userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Claude-SearchBot/1.0; +Claude-SearchBot@anthropic.com)","robotsAllowed":true},{"name":"PerplexityBot","userAgent":"Mozilla/5.0 (compatible; PerplexityBot/1.0; +https://perplexity.ai/perplexitybot)","robotsAllowed":true},{"name":"Perplexity-User","userAgent":"Mozilla/5.0 (compatible; Perplexity-User/1.0; +https://perplexity.ai/perplexity-user)","robotsAllowed":true},{"name":"Google-Extended","userAgent":"Mozilla/5.0 (compatible; Google-Extended/1.0)","robotsAllowed":true},{"name":"Googlebot","userAgent":"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)","robotsAllowed":true},{"name":"Bingbot","userAgent":"Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)","robotsAllowed":true},{"name":"Applebot-Extended","userAgent":"Mozilla/5.0 (compatible; Applebot-Extended/1.0)","robotsAllowed":true},{"name":"meta-externalagent","userAgent":"meta-externalagent/1.1 (+https://developers.facebook.com/docs/sharing/webmasters/crawler)","robotsAllowed":true},{"name":"Amazonbot","userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 (compatible; Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot)","robotsAllowed":true},{"name":"CCBot","userAgent":"CCBot/2.0 (https://commoncrawl.org/faq/)","robotsAllowed":true},{"name":"DuckAssistBot","userAgent":"Mozilla/5.0 (compatible; DuckAssistBot/1.0; +https://duckduckgo.com/duckassistbot/)","robotsAllowed":true}],"fetch":{"url":"https://axray.online/","status":200,"ms":145,"bytes":10275,"contentType":"text/html; charset=utf-8","redirects":[],"headers":{"alt-svc":"h3=\":443\"; ma=2592000","cache-control":"private, no-cache","content-encoding":"gzip","content-security-policy":"default-src 'self'; script-src 'self' https://pagead2.googlesyndication.com https://googleads.g.doubleclick.net https://tpc.googlesyndication.com https://www.google.com https://adservice.google.com https://ep1.adtrafficquality.google https://ep2.adtrafficquality.google 'sha256-L9NtTqBLxf1z3sIza7z/JTtm01m91a8xVl07p4WTMYw=' https://*.paddle.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https://pagead2.googlesyndication.com https://googleads.g.doubleclick.net https://tpc.googlesyndication.com https://www.google.com https://adservice.google.com https://ep1.adtrafficquality.google https://ep2.adtrafficquality.google https://*.g.doubleclick.net https://*.googleusercontent.com https://*.paddle.com; font-src 'self'; connect-src 'self' https://pagead2.googlesyndication.com https://googleads.g.doubleclick.net https://tpc.googlesyndication.com https://www.google.com https://adservice.google.com https://ep1.adtrafficquality.google https://ep2.adtrafficquality.google https://*.paddle.com; frame-src https://pagead2.googlesyndication.com https://googleads.g.doubleclick.net https://tpc.googlesyndication.com https://www.google.com https://adservice.google.com https://ep1.adtrafficquality.google https://ep2.adtrafficquality.google https://*.paddle.com; form-action 'self'; frame-ancestors 'none'; base-uri 'none'; object-src 'none'","content-type":"text/html; charset=utf-8","cross-origin-opener-policy":"same-origin","date":"Fri, 04 Sep 2026 15:21:26 GMT","etag":"W/\"Bl9xQW2aefuRaes0i7Jn\"","last-modified":"Wed, 26 Aug 2026 00:00:00 GMT","permissions-policy":"geolocation=(), microphone=(), camera=(), payment=(), usb=(), interest-cohort=()","referrer-policy":"strict-origin-when-cross-origin","strict-transport-security":"max-age=31536000; includeSubDomains","vary":"Accept-Encoding","x-content-type-options":"nosniff","x-frame-options":"DENY","transfer-encoding":"chunked"},"ok":true,"blocked":false},"facts":{"title":"AXRAY - See what AI can actually read on your website.","metaDescription":"Paste a web address and find out how much of your page reaches ChatGPT, Claude, Perplexity and Google AI. Free, a score out of 100 and an ordered fix list.","lang":"en","canonical":"https://axray.online/","wordCount":1510,"textRatio":0.22570671378091872,"looksClientRendered":false,"frameworkHints":[],"scriptBytes":4502,"htmlBytes":38488},"site":{"origin":"https://axray.online","robotsTxt":{"found":true,"status":200,"body":"# AXRAY robots.txt\n# We measure whether sites are readable by AI agents, so ours had better be.\n# Note the grouping: answer engines and user-triggered fetchers send traffic,\n# training crawlers do not. Blocking them are different decisions.\n\nUser-agent: *\nAllow: /\nDisallow: /dashboard\nDisallow: /api/\nDisallow: /billing/\n\n# Answer engines - these put your link in front of a person.\nUser-agent: OAI-SearchBot\nUser-agent: Claude-SearchBot\nUser-agent: PerplexityBot\nUser-agent: Amazonbot\nUser-agent: DuckAssistBot\nAllow: /\n\n# User-triggered fetchers - a human is waiting on the other end.\nUser-agent: ChatGPT-User\nUser-agent: Claude-User\nUser-agent: Perplexity-User\nAllow: /\n\n# Training crawlers - allowed as well.\nUser-agent: GPTBot\nUser-agent: ClaudeBot\nUser-agent: Google-Extended\nUser-agent: Applebot-Extended\nUser-agent: meta-externalagent\nUser-agent: CCBot\nAllow: /\n\nSitemap: https://axray.online/sitemap.xml\n","sitemaps":["https://axray.online/sitemap.xml"]},"sitemap":{"found":true,"status":200,"urlCount":40,"url":"https://axray.online/sitemap.xml"},"llmsTxt":{"found":true,"status":200,"body":"# AXRAY\n\n> AXRAY measures Agent Experience (AX): whether an AI agent can reach, understand and act on a\n> website. It fetches a URL exactly the way a crawling agent does - plain HTTP, no browser, no\n> JavaScript - runs 57 checks across five pillars, and returns a score out of 100 with a fix list\n> ordered by how many points each change recovers. 1 free scan a day with no account.\n\n## Start here\n- [Scan any URL](https://axray.online/): The product. Paste a URL, get a score in about two seconds.\n- [How it works](https://axray.online/how-it-works): The method, and what we deliberately refuse to do.\n- [The AX specification](https://axray.online/ax-spec): How the score is built - the five pillars, their weights and the gates.\n\n## For developers\n- [CLI and API documentation](https://axray.online/docs): `npx axray-cli example.com`, the JSON API, and gating a deploy.\n- [OpenAPI schema](https://axray.online/openapi.json): Machine-readable API description.\n- [Agent manifest](https://axray.online/.well-known/mcp.json): Where to call us programmatically.\n\n## Reference\n- [Every AI crawler, and what blocking it costs](https://axray.online/ai-crawlers): The 16 crawlers this scanner probes with - the robots.txt token for each, what it is for, and how many sites in a measured sample already block it.\n- [Yapay zekâ tarayıcıları](https://axray.online/yapay-zeka-tarayicilari): The same reference in Turkish.\n\n## Writing\n- [All articles](https://axray.online/writing): Measured guides on what AI assistants can read on a website.\n- [Türkçe yazılar](https://axray.online/yazilar): The same subject in Turkish, written for Turkish readers rather than translated as an afterthought.\n\n- [llms.txt, robots.txt ve sitemap.xml arasındaki fark ne?](https://axray.online/writing/llms-txt-robots-txt-sitemap-xml-farki) (tr): Alan adınızın kökünde duran ve sürekli birbirine karıştırılan üç metin dosyası. Biri izin verir, biri bütün adresleri listeler, biri sitenizi tanıtır — ve bugün yalnızca ikisi gerçekten okunuyor.\n- [llms.txt vs robots.txt vs sitemap.xml: which does what](https://axray.online/writing/llms-txt-vs-robots-txt-vs-sitemap-xml) (en): Three text files at your domain root, constantly confused. One grants permission, one lists every URL, one introduces the site — and only two are read by anything today.\n- [Yapay zekâ sitenizi okuyabiliyor mu? Nasıl kontrol edilir](https://axray.online/writing/yapay-zeka-sitemi-okuyabiliyor-mu) (tr): Beş dakikada kendi başınıza çalıştırabileceğiniz altı kontrol; bir siteyi yapay zekâ için okunmaz yapan şeylerin neredeyse tamamını yakalıyorlar.\n- [How to check whether an AI assistant can read your website](https://axray.online/writing/how-to-check-if-ai-can-read-your-website) (en): Six checks you can run yourself with curl, in about five minutes, that between them catch almost everything that makes a site unreadable to an AI assistant.\n- [Bot korumanız, sizi kaynak gösterecek asistanları engelliyor](https://axray.online/writing/bot-korumasi-yapay-zekayi-engelliyor) (tr): Çektiğimiz 293 tanınmış web sitesinden 45 tanesi düz bir HTTP isteğini doğrudan reddetti. Neredeyse hiçbiri bunu istememişti.\n- [Your bot protection is blocking the assistants that would cite you](https://axray.online/writing/bot-protection-blocking-ai-assistants) (en): Of 293 well-known websites we fetched, 45 refused a plain HTTP request outright. Almost none of them meant to.\n- [React siteniz ChatGPT’ye neden neredeyse görünmüyor](https://axray.online/writing/react-sitesi-yapay-zekaya-gorunmuyor) (tr): Yapay zekâ tarayıcıları HTML çeker ve JavaScript çalıştırmaz. İçeriğiniz tarayıcıda kuruluyorsa, karşı tarafa boş bir kabuk gider — ve hiçbir yerde hata görünmez.\n- [Why your React site is nearly invisible to ChatGPT](https://axray.online/writing/react-site-invisible-to-ai) (en): Crawling assistants fetch HTML and do not run JavaScript. If your content is assembled in the browser, what arrives is an empty shell — and nothing anywhere reports an error.\n- [robots.txt’inizdeki yapay zekâ tarayıcıları, ve size müşteri kaybettiren tanesi](https://axray.online/writing/yapay-zeka-tarayicilari-robots-txt) (tr): Bazı yapay zekâ tarayıcıları içeriğinizle model eğitir. Bazıları ise tam bir müşteri soru sorduğu anda sitenize gelir ve cevapta sizi kaynak gösterir. Çoğu site ikisini tek kuralla engelliyor ve bunu hiç öğrenmiyor.\n- [The AI crawlers in your robots.txt, and the one that costs you customers](https://axray.online/writing/ai-crawlers-robots-txt) (en): Some AI crawlers train on your content. Others fetch you at the moment a customer asks a question, and cite you in the answer. Most sites block both with one rule and never find out.\n- [llms.txt nedir, ve gerçekten kullanan var mı?](https://axray.online/writing/llms-txt-nedir) (tr): Tarayıcılar için değil, yapay zekâ asistanları için yazılmış düz metin bir site haritası. Formatı, gerçekte ne kazandırıp ne kazandırmadığı, ve kaç sitenin bunu yayınladığı.\n- [llms.txt: what it is, and whether anyone is actually using it](https://axray.online/writing/llms-txt) (en): A plain-text map of your site written for AI assistants rather than browsers. Here is the format, what it does and does not buy you, and how many real sites publish one.\n\n## Data\n- [The AX Index](https://axray.online/index): Sites whose owners verified their domain and published their score, plus a measured baseline distribution across public sites that names nobody.\n- [Index API](https://axray.online/api/v1/index): The same data as JSON, no key required.\n\n## Commercial\n- [Pricing](https://axray.online/pricing): 1 free scan a day with no account. Pro $2.99/month, Team $8.99, Scale $19.99 for volume.\n- [Badge](https://axray.online/badge): A live score badge for your README or footer.\n\n## About\n- [About AXRAY](https://axray.online/about): What it is, why the rubric is public, and what the scanner refuses to do.\n- [Changelog](https://axray.online/changelog): Every change to the scanner and the specification, newest first.\n\n## Policies\n- [Terms of service](https://axray.online/terms)\n- [Privacy policy](https://axray.online/privacy): Google AdSense is the only third party, and it sets cookies. No analytics, no session recording, and nothing about you or the sites you scan is sold.\n- [Contact](https://axray.online/contact): hello@axray.online\n\n## Notes for agents\n- Our crawler identifies as `AXRAY/1.0 (+https://axray.online/bot)`. Disallow `AXRAY` in robots.txt and we stop.\n- Report pages at `/report/{id}` are stable and safe to cite. `/s/{host}` resolves to the report\n  behind a host's listing, and only listed hosts have one.\n- Scanning a site publishes nothing about it. A host appears in the index only when its owner\n  proved control of the domain and asked to be listed.\n- The rubric is versioned. Scores are comparable within a major version.\n","url":"https://axray.online/llms.txt","sectionCount":9,"linkCount":31},"wellKnown":{"/.well-known/security.txt":{"found":true,"status":200,"body":"Contact: mailto:hello@axray.online\nExpires: 2027-09-04T15:21:26.051Z\nPreferred-Languages: en\nCanonical: https://axray.online/.well-known/security.txt\nPolicy: https://axray.online/terms\n"},"/.well-known/ai-plugin.json":{"found":false,"status":404,"body":"<!doctype html>\n<html lang=\"en\" dir=\"ltr\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Not found - AXRAY</title>\n<meta name=\"description\" content=\"That page does not exist.\">\n<link rel=\"canonical\" href=\"https://axray.online/404\">\n\n\n<meta name=\"robots\" content=\"noindex, follow\">\n<meta property=\"og:site_name\" content=\"AXRAY\">\n<meta property=\"og:title\" content=\"Not found - AXRAY\">\n<meta property=\"og:description\" content=\"That page does not exist.\">\n<meta property=\"og:type\" content=\"website\">\n<meta property=\"og:url\" content=\"https://axray.online/404\">\n<meta property=\"og:image\" content=\"https://axray.online/og/default-2.png\">\n<meta property=\"og:image:type\" content=\"image/png\">\n<meta property=\"og:image:width\" content=\"1200\">\n<meta property=\"og:image:height\" content=\"630\">\n<meta property=\"og:image:alt\" content=\"Not found - AXRAY\">\n<meta name=\"twitter:card\" content=\"summary_large_image\">\n<meta name=\"twitter:title\" content=\"Not found - AXRAY\">\n<meta name=\"twitter:description\" content=\"That page does not exist.\">\n<meta name=\"twitter:image\" content=\"https://axray.online/og/default-2.png\">\n<link rel=\"license\" href=\"https://axray.online/terms\">\n<link rel=\"icon\" href=\"/assets/favicon.svg\" type=\"image/svg+xml\">\n<link rel=\"icon\" href=\"/assets/brand/icon.jpg\" type=\"image/jpeg\" sizes=\"1024x1024\">\n<link rel=\"apple-touch-icon\" href=\"/assets/brand/icon.jpg\">\n<link rel=\"alternate\" type=\"text/plain\" href=\"https://axray.online/llms.txt\" title=\"llms.txt\">\n<link rel=\"alternate\" type=\"application/atom+xml\" href=\"https://axray.online/writing/feed.xml\" title=\"AXRAY Writing\">\n<link rel=\"stylesheet\" href=\"/assets/styles.css?v=a4369e90\">\n<script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"AXRAY\",\"url\":\"https://axray.online\",\"logo\":\"https://axray.online/assets/brand/icon.jpg\",\"description\":\"AXRAY measures Agent Experience: whether AI agents can reach, understand and act on a website. It returns an AX score out of 100 and a prioritised fix list.\",\"sameAs\":[\"https://www.instagram.com/axray.online/\"],\"contactPoint\":[{\"@type\":\"ContactPoint\",\"contactType\":\"customer support\",\"email\":\"hello@axray.online\",\"url\":\"https://axray.online/contact\"}]}</script>\n<script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"AXRAY\",\"url\":\"https://axray.online\",\"potentialAction\":{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https://axray.online/scan?url={query}\"},\"query-input\":\"required name=query\"}}</script>\n<script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebPage\",\"name\":\"Not found - AXRAY\",\"description\":\"That page does not exist.\",\"url\":\"https://axray.online/404\",\"inLanguage\":\"en\",\"datePublished\":\"2026-01-15\",\"dateModified\":\"2026-08-26\",\"isPartOf\":{\"@type\":\"WebSite\",\"name\":\"AXRAY\",\"url\":\"https://axray.online\"}}</script>\n<script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"AXRAY\",\"item\":\"https://axray.online\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Not found\",\"item\":\"https://axray.online/404\"}]}</script>\n<script async src=\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9394843836818839\" crossorigin=\"anonymous\"></script>\n\n</head>\n<body>\n<a class=\"skip\" href=\"#main\">Skip to main content</a>\n<!-- A film grain over the whole viewport. Large flat fields on a page this\n     dark band visibly on ordinary screens; this hides that and gives the\n     surface a texture. It is one inline data URI, so it costs no request, and\n     it is hidden from assistive technology because it carries no meaning. -->\n<div class=\"grain\" aria-hidden=\"true\"></div>\n<header class=\"site-head\">\n  <div class=\"shell head-inner\">\n    <a class=\"brand\" href=\"/\" aria-label=\"AXRAY home\">\n      <svg class=\"brand-mark\" viewBox=\"0 0 32 32\" width=\"29\" height=\"29\" aria-hidden=\"true\" focusable=\"false\">\n        <defs>\n          <linearGradient id=\"hdr-a\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n            <stop offset=\"0\" stop-color=\"#8079f7\"/>\n            <stop offset=\"1\" stop-color=\"#4a41c4\"/>\n          </linearGradient>\n          <linearGradient id=\"hdr-beam\" x1=\"0\" y1=\"1\" x2=\"1\" y2=\"0\">\n            <stop offset=\"0\" stop-color=\"#3ddcff\" stop-opacity=\".2\"/>\n            <stop offset=\".5\" stop-color=\"#a6f4ff\"/>\n            <stop offset=\"1\" stop-color=\"#3ddcff\" stop-opacity=\".2\"/>\n          </linearGradient>\n        </defs>\n        <rect width=\"32\" height=\"32\" rx=\"7.5\" fill=\"#1b2030\"/>\n        <path d=\"M16 5.2 L26.6 27 L21.4 27 L16 15.4 L10.6 27 L5.4 27 Z\" fill=\"url(#hdr-a)\"/>\n        <path d=\"M9.9 19.3 H22.1 V22.5 H9.9 Z\" fill=\"url(#hdr-a)\"/>\n        <path d=\"M5.6 25.9 L26.4 5.6\" stroke=\"#5ce8ff\" stroke-opacity=\".26\" stroke-width=\"5.6\" stroke-linecap=\"round\"/>\n        <path d=\"M5.6 25.9 L26.4 5.6\" stroke=\"url(#hdr-beam)\" stroke-width=\"2.5\" stroke-linecap=\"round\"/>\n      </svg>\n      <span class=\"brand-name\">AXRAY</span>\n    </a>\n    <nav class=\"site-nav\" aria-label=\"Primary\">\n      <ul>\n        <li><a href=\"/how-it-works\">How it works</a></li>\n          <li><a href=\"/ax-spec\">The AX spec</a></li>\n          <li><a href=\"/index\">AX Index</a></li>\n          <li><a href=\"/docs\">API</a></li>\n          <li><a href=\"/pricing\">Pricing</a></li>\n      </ul>\n    </nav>\n    <div class=\"head-actions\">\n      <a class=\"btn btn-ghost\" href=\"/login\">Sign in</a><a class=\"btn btn-solid\" href=\"/signup\">Create account</a>\n    </div>\n    <!-- The same primary links again, as a disclosure, for the widths where the\n         inline nav does not fit. <details> rather than a scripted menu: the\n         button role, the expanded state, Enter/Space and Escape all come from\n         the browser, and the header keeps working with no JavaScript at all. -->\n    <details class=\"nav-menu\">\n      <summary>\n        <span class=\"nav-menu-bars\" aria-hidden=\"true\"></span>\n        <span class=\"nav-menu-word\">Menu</span>\n      </summary>\n      <nav class=\"nav-menu-panel\" aria-label=\"Primary, compact\">\n        <ul>\n          <li><a href=\"/how-it-works\">How it works</a></li>\n          <li><a href=\"/ax-spec\">The AX spec</a></li>\n          <li><a href=\"/index\">AX Index</a></li>\n          <li><a href=\"/docs\">API</a></li>\n          <li><a href=\"/pricing\">Pricing</a></li>\n        </ul>\n        <!-- The account actions again. The header bar drops one of these on a\n             narrow phone for want of room, and nothing else on the site links\n             to /login or /signup, so the panel has to carry both. -->\n        <ul class=\"nav-menu-account\">\n          <li><a href=\"/login\">Sign in</a></li>\n          <li><a href=\"/signup\">Create account</a></li>\n        </ul>\n      </nav>\n    </details>\n  </div>\n</header>\n<main id=\"main\">\n\n<section class=\"section\">\n  <div class=\"shell prose\" style=\"padding-top:60px\">\n    <p class=\"kicker\">404</p>\n    <h1>That page is not here.</h1>\n    <p>Which is itself an Agent Experience problem, so at least it is on brand.</p>\n    <p><a class=\"btn btn-solid\" href=\"/\">Go and scan something</a></p>\n  </div>\n</section>\n</main>\n<footer class=\"site-foot\">\n  <div class=\"shell foot-scan\">\n    <!--\n      The site declares a SearchAction pointing at /scan?url={query}, and until\n      now the only form that honoured it lived on the home page. An agent\n      landing on any other page read a promise the page could not keep, which\n      is exactly the half-affordance the rubric warns about. This form is the\n      promise made true everywhere, and it is useful to a human reading the\n      docs who wants to scan something without going back to the front page.\n    -->\n    <form class=\"foot-scan-form\" action=\"/scan\" method=\"get\" role=\"search\">\n      <label for=\"foot-url\">Scan any page</label>\n      <div class=\"scan-row\">\n        <input id=\"foot-url\" name=\"url\" type=\"search\" inputmode=\"url\" autocomplete=\"url\"\n               spellcheck=\"false\" placeholder=\"example.com/pricing\" re"},"/.well-known/mcp.json":{"found":true,"status":200,"body":"{\"schema_version\":\"2025-06-18\",\"name\":\"axray\",\"description\":\"Score any URL for Agent Experience: whether an AI agent can reach, understand and act on it. Returns a 0-100 score and a prioritised fix list.\",\"documentation\":\"https://axray.online/docs\",\"servers\":[{\"type\":\"http\",\"url\":\"https://axray.online/api/v1\"}],\"endpoints\":[{\"type\":\"openapi\",\"url\":\"https://axray.online/openapi.json\"},{\"type\":\"llms.txt\",\"url\":\"https://axray.online/llms.txt\"}],\"tools\":[{\"name\":\"scan_url\",\"description\":\"Score a single URL for Agent Experience and return the fix list.\",\"method\":\"POST\",\"path\":\"/api/v1/scan\",\"input_schema\":{\"type\":\"object\",\"required\":[\"url\"],\"properties\":{\"url\":{\"type\":\"string\",\"description\":\"The URL to scan.\"},\"probeAgents\":{\"type\":\"boolean\",\"description\":\"Also fetch with named AI crawler user-agents.\"}}}},{\"name\":\"get_index\",\"description\":\"Read the public AX Index: best known Agent Experience score per host.\",\"method\":\"GET\",\"path\":\"/api/v1/index\"}],\"contact\":\"hello@axray.online\",\"license\":\"https://axray.online/terms\"}"},"/.well-known/apple-app-site-association":{"found":false,"status":404,"body":"<!doctype html>\n<html lang=\"en\" dir=\"ltr\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Not found - AXRAY</title>\n<meta name=\"description\" content=\"That page does not exist.\">\n<link rel=\"canonical\" href=\"https://axray.online/404\">\n\n\n<meta name=\"robots\" content=\"noindex, follow\">\n<meta property=\"og:site_name\" content=\"AXRAY\">\n<meta property=\"og:title\" content=\"Not found - AXRAY\">\n<meta property=\"og:description\" content=\"That page does not exist.\">\n<meta property=\"og:type\" content=\"website\">\n<meta property=\"og:url\" content=\"https://axray.online/404\">\n<meta property=\"og:image\" content=\"https://axray.online/og/default-2.png\">\n<meta property=\"og:image:type\" content=\"image/png\">\n<meta property=\"og:image:width\" content=\"1200\">\n<meta property=\"og:image:height\" content=\"630\">\n<meta property=\"og:image:alt\" content=\"Not found - AXRAY\">\n<meta name=\"twitter:card\" content=\"summary_large_image\">\n<meta name=\"twitter:title\" content=\"Not found - AXRAY\">\n<meta name=\"twitter:description\" content=\"That page does not exist.\">\n<meta name=\"twitter:image\" content=\"https://axray.online/og/default-2.png\">\n<link rel=\"license\" href=\"https://axray.online/terms\">\n<link rel=\"icon\" href=\"/assets/favicon.svg\" type=\"image/svg+xml\">\n<link rel=\"icon\" href=\"/assets/brand/icon.jpg\" type=\"image/jpeg\" sizes=\"1024x1024\">\n<link rel=\"apple-touch-icon\" href=\"/assets/brand/icon.jpg\">\n<link rel=\"alternate\" type=\"text/plain\" href=\"https://axray.online/llms.txt\" title=\"llms.txt\">\n<link rel=\"alternate\" type=\"application/atom+xml\" href=\"https://axray.online/writing/feed.xml\" title=\"AXRAY Writing\">\n<link rel=\"stylesheet\" href=\"/assets/styles.css?v=a4369e90\">\n<script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"AXRAY\",\"url\":\"https://axray.online\",\"logo\":\"https://axray.online/assets/brand/icon.jpg\",\"description\":\"AXRAY measures Agent Experience: whether AI agents can reach, understand and act on a website. It returns an AX score out of 100 and a prioritised fix list.\",\"sameAs\":[\"https://www.instagram.com/axray.online/\"],\"contactPoint\":[{\"@type\":\"ContactPoint\",\"contactType\":\"customer support\",\"email\":\"hello@axray.online\",\"url\":\"https://axray.online/contact\"}]}</script>\n<script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"AXRAY\",\"url\":\"https://axray.online\",\"potentialAction\":{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https://axray.online/scan?url={query}\"},\"query-input\":\"required name=query\"}}</script>\n<script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebPage\",\"name\":\"Not found - AXRAY\",\"description\":\"That page does not exist.\",\"url\":\"https://axray.online/404\",\"inLanguage\":\"en\",\"datePublished\":\"2026-01-15\",\"dateModified\":\"2026-08-26\",\"isPartOf\":{\"@type\":\"WebSite\",\"name\":\"AXRAY\",\"url\":\"https://axray.online\"}}</script>\n<script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"AXRAY\",\"item\":\"https://axray.online\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Not found\",\"item\":\"https://axray.online/404\"}]}</script>\n<script async src=\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9394843836818839\" crossorigin=\"anonymous\"></script>\n\n</head>\n<body>\n<a class=\"skip\" href=\"#main\">Skip to main content</a>\n<!-- A film grain over the whole viewport. Large flat fields on a page this\n     dark band visibly on ordinary screens; this hides that and gives the\n     surface a texture. It is one inline data URI, so it costs no request, and\n     it is hidden from assistive technology because it carries no meaning. -->\n<div class=\"grain\" aria-hidden=\"true\"></div>\n<header class=\"site-head\">\n  <div class=\"shell head-inner\">\n    <a class=\"brand\" href=\"/\" aria-label=\"AXRAY home\">\n      <svg class=\"brand-mark\" viewBox=\"0 0 32 32\" width=\"29\" height=\"29\" aria-hidden=\"true\" focusable=\"false\">\n        <defs>\n          <linearGradient id=\"hdr-a\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n            <stop offset=\"0\" stop-color=\"#8079f7\"/>\n            <stop offset=\"1\" stop-color=\"#4a41c4\"/>\n          </linearGradient>\n          <linearGradient id=\"hdr-beam\" x1=\"0\" y1=\"1\" x2=\"1\" y2=\"0\">\n            <stop offset=\"0\" stop-color=\"#3ddcff\" stop-opacity=\".2\"/>\n            <stop offset=\".5\" stop-color=\"#a6f4ff\"/>\n            <stop offset=\"1\" stop-color=\"#3ddcff\" stop-opacity=\".2\"/>\n          </linearGradient>\n        </defs>\n        <rect width=\"32\" height=\"32\" rx=\"7.5\" fill=\"#1b2030\"/>\n        <path d=\"M16 5.2 L26.6 27 L21.4 27 L16 15.4 L10.6 27 L5.4 27 Z\" fill=\"url(#hdr-a)\"/>\n        <path d=\"M9.9 19.3 H22.1 V22.5 H9.9 Z\" fill=\"url(#hdr-a)\"/>\n        <path d=\"M5.6 25.9 L26.4 5.6\" stroke=\"#5ce8ff\" stroke-opacity=\".26\" stroke-width=\"5.6\" stroke-linecap=\"round\"/>\n        <path d=\"M5.6 25.9 L26.4 5.6\" stroke=\"url(#hdr-beam)\" stroke-width=\"2.5\" stroke-linecap=\"round\"/>\n      </svg>\n      <span class=\"brand-name\">AXRAY</span>\n    </a>\n    <nav class=\"site-nav\" aria-label=\"Primary\">\n      <ul>\n        <li><a href=\"/how-it-works\">How it works</a></li>\n          <li><a href=\"/ax-spec\">The AX spec</a></li>\n          <li><a href=\"/index\">AX Index</a></li>\n          <li><a href=\"/docs\">API</a></li>\n          <li><a href=\"/pricing\">Pricing</a></li>\n      </ul>\n    </nav>\n    <div class=\"head-actions\">\n      <a class=\"btn btn-ghost\" href=\"/login\">Sign in</a><a class=\"btn btn-solid\" href=\"/signup\">Create account</a>\n    </div>\n    <!-- The same primary links again, as a disclosure, for the widths where the\n         inline nav does not fit. <details> rather than a scripted menu: the\n         button role, the expanded state, Enter/Space and Escape all come from\n         the browser, and the header keeps working with no JavaScript at all. -->\n    <details class=\"nav-menu\">\n      <summary>\n        <span class=\"nav-menu-bars\" aria-hidden=\"true\"></span>\n        <span class=\"nav-menu-word\">Menu</span>\n      </summary>\n      <nav class=\"nav-menu-panel\" aria-label=\"Primary, compact\">\n        <ul>\n          <li><a href=\"/how-it-works\">How it works</a></li>\n          <li><a href=\"/ax-spec\">The AX spec</a></li>\n          <li><a href=\"/index\">AX Index</a></li>\n          <li><a href=\"/docs\">API</a></li>\n          <li><a href=\"/pricing\">Pricing</a></li>\n        </ul>\n        <!-- The account actions again. The header bar drops one of these on a\n             narrow phone for want of room, and nothing else on the site links\n             to /login or /signup, so the panel has to carry both. -->\n        <ul class=\"nav-menu-account\">\n          <li><a href=\"/login\">Sign in</a></li>\n          <li><a href=\"/signup\">Create account</a></li>\n        </ul>\n      </nav>\n    </details>\n  </div>\n</header>\n<main id=\"main\">\n\n<section class=\"section\">\n  <div class=\"shell prose\" style=\"padding-top:60px\">\n    <p class=\"kicker\">404</p>\n    <h1>That page is not here.</h1>\n    <p>Which is itself an Agent Experience problem, so at least it is on brand.</p>\n    <p><a class=\"btn btn-solid\" href=\"/\">Go and scan something</a></p>\n  </div>\n</section>\n</main>\n<footer class=\"site-foot\">\n  <div class=\"shell foot-scan\">\n    <!--\n      The site declares a SearchAction pointing at /scan?url={query}, and until\n      now the only form that honoured it lived on the home page. An agent\n      landing on any other page read a promise the page could not keep, which\n      is exactly the half-affordance the rubric warns about. This form is the\n      promise made true everywhere, and it is useful to a human reading the\n      docs who wants to scan something without going back to the front page.\n    -->\n    <form class=\"foot-scan-form\" action=\"/scan\" method=\"get\" role=\"search\">\n      <label for=\"foot-url\">Scan any page</label>\n      <div class=\"scan-row\">\n        <input id=\"foot-url\" name=\"url\" type=\"search\" inputmode=\"url\" autocomplete=\"url\"\n               spellcheck=\"false\" placeholder=\"example.com/pricing\" re"},"/.well-known/agent.json":{"found":false,"status":404,"body":"<!doctype html>\n<html lang=\"en\" dir=\"ltr\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Not found - AXRAY</title>\n<meta name=\"description\" content=\"That page does not exist.\">\n<link rel=\"canonical\" href=\"https://axray.online/404\">\n\n\n<meta name=\"robots\" content=\"noindex, follow\">\n<meta property=\"og:site_name\" content=\"AXRAY\">\n<meta property=\"og:title\" content=\"Not found - AXRAY\">\n<meta property=\"og:description\" content=\"That page does not exist.\">\n<meta property=\"og:type\" content=\"website\">\n<meta property=\"og:url\" content=\"https://axray.online/404\">\n<meta property=\"og:image\" content=\"https://axray.online/og/default-2.png\">\n<meta property=\"og:image:type\" content=\"image/png\">\n<meta property=\"og:image:width\" content=\"1200\">\n<meta property=\"og:image:height\" content=\"630\">\n<meta property=\"og:image:alt\" content=\"Not found - AXRAY\">\n<meta name=\"twitter:card\" content=\"summary_large_image\">\n<meta name=\"twitter:title\" content=\"Not found - AXRAY\">\n<meta name=\"twitter:description\" content=\"That page does not exist.\">\n<meta name=\"twitter:image\" content=\"https://axray.online/og/default-2.png\">\n<link rel=\"license\" href=\"https://axray.online/terms\">\n<link rel=\"icon\" href=\"/assets/favicon.svg\" type=\"image/svg+xml\">\n<link rel=\"icon\" href=\"/assets/brand/icon.jpg\" type=\"image/jpeg\" sizes=\"1024x1024\">\n<link rel=\"apple-touch-icon\" href=\"/assets/brand/icon.jpg\">\n<link rel=\"alternate\" type=\"text/plain\" href=\"https://axray.online/llms.txt\" title=\"llms.txt\">\n<link rel=\"alternate\" type=\"application/atom+xml\" href=\"https://axray.online/writing/feed.xml\" title=\"AXRAY Writing\">\n<link rel=\"stylesheet\" href=\"/assets/styles.css?v=a4369e90\">\n<script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"AXRAY\",\"url\":\"https://axray.online\",\"logo\":\"https://axray.online/assets/brand/icon.jpg\",\"description\":\"AXRAY measures Agent Experience: whether AI agents can reach, understand and act on a website. It returns an AX score out of 100 and a prioritised fix list.\",\"sameAs\":[\"https://www.instagram.com/axray.online/\"],\"contactPoint\":[{\"@type\":\"ContactPoint\",\"contactType\":\"customer support\",\"email\":\"hello@axray.online\",\"url\":\"https://axray.online/contact\"}]}</script>\n<script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"AXRAY\",\"url\":\"https://axray.online\",\"potentialAction\":{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https://axray.online/scan?url={query}\"},\"query-input\":\"required name=query\"}}</script>\n<script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebPage\",\"name\":\"Not found - AXRAY\",\"description\":\"That page does not exist.\",\"url\":\"https://axray.online/404\",\"inLanguage\":\"en\",\"datePublished\":\"2026-01-15\",\"dateModified\":\"2026-08-26\",\"isPartOf\":{\"@type\":\"WebSite\",\"name\":\"AXRAY\",\"url\":\"https://axray.online\"}}</script>\n<script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"AXRAY\",\"item\":\"https://axray.online\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Not found\",\"item\":\"https://axray.online/404\"}]}</script>\n<script async src=\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9394843836818839\" crossorigin=\"anonymous\"></script>\n\n</head>\n<body>\n<a class=\"skip\" href=\"#main\">Skip to main content</a>\n<!-- A film grain over the whole viewport. Large flat fields on a page this\n     dark band visibly on ordinary screens; this hides that and gives the\n     surface a texture. It is one inline data URI, so it costs no request, and\n     it is hidden from assistive technology because it carries no meaning. -->\n<div class=\"grain\" aria-hidden=\"true\"></div>\n<header class=\"site-head\">\n  <div class=\"shell head-inner\">\n    <a class=\"brand\" href=\"/\" aria-label=\"AXRAY home\">\n      <svg class=\"brand-mark\" viewBox=\"0 0 32 32\" width=\"29\" height=\"29\" aria-hidden=\"true\" focusable=\"false\">\n        <defs>\n          <linearGradient id=\"hdr-a\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n            <stop offset=\"0\" stop-color=\"#8079f7\"/>\n            <stop offset=\"1\" stop-color=\"#4a41c4\"/>\n          </linearGradient>\n          <linearGradient id=\"hdr-beam\" x1=\"0\" y1=\"1\" x2=\"1\" y2=\"0\">\n            <stop offset=\"0\" stop-color=\"#3ddcff\" stop-opacity=\".2\"/>\n            <stop offset=\".5\" stop-color=\"#a6f4ff\"/>\n            <stop offset=\"1\" stop-color=\"#3ddcff\" stop-opacity=\".2\"/>\n          </linearGradient>\n        </defs>\n        <rect width=\"32\" height=\"32\" rx=\"7.5\" fill=\"#1b2030\"/>\n        <path d=\"M16 5.2 L26.6 27 L21.4 27 L16 15.4 L10.6 27 L5.4 27 Z\" fill=\"url(#hdr-a)\"/>\n        <path d=\"M9.9 19.3 H22.1 V22.5 H9.9 Z\" fill=\"url(#hdr-a)\"/>\n        <path d=\"M5.6 25.9 L26.4 5.6\" stroke=\"#5ce8ff\" stroke-opacity=\".26\" stroke-width=\"5.6\" stroke-linecap=\"round\"/>\n        <path d=\"M5.6 25.9 L26.4 5.6\" stroke=\"url(#hdr-beam)\" stroke-width=\"2.5\" stroke-linecap=\"round\"/>\n      </svg>\n      <span class=\"brand-name\">AXRAY</span>\n    </a>\n    <nav class=\"site-nav\" aria-label=\"Primary\">\n      <ul>\n        <li><a href=\"/how-it-works\">How it works</a></li>\n          <li><a href=\"/ax-spec\">The AX spec</a></li>\n          <li><a href=\"/index\">AX Index</a></li>\n          <li><a href=\"/docs\">API</a></li>\n          <li><a href=\"/pricing\">Pricing</a></li>\n      </ul>\n    </nav>\n    <div class=\"head-actions\">\n      <a class=\"btn btn-ghost\" href=\"/login\">Sign in</a><a class=\"btn btn-solid\" href=\"/signup\">Create account</a>\n    </div>\n    <!-- The same primary links again, as a disclosure, for the widths where the\n         inline nav does not fit. <details> rather than a scripted menu: the\n         button role, the expanded state, Enter/Space and Escape all come from\n         the browser, and the header keeps working with no JavaScript at all. -->\n    <details class=\"nav-menu\">\n      <summary>\n        <span class=\"nav-menu-bars\" aria-hidden=\"true\"></span>\n        <span class=\"nav-menu-word\">Menu</span>\n      </summary>\n      <nav class=\"nav-menu-panel\" aria-label=\"Primary, compact\">\n        <ul>\n          <li><a href=\"/how-it-works\">How it works</a></li>\n          <li><a href=\"/ax-spec\">The AX spec</a></li>\n          <li><a href=\"/index\">AX Index</a></li>\n          <li><a href=\"/docs\">API</a></li>\n          <li><a href=\"/pricing\">Pricing</a></li>\n        </ul>\n        <!-- The account actions again. The header bar drops one of these on a\n             narrow phone for want of room, and nothing else on the site links\n             to /login or /signup, so the panel has to carry both. -->\n        <ul class=\"nav-menu-account\">\n          <li><a href=\"/login\">Sign in</a></li>\n          <li><a href=\"/signup\">Create account</a></li>\n        </ul>\n      </nav>\n    </details>\n  </div>\n</header>\n<main id=\"main\">\n\n<section class=\"section\">\n  <div class=\"shell prose\" style=\"padding-top:60px\">\n    <p class=\"kicker\">404</p>\n    <h1>That page is not here.</h1>\n    <p>Which is itself an Agent Experience problem, so at least it is on brand.</p>\n    <p><a class=\"btn btn-solid\" href=\"/\">Go and scan something</a></p>\n  </div>\n</section>\n</main>\n<footer class=\"site-foot\">\n  <div class=\"shell foot-scan\">\n    <!--\n      The site declares a SearchAction pointing at /scan?url={query}, and until\n      now the only form that honoured it lived on the home page. An agent\n      landing on any other page read a promise the page could not keep, which\n      is exactly the half-affordance the rubric warns about. This form is the\n      promise made true everywhere, and it is useful to a human reading the\n      docs who wants to scan something without going back to the front page.\n    -->\n    <form class=\"foot-scan-form\" action=\"/scan\" method=\"get\" role=\"search\">\n      <label for=\"foot-url\">Scan any page</label>\n      <div class=\"scan-row\">\n        <input id=\"foot-url\" name=\"url\" type=\"search\" inputmode=\"url\" autocomplete=\"url\"\n               spellcheck=\"false\" placeholder=\"example.com/pricing\" re"}},"mcp":{"found":true,"url":"https://axray.online/.well-known/mcp.json","body":"{\"schema_version\":\"2025-06-18\",\"name\":\"axray\",\"description\":\"Score any URL for Agent Experience: whether an AI agent can reach, understand and act on it. Returns a 0-100 score and a prioritised fix list.\",\"documentation\":\"https://axray.online/docs\",\"servers\":[{\"type\":\"http\",\"url\":\"https://axray.online/api/v1\"}],\"endpoints\":[{\"type\":\"openapi\",\"url\":\"https://axray.online/openapi.json\"},{\"type\":\"llms.txt\",\"url\":\"https://axray.online/llms.txt\"}],\"tools\":[{\"name\":\"scan_url\",\"description\":\"Score a single URL for Agent Experience and return the fix list.\",\"method\":\"POST\",\"path\":\"/api/v1/scan\",\"input_schema\":{\"type\":\"object\",\"required\":[\"url\"],\"properties\":{\"url\":{\"type\":\"string\",\"description\":\"The URL to scan.\"},\"probeAgents\":{\"type\":\"boolean\",\"description\":\"Also fetch with named AI crawler user-agents.\"}}}},{\"name\":\"get_index\",\"description\":\"Read the public AX Index: best known Agent Experience score per host.\",\"method\":\"GET\",\"path\":\"/api/v1/index\"}],\"contact\":\"hello@axray.online\",\"license\":\"https://axray.online/terms\"}"}},"answerable":[{"id":"identity","question":"What is this company, and what does it do?","verdict":"stated","evidence":"Organization data names you and describes you: \"AXRAY measures Agent Experience: whether AI agents can reach, understand and act on a web…\"","consequence":"An assistant asked \"what is this company\" writes its own answer from whatever text it managed to read, and that answer is the one your customer sees."},{"id":"offering","question":"What do they sell?","verdict":"stated","evidence":"1 declared: AXRAY.","consequence":"Without a declared product an assistant describes your offering from headings and marketing copy, which is where \"they seem to do something with AI\" comes from."},{"id":"price","question":"What does it cost?","verdict":"stated","evidence":"4 declared Offers, starting at 0.00 USD.","consequence":"A price an assistant cannot lift out is a price it will not quote. It says \"pricing is not stated\" or repeats an old number from somewhere else, while a competitor who published an Offer gets quoted exactly."},{"id":"contact","question":"How do I get in touch with them?","verdict":"stated","evidence":"A ContactPoint is declared in structured data.","consequence":"An assistant that cannot find a way to contact you sends the customer to a search result, a directory entry or a support forum, none of which you control."},{"id":"location","question":"Where are they?","verdict":"absent","evidence":"No PostalAddress, no areaServed and no link to a locations page.","consequence":"Every \"near me\" question, every \"is this a local company\", every assistant deciding whether you serve a customer's country is answered from this. With nothing declared, you are answered as though you were nowhere."},{"id":"availability","question":"Is it in stock?","verdict":"implied","evidence":"Stock is described in the page text but not declared on the Offer, so it is prose rather than a fact.","consequence":"A shopping agent that cannot read availability treats the item as unknown and moves to a listing it can read. This is the fact that decides whether you are in the comparison at all."},{"id":"returns","question":"What happens if I want to send it back?","verdict":"implied","evidence":"No MerchantReturnPolicy on the page, though llms.txt may point an assistant at the terms.","consequence":"Return terms are one of the last things a buyer checks and one of the first an assistant is asked about. Unanswerable, it says so, and the hesitation is yours to absorb."}],"agentView":{"markdown":"[Skip to main content](#main)\n\n[AXRAY](/)\n\n- [How it works](/how-it-works)\n- [The AX spec](/ax-spec)\n- [AX Index](/index)\n- [API](/docs)\n- [Pricing](/pricing)\n\n[Sign in](/login)[Create account](/signup)\n\nMenu\n\n- [How it works](/how-it-works)\n- [The AX spec](/ax-spec)\n- [AX Index](/index)\n- [API](/docs)\n- [Pricing](/pricing)\n- [Sign in](/login)\n- [Create account](/signup)\n\nAI readability check\n\n# People ask AI about you. See what it reads on your site.\n\nAXRAY reads your page the way ChatGPT, Claude and Perplexity read it, then tells you in plain words what reaches them and what never arrives. About two seconds, no account.\n\nWebsite URL to scan Run the scan\n\nPrefer a terminal? `npx axray-cli example.com`\n\n- 1 free scans, no account\n- An answer in about two seconds\n- Nothing to install\n\nnorthline.coffee/ethiopia-guji Example\n\n403 — CDN challenge served to GPTBot\n\n<**div** class=\"logo\"> <**a** href=\"#\"> × 4 Navigation is a dead end\n\n<**img** src=\"guji.webp\"> No alt text\n\n<h1> — missing <**div** class=\"p\">$24.00</div> Price is not an Offer\n\n<**div** onclick=\"buy()\"> Not a link — an agent cannot follow it\n\nllms.txt — not found schema.org — 0 blocks\n\nWhat an agent receives, beside what you see Drag the beam ↔\n\n57checks run against every URL, across five weighted pillars\n\n16named AI crawlers resolved against your robots.txt individually\n\n294well-known public sites measured to build the baseline\n\n68is what the median one of them scores out of 100\n\nResolved individually against your robots.txt\n\nOAI-SearchBot ChatGPT-User GPTBot ClaudeBot Claude-User Claude-SearchBot PerplexityBot Perplexity-User Google-Extended Googlebot Bingbot Applebot-Extended meta-externalagent Amazonbot CCBot DuckAssistBot\n\nWhat this is, in one sentence\n\n## AXRAY tells you whether AI can find your site, describe it correctly, and send you the customer.\n\n01\n\n### Can it get in at all?\n\nMany sites turn AI crawlers away without meaning to. Nothing breaks and no alert fires — you simply stop appearing in answers, and there is no way to notice from the inside.\n\n02\n\n### Does it get you right?\n\nWhat you sell, what it costs, where you are. If those are not stated in a form a machine can lift out, the assistant guesses — and the guess is what your customer reads.\n\n03\n\n### What should you fix first?\n\nOne ordered list, not a wall of warnings. Each item carries the points it wins back and says whether it is a setting or a rebuild.\n\nThe part your customer sees\n\n## The same question about the same shop, answered from two versions of its website.\n\nEverything else here shows the mechanism. This is the outcome: what an assistant tells the person who asked. Nobody sees your score — they see this.\n\nSite scores 34 34\n\nYouWhat does Northline Coffee sell, and how much is it?\n\nI wasn’t able to read Northline Coffee’s website. They appear to be a coffee roaster, but I can’t confirm what they currently stock or what it costs.\n\n- No source cited\n- Price not stated\n- No link offered\n\nSame shop, scores 92 92\n\nYouWhat does Northline Coffee sell, and how much is it?\n\nNorthline Coffee roasts single-origin beans. Their Ethiopia Guji, washed, is **$24.00** for 250 g whole bean — peach, bergamot and brown sugar. In stock, ships in two days.\n\n- Cited — northline.coffee\n- Price read from Offer data\n- Link offered to the customer\n\nAn illustration, using the same invented shop as the comparator above.\n\nWhat you get back\n\n## A number you can act on, not a wall of warnings.\n\nThis is our own report, scanned live against this page. A measurement product that will not publish its own measurement is asking for a trust it has not earned.\n\naxray.online/report/1Z96juvNwQKgnw live\n\n100 / 100 A+\n\nOur own report\n\naxray.online\n\naxray.online scores 100/100 (A+) for Agent Experience.\n\nReachability 100\n\nComprehension 100\n\nStructure 100\n\nActionability 100\n\nAgent Contract 100\n\nScanned 17m ago · 57 checks [Open the full report &rarr;](/report/1Z96juvNwQKgnw)\n\nweight 25\n\nReachability\n\n### Can it get the bytes?\n\nA Cloudflare challenge that a browser solves silently returns a wall to ChatGPT. Your page simply does not exist in that answer.\n\nweight 25\n\nComprehension\n\n### Can it tell what this is?\n\nNo h1, no description, 40 words of text: the assistant writes its own summary of you, and it will be wrong in a way you never see.\n\nweight 18\n\nStructure\n\n### Can it read the facts?\n\nYour price is styled text in a div. A competitor publishes an Offer. The shopping agent quotes their number and calls yours \"not stated\".\n\nweight 17\n\nActionability\n\n### Can it do the next thing?\n\nNavigation built from click handlers on empty anchors works for a mouse and is a dead end for an agent. Everything behind it is unreachable.\n\nweight 15\n\nAgent Contract\n\n### Did you tell it the rules?\n\nNo llms.txt, no per-crawler policy, no manifest. Every operator applies its own default to you and you find out afterwards.\n\n57 checks across those five pillars, plus your robots.txt resolved against 16 named AI crawlers one at a time — [how it works](/how-it-works), [the full rubric](/ax-spec).\n\nIn your terminal and your pipeline\n\n## The same engine, everywhere you work.\n\n[CLI and API docs](/docs)\n\nyour terminal\n\n```\n$ npx axray-cli example.com\n\n# fails the build if the score drops below 70\n$ npx axray-cli \"$DEPLOY_URL\" --min 70\n```\n\nThe CLI runs the same scoring code as this page, so the number in CI is the number on the report. Free, and it needs no account.\n\nWhat it costs\n\n## Free to find out. A few dollars to keep watching.\n\nOne scan costs nothing and needs no account, because a number you cannot get is not worth publishing. You pay when you want the whole site crawled rather than one page, or the scanner running in your pipeline instead of your browser.\n\nFree\n\nFree forever\n\nFind out where you stand.\n\n- 1 scan a day with no account at all\n- 2 a day once you sign up\n- Full 57-check report and fix list\n- Reports reachable by their own private link\n\n[Scan a URL](#url)\n\nPro\n\n2.99 per month\n\nFor one site you actually care about.\n\n- 100 scans a day\n- Whole-site crawl up to 50 pages\n- 3 pages watched on a schedule, with alerts\n- Systemic issue analysis across templates\n\n[Start Pro](/pricing)\n\nTeam\n\n8.99 per month\n\nFor a team wiring AX into a pipeline.\n\n- 1000 scans a day\n- Crawls up to 500 pages\n- 25 monitored pages, alerting to a signed webhook\n- An API key, for calling the JSON API from a server\n\n[Start Team](/pricing)\n\n[Higher volume than Team is Scale, 19.99 per month — the same product, more of it.](/pricing) Prices are shown in your own currency at checkout, tax included. [See the full comparison](/pricing).\n\nBefore you paste an address\n\n## The questions people ask first.\n\nDo I need an account to try it?\n\nNo. 1 scan a day with no account, no card and nothing to install — paste an address and the report is on screen in about two seconds. An account is free as well: it raises the daily allowance to 2, keeps your reports to yourself and remembers what you have scanned.\n\nMy site is a React or Next.js app. Will it just score zero?\n\nIt scores whatever arrives without a browser, and if your content is assembled in the visitor’s browser then very little arrives. That is not us failing to read your site — it is the same empty shell the crawler gets, and the reason your pages can be missing from answers while looking perfect to you. The fix is to render on the server: Next.js server components or `getStaticProps`, Nuxt or SvelteKit in SSR mode, or a prerender step for the routes that matter.\n\nHow is this different from Lighthouse or an SEO audit?\n\nLighthouse runs a browser and measures how fast the page paints for a person. An SEO tool asks how you rank. AXRAY runs no browser at all, which is the point: it reproduces the budget a crawling agent actually gives you and reports what survived. Around a third of the 57 checks have no equivalent in either tool.\n\nCan I run this automatically, on every deploy?\n\nYes. `npx axray-cli your-site.com --min 70` exits non-zero below the threshold, so a change that would have broken what agents can read fails the build instead of shipping. The command-line tool is free and needs no account.\n\nDoes scanning my site publish anything about it?\n\nNo. The report is reachable only through its own unguessable link, and your domain does not enter the public [AX Index](/index) unless you prove you control it and ask to be listed.\n\nMore about the method, and the objections to it, on [how it works](/how-it-works#faq), [the published specification](/ax-spec).\n\n![The AXRAY agent holding a scorecard reading 100 out of 100, grade A plus]\n\n## Find out what AI sees on your site.\n\nAbout two seconds, no account. Most people are surprised, and most of what turns up is fixable the same day.\n\n[Scan a URL](#url)\n\nScan any page\n\nRun the scan\n\nAXRAY\n\nSee what AI can actually read on your website.\n\nAgent Experience specification v1.2.0. Open rubric, open CLI.\n\n## Product\n\n- [How it works](/how-it-works)\n- [Pricing](/pricing)\n- [${esc(t.footIndex)}](/index)\n- [Compare sites](/compare)\n- [Badge](/badge)\n\n## Developers\n\n- [CLI and API documentation](/docs)\n- [The AX specification](/ax-spec)\n- [llms.txt](/llms.txt)\n- [OpenAPI schema](/openapi.json)\n\n## Company\n\n- [Writing](/writing)\n- [AI crawler reference](/ai-crawlers)\n- [Türkçe yazılar](/yazilar)\n- [About AXRAY](/about)\n- [Changelog](/changelog)\n- [Contact us](/contact)\n- [Terms of service](/terms)\n- [Privacy policy](/privacy)\n- [Security](/security)\n- [security.txt](/.well-known/security.txt)\n- English\n- [العربية](/ar)\n- [Русский](/ru)\n- [Türkçe](/tr)\n\n© 2026 AXRAY. Built to be read by machines. Last updated 2026-08-26.\n\n[hello@axray.online](mailto:hello@axray.online)","truncated":false,"chars":9664,"tokens":2498,"contentTokens":2157},"priorities":[],"summary":"axray.online scores 100/100 (A+) for Agent Experience. This page is built for agents. It is in the top fraction of a percent of the web on Agent Experience."}