{"version":"1.0.0","url":"https://qibbopress.com/","finalUrl":"https://qibbopress.com/","host":"qibbopress.com","scannedAt":"2026-08-26T18:22:44.740Z","durationMs":614,"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 332 ms.","why":"The baseline: an agent with no browser, no cookies and no JavaScript received your page.","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.","impact":0},{"id":"server-rendered","pillar":"reachability","title":"Content exists without running JavaScript","status":"pass","weight":14,"earned":14,"detail":"806 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.","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.","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.","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.","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.","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.","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.","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 332 ms.","why":"Agents fetch many pages per answer and drop the slow ones. Speed is a ranking input you control.","impact":0},{"id":"payload-weight","pillar":"reachability","title":"HTML payload stays inside an agent context budget","status":"pass","weight":5,"earned":5,"detail":"14 KB of HTML, 16% of it inline script.","why":"Agents truncate long documents. Anything past the cut simply is not read.","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.","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":70,"available":70,"weight":25,"checks":[{"id":"title","pillar":"comprehension","title":"Has a descriptive <title>","status":"pass","weight":10,"earned":10,"detail":"\"AXRAY - Agent Experience scanner. See your site the way an AI agent does.\" (73 characters).","why":"This is the label assistants attach to you when they cite this page.","impact":0},{"id":"meta-description","pillar":"comprehension","title":"Has a meta description","status":"pass","weight":8,"earned":8,"detail":"166 characters: \"Scan any URL and see exactly what an AI agent can reach, understand and act on. 53 checks, an AX score out of 100 and a…\"","why":"This is the summary assistants reuse verbatim more often than any other field.","impact":0},{"id":"h1","pillar":"comprehension","title":"Exactly one <h1> naming the page","status":"pass","weight":8,"earned":8,"detail":"\"Your website was built for people. Increasingly, it is read by machines.\"","why":"The h1 is the strongest in-page signal of what the document is about.","impact":0},{"id":"heading-hierarchy","pillar":"comprehension","title":"Headings form a sane outline","status":"pass","weight":6,"earned":6,"detail":"15 headings with no skipped levels.","why":"A clean outline is what lets an agent quote the right section instead of the whole page.","impact":0},{"id":"content-volume","pillar":"comprehension","title":"Enough substance to be worth citing","status":"pass","weight":10,"earned":10,"detail":"806 words of readable text.","why":"Assistants prefer sources with enough material to answer a question outright rather than pages that just point elsewhere.","impact":0},{"id":"text-ratio","pillar":"comprehension","title":"Signal-to-markup ratio","status":"pass","weight":8,"earned":8,"detail":"32.3% of the payload is readable text.","why":"A high ratio means an agent spends its limited context on your content instead of your tooling.","impact":0},{"id":"lang","pillar":"comprehension","title":"Declares a document language","status":"pass","weight":5,"earned":5,"detail":"<html lang=\"en\">","why":"Language is how an assistant decides whether to answer a user in your words or translate them.","impact":0},{"id":"image-alt","pillar":"comprehension","title":"Images carry alt text","status":"na","weight":8,"earned":8,"detail":"No content images on this page.","why":"Agents cannot see images. Alt text is the only description they get.","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.","impact":0},{"id":"semantic-density","pillar":"comprehension","title":"Uses semantic elements, not div soup","status":"pass","weight":6,"earned":6,"detail":"57% of structural elements are semantic (25 semantic vs 19 div).","why":"Semantic tags carry meaning an agent can use; a div carries none.","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.","impact":0}]},{"pillar":"structure","label":"Structure","blurb":"Is the important data machine-readable instead of implied by visual layout?","score":100,"earned":51,"available":51,"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.","why":"Structured data is the only part of your page an agent reads without having to interpret it.","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.","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.","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.","impact":0},{"id":"canonical","pillar":"structure","title":"Declares a canonical URL","status":"pass","weight":6,"earned":6,"detail":"Canonical: https://qibbopress.com/","why":"Agents dedupe sources by canonical URL, and cross-origin canonicals hand your citation to somebody else.","impact":0},{"id":"sitemap","pillar":"structure","title":"Publishes a sitemap","status":"pass","weight":8,"earned":8,"detail":"https://qibbopress.com/sitemap.xml lists 10 URLs.","why":"A sitemap is how a crawler discovers the pages your navigation hides behind JavaScript menus.","impact":0},{"id":"price-structured","pillar":"structure","title":"Prices are machine-readable","status":"na","weight":6,"earned":6,"detail":"No prices detected in the page text.","why":"","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.","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 23 links resolve to a real URL.","why":"Real hrefs are the only navigation primitive an agent has.","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.","impact":0},{"id":"internal-nav","pillar":"actionability","title":"Links onward into the site","status":"pass","weight":6,"earned":6,"detail":"20 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.","impact":0},{"id":"form-labels","pillar":"actionability","title":"Form fields are labelled","status":"pass","weight":8,"earned":8,"detail":"All 1 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.","impact":0},{"id":"form-names","pillar":"actionability","title":"Form fields have stable names","status":"pass","weight":6,"earned":6,"detail":"All 1 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.","impact":0},{"id":"form-autocomplete","pillar":"actionability","title":"Fields declare autocomplete tokens","status":"pass","weight":4,"earned":4,"detail":"1 of 1 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.","impact":0},{"id":"button-semantics","pillar":"actionability","title":"Controls are real buttons","status":"pass","weight":6,"earned":6,"detail":"2 native button controls, no div-as-button patterns found.","why":"A <button> announces itself as an actionable control. A styled div announces nothing.","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.","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.","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.","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://qibbopress.com/llms.txt served 2063 bytes.","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.","impact":0},{"id":"llms-txt-quality","pillar":"contract","title":"llms.txt is actually useful","status":"pass","weight":6,"earned":6,"detail":"6 sections, 13 curated links, with a summary blockquote.","why":"A well-formed llms.txt is read as a table of contents. A dumped sitemap is read as noise.","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.","impact":0},{"id":"mcp-manifest","pillar":"contract","title":"Exposes an agent-callable manifest","status":"pass","weight":6,"earned":6,"detail":"https://qibbopress.com/.well-known/mcp.json is served.","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.","impact":0},{"id":"identity","pillar":"contract","title":"Identity is machine-verifiable","status":"pass","weight":5,"earned":5,"detail":"Organization structured data with sameAs links is present.","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.","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; dateModified in structured data; <time> 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.","impact":0},{"id":"licence-signal","pillar":"contract","title":"Declares content licensing","status":"pass","weight":5,"earned":5,"detail":"rel=\"license\" link.","why":"A machine-readable licence tells an agent how it may reuse your text. Ambiguity is usually resolved against you.","impact":0},{"id":"security-txt","pillar":"contract","title":"Publishes security.txt","status":"pass","weight":4,"earned":4,"detail":"/.well-known/security.txt is served.","why":"It is the standard machine-readable place to say who to contact. Agents and researchers both look there first.","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 332 ms.","why":"The baseline: an agent with no browser, no cookies and no JavaScript received your page.","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.","impact":0},{"id":"server-rendered","pillar":"reachability","title":"Content exists without running JavaScript","status":"pass","weight":14,"earned":14,"detail":"806 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.","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.","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.","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.","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.","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.","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.","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 332 ms.","why":"Agents fetch many pages per answer and drop the slow ones. Speed is a ranking input you control.","impact":0},{"id":"payload-weight","pillar":"reachability","title":"HTML payload stays inside an agent context budget","status":"pass","weight":5,"earned":5,"detail":"14 KB of HTML, 16% of it inline script.","why":"Agents truncate long documents. Anything past the cut simply is not read.","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.","impact":0},{"id":"title","pillar":"comprehension","title":"Has a descriptive <title>","status":"pass","weight":10,"earned":10,"detail":"\"AXRAY - Agent Experience scanner. See your site the way an AI agent does.\" (73 characters).","why":"This is the label assistants attach to you when they cite this page.","impact":0},{"id":"meta-description","pillar":"comprehension","title":"Has a meta description","status":"pass","weight":8,"earned":8,"detail":"166 characters: \"Scan any URL and see exactly what an AI agent can reach, understand and act on. 53 checks, an AX score out of 100 and a…\"","why":"This is the summary assistants reuse verbatim more often than any other field.","impact":0},{"id":"h1","pillar":"comprehension","title":"Exactly one <h1> naming the page","status":"pass","weight":8,"earned":8,"detail":"\"Your website was built for people. Increasingly, it is read by machines.\"","why":"The h1 is the strongest in-page signal of what the document is about.","impact":0},{"id":"heading-hierarchy","pillar":"comprehension","title":"Headings form a sane outline","status":"pass","weight":6,"earned":6,"detail":"15 headings with no skipped levels.","why":"A clean outline is what lets an agent quote the right section instead of the whole page.","impact":0},{"id":"content-volume","pillar":"comprehension","title":"Enough substance to be worth citing","status":"pass","weight":10,"earned":10,"detail":"806 words of readable text.","why":"Assistants prefer sources with enough material to answer a question outright rather than pages that just point elsewhere.","impact":0},{"id":"text-ratio","pillar":"comprehension","title":"Signal-to-markup ratio","status":"pass","weight":8,"earned":8,"detail":"32.3% of the payload is readable text.","why":"A high ratio means an agent spends its limited context on your content instead of your tooling.","impact":0},{"id":"lang","pillar":"comprehension","title":"Declares a document language","status":"pass","weight":5,"earned":5,"detail":"<html lang=\"en\">","why":"Language is how an assistant decides whether to answer a user in your words or translate them.","impact":0},{"id":"image-alt","pillar":"comprehension","title":"Images carry alt text","status":"na","weight":8,"earned":8,"detail":"No content images on this page.","why":"Agents cannot see images. Alt text is the only description they get.","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.","impact":0},{"id":"semantic-density","pillar":"comprehension","title":"Uses semantic elements, not div soup","status":"pass","weight":6,"earned":6,"detail":"57% of structural elements are semantic (25 semantic vs 19 div).","why":"Semantic tags carry meaning an agent can use; a div carries none.","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.","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.","why":"Structured data is the only part of your page an agent reads without having to interpret it.","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.","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.","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.","impact":0},{"id":"canonical","pillar":"structure","title":"Declares a canonical URL","status":"pass","weight":6,"earned":6,"detail":"Canonical: https://qibbopress.com/","why":"Agents dedupe sources by canonical URL, and cross-origin canonicals hand your citation to somebody else.","impact":0},{"id":"sitemap","pillar":"structure","title":"Publishes a sitemap","status":"pass","weight":8,"earned":8,"detail":"https://qibbopress.com/sitemap.xml lists 10 URLs.","why":"A sitemap is how a crawler discovers the pages your navigation hides behind JavaScript menus.","impact":0},{"id":"price-structured","pillar":"structure","title":"Prices are machine-readable","status":"na","weight":6,"earned":6,"detail":"No prices detected in the page text.","why":"","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.","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 23 links resolve to a real URL.","why":"Real hrefs are the only navigation primitive an agent has.","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.","impact":0},{"id":"internal-nav","pillar":"actionability","title":"Links onward into the site","status":"pass","weight":6,"earned":6,"detail":"20 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.","impact":0},{"id":"form-labels","pillar":"actionability","title":"Form fields are labelled","status":"pass","weight":8,"earned":8,"detail":"All 1 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.","impact":0},{"id":"form-names","pillar":"actionability","title":"Form fields have stable names","status":"pass","weight":6,"earned":6,"detail":"All 1 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.","impact":0},{"id":"form-autocomplete","pillar":"actionability","title":"Fields declare autocomplete tokens","status":"pass","weight":4,"earned":4,"detail":"1 of 1 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.","impact":0},{"id":"button-semantics","pillar":"actionability","title":"Controls are real buttons","status":"pass","weight":6,"earned":6,"detail":"2 native button controls, no div-as-button patterns found.","why":"A <button> announces itself as an actionable control. A styled div announces nothing.","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.","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.","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.","impact":0},{"id":"llms-txt","pillar":"contract","title":"Publishes an llms.txt","status":"pass","weight":14,"earned":14,"detail":"https://qibbopress.com/llms.txt served 2063 bytes.","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.","impact":0},{"id":"llms-txt-quality","pillar":"contract","title":"llms.txt is actually useful","status":"pass","weight":6,"earned":6,"detail":"6 sections, 13 curated links, with a summary blockquote.","why":"A well-formed llms.txt is read as a table of contents. A dumped sitemap is read as noise.","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.","impact":0},{"id":"mcp-manifest","pillar":"contract","title":"Exposes an agent-callable manifest","status":"pass","weight":6,"earned":6,"detail":"https://qibbopress.com/.well-known/mcp.json is served.","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.","impact":0},{"id":"identity","pillar":"contract","title":"Identity is machine-verifiable","status":"pass","weight":5,"earned":5,"detail":"Organization structured data with sameAs links is present.","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.","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; dateModified in structured data; <time> 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.","impact":0},{"id":"licence-signal","pillar":"contract","title":"Declares content licensing","status":"pass","weight":5,"earned":5,"detail":"rel=\"license\" link.","why":"A machine-readable licence tells an agent how it may reuse your text. Ambiguity is usually resolved against you.","impact":0},{"id":"security-txt","pillar":"contract","title":"Publishes security.txt","status":"pass","weight":4,"earned":4,"detail":"/.well-known/security.txt is served.","why":"It is the standard machine-readable place to say who to contact. Agents and researchers both look there first.","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://qibbopress.com/","status":200,"ms":332,"bytes":14577,"contentType":"text/html; charset=utf-8","redirects":[],"headers":{"alt-svc":"h3=\":443\"; ma=2592000","content-length":"14577","content-type":"text/html; charset=utf-8","date":"Wed, 26 Aug 2026 18:22:44 GMT","etag":"W/\"a9DAIUYaEQLDxOEOTi0O\"","last-modified":"Wed, 26 Aug 2026 00:00:00 GMT","referrer-policy":"strict-origin-when-cross-origin","strict-transport-security":"max-age=31536000; includeSubDomains","via":"1.1 Caddy","x-content-type-options":"nosniff","x-frame-options":"SAMEORIGIN"},"ok":true,"blocked":false},"facts":{"title":"AXRAY - Agent Experience scanner. See your site the way an AI agent does.","metaDescription":"Scan any URL and see exactly what an AI agent can reach, understand and act on. 53 checks, an AX score out of 100 and a prioritised fix list. Free, no account needed.","lang":"en","canonical":"https://qibbopress.com/","wordCount":806,"textRatio":0.3232489538313782,"looksClientRendered":false,"frameworkHints":[],"scriptBytes":2281,"htmlBytes":14577},"site":{"origin":"https://qibbopress.com","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 - we allow these too. Our rubric is meant to spread.\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://qibbopress.com/sitemap.xml\n","sitemaps":["https://qibbopress.com/sitemap.xml"]},"sitemap":{"found":true,"status":200,"urlCount":10,"url":"https://qibbopress.com/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 53 checks across five pillars, and returns a score out of 100 with a fix list\n> ordered by how many points each change recovers. Free single-page scans, no account required.\n\n## Start here\n- [Scan any URL](https://qibbopress.com/): The product. Paste a URL, get a score in about two seconds.\n- [How it works](https://qibbopress.com/how-it-works): The method, and what we deliberately refuse to do.\n- [The AX specification](https://qibbopress.com/ax-spec): The complete public rubric, generated from the scoring code.\n\n## For developers\n- [CLI and API documentation](https://qibbopress.com/docs): `npx axray example.com`, the JSON API, and CI gating.\n- [OpenAPI schema](https://qibbopress.com/openapi.json): Machine-readable API description.\n- [Agent manifest](https://qibbopress.com/.well-known/mcp.json): Where to call us programmatically.\n\n## Data\n- [The AX Index](https://qibbopress.com/index): Median and mean AX scores across every site scanned so far.\n- [Index API](https://qibbopress.com/api/v1/index): The same data as JSON, no key required.\n\n## Commercial\n- [Pricing](https://qibbopress.com/pricing): Free forever for single scans. Pro $29/month, Team $99, Agency $299.\n- [Badge](https://qibbopress.com/badge): A live score badge for your README or footer.\n\n## Policies\n- [Terms of service](https://qibbopress.com/terms)\n- [Privacy policy](https://qibbopress.com/privacy): No third-party analytics, no ad pixels, no data sales.\n- [Contact](https://qibbopress.com/contact): hello@axray.dev\n\n## Notes for agents\n- Our crawler identifies as `AXRAY/1.0 (+https://qibbopress.com/bot)`. Disallow `AXRAY` in robots.txt and we stop.\n- Report pages at `/report/{id}` are stable and safe to cite. `/s/{host}` always resolves to the\n  most recent public report for a host.\n- The rubric is versioned. Scores are comparable within a major version.\n","url":"https://qibbopress.com/llms.txt","sectionCount":6,"linkCount":13},"feeds":[],"wellKnown":{"/.well-known/security.txt":{"found":true,"status":200},"/.well-known/ai-plugin.json":{"found":false,"status":404},"/.well-known/mcp.json":{"found":true,"status":200},"/.well-known/apple-app-site-association":{"found":false,"status":404},"/.well-known/agent.json":{"found":false,"status":404}},"openapi":[],"mcp":{"found":true,"url":"https://qibbopress.com/.well-known/mcp.json"}},"priorities":[],"summary":"qibbopress.com 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."}