{"version":"1.2.0","url":"https://axray.online/","finalUrl":"https://axray.online/","host":"axray.online","scannedAt":"2026-09-03T14:33:22.361Z","durationMs":304,"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 98 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":"1424 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 98 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":"9 KB of HTML, 7% 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":"24 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":"1424 words of readable text, 1317 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":"9 headings are phrased as questions, with about 146 words of content each.","why":"Retrieval matches the reader's question against your headings. A heading that is the question wins that match against a heading that is a label.","evidence":["Can it get in at all?","Does it get you right?","What should you fix first?","Can it get the bytes?"],"evidenceQuality":"strong","impact":0},{"id":"text-ratio","pillar":"comprehension","title":"Signal-to-markup ratio","status":"pass","weight":8,"earned":8,"detail":"24.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":"37% of structural elements are semantic (45 semantic vs 78 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":57,"available":57,"weight":18,"checks":[{"id":"jsonld-present","pillar":"structure","title":"Ships structured data","status":"pass","weight":12,"earned":12,"detail":"4 JSON-LD blocks on the page, 8 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 4 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.","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 12 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":"na","weight":4,"earned":4,"detail":"Nothing indicates this page is part of a published stream of content, so a feed is not expected.","why":"A feed is how an agent follows a site that keeps publishing. Pages that do not publish on a schedule have nothing to put in one.","impact":0},{"id":"language-alternates","pillar":"structure","title":"Declares its language alternates","status":"na","weight":4,"earned":4,"detail":"No hreflang links, and nothing on the page suggests the content exists in another language.","why":"hreflang is how a site with several language versions tells an assistant which one to quote to which reader. A site with one language has nothing to declare.","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 34 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":"31 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 2657 bytes, 381 words and 15 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":"7 sections, 15 curated links, 14 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-03T14:33:22.239Z.","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 98 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":"1424 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 98 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":"9 KB of HTML, 7% 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":"24 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":"1424 words of readable text, 1317 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":"9 headings are phrased as questions, with about 146 words of content each.","why":"Retrieval matches the reader's question against your headings. A heading that is the question wins that match against a heading that is a label.","evidence":["Can it get in at all?","Does it get you right?","What should you fix first?","Can it get the bytes?"],"evidenceQuality":"strong","impact":0},{"id":"text-ratio","pillar":"comprehension","title":"Signal-to-markup ratio","status":"pass","weight":8,"earned":8,"detail":"24.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":"37% of structural elements are semantic (45 semantic vs 78 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":"4 JSON-LD blocks on the page, 8 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 4 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.","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 12 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":"na","weight":4,"earned":4,"detail":"Nothing indicates this page is part of a published stream of content, so a feed is not expected.","why":"A feed is how an agent follows a site that keeps publishing. Pages that do not publish on a schedule have nothing to put in one.","impact":0},{"id":"language-alternates","pillar":"structure","title":"Declares its language alternates","status":"na","weight":4,"earned":4,"detail":"No hreflang links, and nothing on the page suggests the content exists in another language.","why":"hreflang is how a site with several language versions tells an assistant which one to quote to which reader. A site with one language has nothing to declare.","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 34 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":"31 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 2657 bytes, 381 words and 15 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":"7 sections, 15 curated links, 14 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-03T14:33:22.239Z.","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":98,"bytes":9603,"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":"Thu, 03 Sep 2026 14:33:22 GMT","etag":"W/\"sRwxb6TTlSwCFNoAMXrs\"","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":1424,"textRatio":0.24604523084134053,"looksClientRendered":false,"frameworkHints":[],"scriptBytes":2349,"htmlBytes":34136},"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":12,"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## 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":7,"linkCount":15},"wellKnown":{"/.well-known/security.txt":{"found":true,"status":200,"body":"Contact: mailto:hello@axray.online\nExpires: 2027-09-03T14:33:22.239Z\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\">\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<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=\"stylesheet\" href=\"/assets/styles.css\">\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\" required>\n        <button class=\"btn btn-solid\" type=\"submit\">Run the scan</button>\n      </div>\n    </form>\n  </div>\n  <div class=\"shell foot"},"/.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\">\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<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=\"stylesheet\" href=\"/assets/styles.css\">\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\" required>\n        <button class=\"btn btn-solid\" type=\"submit\">Run the scan</button>\n      </div>\n    </form>\n  </div>\n  <div class=\"shell foot"},"/.well-known/agent.json":{"found":false,"status":404,"body":"<!doctype html>\n<html lang=\"en\">\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<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=\"stylesheet\" href=\"/assets/styles.css\">\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\" required>\n        <button class=\"btn btn-solid\" type=\"submit\">Run the scan</button>\n      </div>\n    </form>\n  </div>\n  <div class=\"shell foot"}},"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\"}"}},"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."}