ARI-100 report · scanned 2026-11-11T23:15:58.746Z · 207 ms · engine ARI-100
Agent readiness — besthumanizer.app
49
Grade D — Largely invisible
Level L0 · Hidden
Domains
| Domain | Weight | Score | Passed | Scored |
|---|---|---|---|---|
| Reachability & Access | 20 | 82.2 | 9 | 15 |
| Render & Delivery | 10 | 44.2 | 4 | 10 |
| Structure & Semantics | 12 | 69.2 | 8 | 12 |
| Structured Data | 12 | 15.8 | 1 | 7 |
| Discovery Files | 14 | 27.4 | 4 | 18 |
| Agent Interfaces | 14 | 53.4 | 11 | 26 |
| Operability & Commerce | 10 | 0 | 0 | 1 |
| Trust & Authority | 8 | 41.7 | 3 | 10 |
Crawler reachability
Each agent was fetched with its own user-agent string and matched against robots.txt with RFC 9309 longest-match rules. A verdict is one of allowed, blocked, challenged, rate limited or unverifiable.
| Crawler | Platform | Role | Weight | HTTP | Verdict |
|---|---|---|---|---|---|
| OAI-SearchBot | ChatGPT search | search | 10 | 200 | allowed |
| ChatGPT-User | ChatGPT | user | 9 | 200 | allowed |
| Claude-SearchBot | Claude search | search | 10 | 200 | allowed |
| Claude-User | Claude | user | 9 | 200 | allowed |
| PerplexityBot | Perplexity | search | 10 | 200 | allowed |
| Perplexity-User | Perplexity | user | 9 | 200 | allowed |
| Googlebot | Google / AI Overviews | search | 10 | 200 | allowed |
| Google-Agent | Google AI Mode | user | 7 | 200 | allowed |
| Google-GeminiNotebook | Gemini | user | 5 | 200 | allowed |
| bingbot | Bing / Copilot | search | 8 | 200 | allowed |
| Applebot | Siri / Apple Intelligence | search | 6 | 200 | allowed |
| meta-webindexer | Meta AI | search | 5 | 200 | allowed |
| meta-externalfetcher | Meta AI | user | 5 | 200 | allowed |
| MistralAI-Index | Mistral Le Chat | search | 4 | 200 | allowed |
| MistralAI-User | Mistral Le Chat | user | 4 | 200 | allowed |
| Amzn-SearchBot | Alexa | search | 4 | 200 | allowed |
| Amzn-User | Alexa | user | 3 | 200 | allowed |
| DuckAssistBot | DuckDuckGo AI | search | 3 | 200 | allowed |
| YouBot | You.com | search | 3 | 200 | allowed |
| GPTBot | OpenAI training | train | 0 | 200 | allowed |
| ClaudeBot | Anthropic training | train | 0 | 200 | allowed |
| Google-Extended | Gemini training | train | 0 | 200 | allowed |
| Applebot-Extended | Apple training | train | 0 | 200 | allowed |
| CCBot | Common Crawl | train | 0 | 200 | allowed |
| Bytespider | ByteDance | train | 0 | 200 | allowed |
| meta-externalagent | Meta training | train | 0 | 200 | allowed |
| cohere-ai | Cohere training | train | 0 | 200 | allowed |
| AI2Bot | Allen Institute | train | 0 | 200 | allowed |
| Diffbot | Diffbot | other | 1 | 200 | allowed |
| Amazonbot | Amazon | train | 0 | 200 | allowed |
| GoogleOther | Google other | other | 1 | 200 | allowed |
| Google-CloudVertexBot | Vertex AI | train | 0 | 200 | allowed |
Failing checks, most recoverable first
59 checks are not passing. The first 3 fix prompts are free; the rest are part of the paid pack. Every prompt is written to be pasted into a coding agent verbatim.
Homepage content is in the raw HTML
render/ssr-home · weight 5 · fail · +5 recoverable · 55 chars of text, 0 H1 in raw HTML
Server-render the homepage of https://besthumanizer.app: ship at least 500 characters of real text and an H1 in the initial HTML response rather than after hydration (SSR/SSG, or prerender). Evidence: 55 chars of text, 0 H1 in raw HTML.
JSON-LD structured data is present
data/jsonld · weight 4 · fail · +4 recoverable · no JSON-LD
Add a JSON-LD block to https://besthumanizer.app/ with @context https://schema.org and a @type that matches the page. Evidence: no JSON-LD.
Structured data validates
data/jsonld-valid · weight 4 · fail · +4 recoverable · 0 block(s) parse cleanly
Fix the JSON-LD validation errors on https://besthumanizer.app/: 0 block(s) parse cleanly. Every block must parse and carry the required properties for its type.
A sitemap is declared and lists live URLs
discovery/sitemap · weight 4 · fail · +4 recoverable · no usable sitemap (200)
Publish a sitemap index on https://besthumanizer.app, reference it from robots.txt, and list only 200-status canonical URLs. Evidence: no usable sitemap (200).
robots.txt is reachable and valid
access/robots-valid · weight 3 · fail · +3 recoverable · robots.txt HTTP 200, 0 groups
Fix robots.txt at https://besthumanizer.app/robots.txt: it must return HTTP 200 with Content-Type text/plain, contain at least one "User-agent: *" group, and contain no HTML. Current evidence: robots.txt HTTP 200, 0 groups.
Unknown URLs return a real 404
render/real-404 · weight 3 · fail · +3 recoverable · unknown path returned 200 (soft 404)
Return a real 404 status for unknown paths on https://besthumanizer.app instead of a 200 soft-404 page, and include links to real pages in the body. Evidence: unknown path returned 200 (soft 404).
Primary content does not depend on client rendering
render/no-js-only · weight 3 · fail · +3 recoverable · empty mount node detected
Remove the JavaScript dependency for primary content on https://besthumanizer.app: the raw response must not be an empty mount node. Render on the server and hydrate. Evidence: empty mount node detected.
Exactly one H1 states the page subject
structure/one-h1 · weight 3 · fail · +3 recoverable · 0 H1: ""
Ensure exactly one non-empty H1 on https://besthumanizer.app/ that states the page subject; demote extra H1s to H2. Evidence: 0 H1: "".
Canonical points at itself
structure/canonical · weight 3 · fail · +3 recoverable · no canonical link
Add a self-referencing rel=canonical to https://besthumanizer.app/ that matches the URL actually served (https, final host, no tracking params). Evidence: no canonical link.
Declared type matches the page
data/jsonld-type · weight 3 · fail · +3 recoverable · no declared type
Declare the correct schema type on https://besthumanizer.app/ (no declared type) — Product for a product page, Article for editorial, Service for a service, FAQPage when the page answers questions.
Publisher entity is declared and linked
data/org-entity · weight 3 · fail · +3 recoverable · no Organization/Person node
Add an Organization (or Person) JSON-LD node on https://besthumanizer.app with name, url, logo, and sameAs links to the profiles the brand actually owns. Evidence: no Organization/Person node.
Content negotiation returns Markdown on request
discovery/md-negotiation · weight 3 · fail · +3 recoverable · Accept: text/markdown → text/html
Support Accept: text/markdown on https://besthumanizer.app: return the Markdown mirror with Content-Type text/markdown and add Vary: Accept so caches stay separate. Evidence: Accept: text/markdown → text/html.
Search works through a GET URL
commerce/site-search · weight 3 · fail · +3 recoverable · no GET search form
Make site search on https://besthumanizer.app work over GET with a ?q= parameter that returns results in the server HTML, so an agent can construct a search URL. Evidence: no GET search form.
AI bot policy is named, not inherited
access/bot-policy-deliberate · weight 2 · fail · +2 recoverable · 0 named user-agent groups
Name the AI crawlers explicitly in robots.txt for https://besthumanizer.app instead of relying on a wildcard, so each one has a deliberate policy. Evidence: 0 named user-agent groups.
Text-to-markup ratio is workable
render/text-ratio · weight 2 · fail · +2 recoverable · text/markup 2.8%
Raise the text-to-markup ratio on https://besthumanizer.app/ to at least 5%: trim wrapper divs and inline styles, and put the copy in plain elements. Evidence: text/markup 2.8%.
Sitemap entries carry real lastmod
discovery/sitemap-lastmod · weight 2 · fail · +2 recoverable · no lastmod
Add truthful <lastmod> values to the sitemap on https://besthumanizer.app from real content timestamps. Evidence: no lastmod.
llms.txt follows the published format
discovery/llms-conform · weight 2 · fail · +2 recoverable · H1 false, blockquote false, 0 H2, 0 links
Restructure /llms.txt on https://besthumanizer.app to the published format: H1, blockquote summary under it, H2 sections whose bullets are [name](url) with optional ": note" suffixes, and a ## Optional section for secondary links. Evidence: H1 false, blockquote false, 0 H2, 0 links.
HTTP Link headers point at machine resources
discovery/link-headers · weight 2 · fail · +2 recoverable · no Link header
Add Link response headers on https://besthumanizer.app pointing at its machine-readable resources: rel="describedby" to /llms.txt, rel="api-catalog" to /.well-known/api-catalog, rel="alternate" to the Markdown mirror. Evidence: no Link header.
Content usage preferences are declared
discovery/content-signal · weight 2 · fail · +2 recoverable · no Content-Signal line
Add a Content-Signal line to robots.txt on https://besthumanizer.app, e.g. "Content-Signal: search=yes, ai-input=yes, ai-train=no", so usage terms are machine-readable. Evidence: no Content-Signal line.
An OpenAPI description is published
interfaces/openapi · weight 4 · partial · +2 recoverable · openapi.json HTTP 200
Publish /openapi.json on https://besthumanizer.app (OpenAPI 3.1) describing every public endpoint, with operation summaries and example responses. Evidence: openapi.json HTTP 200.
An API catalog linkset is published
interfaces/api-catalog · weight 2 · fail · +2 recoverable · no linkset
Publish /.well-known/api-catalog on https://besthumanizer.app as an RFC 9727 linkset pointing at the API, its OpenAPI description and its docs. Evidence: no linkset.
The MCP card carries the fields a client needs
interfaces/mcp-card-fields · weight 2 · fail · +2 recoverable · 0/4 required groups in the card
Complete the MCP server card on https://besthumanizer.app: transport, endpoint URL, auth requirement, and every tool with a declared input schema and description. Evidence: 0/4 required groups in the card.
The API is easy to call from a model
interfaces/fc-friendly · weight 2 · fail · +2 recoverable · 0 described properties in the schema
Simplify the API surface on https://besthumanizer.app for function calling: flat named parameters, enums instead of free-text where possible, and a description on every field in the OpenAPI spec. Evidence: 0 described properties in the schema.
A developer portal is reachable from the homepage
interfaces/dev-portal · weight 2 · fail · +2 recoverable · no developer link
Link the developer docs from the homepage and main navigation of https://besthumanizer.app — one hop, not three. Evidence: no developer link.
The site tells an agent when to use it
interfaces/agent-instruction · weight 2 · fail · +2 recoverable · no when-to-use block
Add a when-to-use block to https://besthumanizer.app (in llms.txt, the MCP card or the agent manifest) stating what the agent is for, what it must not do, and one worked call. Evidence: no when-to-use block.
Claims are checkable
trust/sources · weight 2 · fail · +2 recoverable · 0 outbound source link(s)
Add outbound links to primary sources for the factual claims on https://besthumanizer.app/ — the operator documentation, study or specification, not another summary. Evidence: 0 outbound source link(s).
About and contact are reachable
trust/about-contact · weight 2 · fail · +2 recoverable · no about or contact link
Publish a reachable About and Contact page on https://besthumanizer.app and link both from the footer. Evidence: no about or contact link.
The organization node is complete
trust/org-completeness · weight 2 · fail · +2 recoverable · legalName missing
Complete the Organization schema on https://besthumanizer.app with legalName, address, contactPoint, logo and sameAs. Evidence: legalName missing.
/llms.txt exists and is served as text
discovery/llms-txt · weight 3 · partial · +1.5 recoverable · HTTP 200, 1967 bytes, text/html
Publish /llms.txt on https://besthumanizer.app as text/plain: a single H1, a one-line blockquote summary, then H2 sections of [name](url) links to the pages that answer the most common questions. Evidence: HTTP 200, 1967 bytes, text/html.
A public API answers without a human
interfaces/public-api · weight 3 · partial · +1.5 recoverable · no API declared
Expose at least one unauthenticated read endpoint on https://besthumanizer.app that returns the site's core facts as JSON, and document it in the OpenAPI spec. Evidence: no API declared.
A named, accountable author or publisher
trust/author · weight 3 · partial · +1.5 recoverable · no author signal
Show a named author or accountable publisher on https://besthumanizer.app/, with a link to an about page that establishes who they are. Evidence: no author signal.
Training policy is explicit
access/training-policy · weight 1 · fail · +1 recoverable · no explicit training policy
State a training policy on https://besthumanizer.app: either name CCBot / Google-Extended / Bytespider explicitly in robots.txt, or add a Content-Signal line (search=yes, ai-input=yes, ai-train=no). Evidence: no explicit training policy.
Snippets and large image previews are allowed
access/snippets-allowed · weight 2 · partial · +1 recoverable · snippet directives incomplete
On https://besthumanizer.app set "max-snippet:-1, max-image-preview:large" in the meta robots tag or X-Robots-Tag so assistants can quote the page. Evidence: snippet directives incomplete.
Correct Content-Type and charset
render/content-type · weight 2 · partial · +1 recoverable · content-type text/html
Set correct Content-Type headers on https://besthumanizer.app: text/html; charset=utf-8 for pages, text/plain; charset=utf-8 for robots.txt, llms.txt and markdown mirrors. Evidence: content-type text/html.
Headings are sequential and descriptive
structure/heading-order · weight 2 · partial · +1 recoverable · 0 skipped level(s), 0 H2(s)
Fix the heading outline on https://besthumanizer.app/: no skipped levels (H2 to H4), and make each H2 describe its section. Evidence: 0 skipped level(s), 0 H2(s).
Content is separated by landmarks
structure/landmarks · weight 2 · partial · +1 recoverable · no main/article element
Wrap the primary copy of https://besthumanizer.app/ in <main> or <article> and keep nav/header/footer outside it, so a parser can isolate the content. Evidence: no main/article element.
Published and modified dates are declared
data/dates · weight 2 · partial · +1 recoverable · no dates in schema
Add datePublished and dateModified to the schema on https://besthumanizer.app/, kept in sync with the visible date. Evidence: no dates in schema.
BreadcrumbList declares the page position
data/breadcrumb · weight 1 · fail · +1 recoverable · no BreadcrumbList
Add a BreadcrumbList to https://besthumanizer.app/ whose items match the visible breadcrumb. Evidence: no BreadcrumbList.
Sitemaps are split by content type
discovery/sitemap-segmented · weight 1 · fail · +1 recoverable · single sitemap
Split the sitemap on https://besthumanizer.app into an index plus child sitemaps per content type (pages, products, posts, images). Evidence: single sitemap.
A Markdown mirror of the page exists
discovery/md-mirror · weight 2 · partial · +1 recoverable · https://besthumanizer.app.md → HTTP 200
Publish a Markdown mirror for each page on https://besthumanizer.app: serve /<path>.md with Content-Type text/markdown and the same content as the HTML. Evidence: https://besthumanizer.app.md → HTTP 200.
HTML advertises its Markdown twin
discovery/md-alternate · weight 1 · fail · +1 recoverable · no <link rel=alternate type=text/markdown>
Add <link rel="alternate" type="text/markdown" href="/<path>.md"> to the head of https://besthumanizer.app/. Evidence: no <link rel=alternate type=text/markdown>.
DNS advertises agent endpoints
discovery/dns-aid · weight 1 · fail · +1 recoverable · no _agents TXT record
Publish a DNS discovery record for https://besthumanizer.app (a TXT record listing the agent endpoints the site exposes) so an agent learns the surface before fetching a page. Evidence: no _agents TXT record.
The page declares the index that covers it
discovery/describedby · weight 1 · fail · +1 recoverable · rel=describedby to the index
Add a rel="describedby" link to the covering /llms.txt from every page on https://besthumanizer.app so an agent can widen from one page to the index. Evidence: rel=describedby to the index.
Site actions are exposed to in-browser agents
interfaces/webmcp · weight 1 · fail · +1 recoverable · no WebMCP registration
Register the site's real actions (search, filter, add to cart) as WebMCP tools on https://besthumanizer.app so a browser agent can call them without guessing at the DOM. Evidence: no WebMCP registration.
A natural-language query endpoint answers
interfaces/nlweb-ask · weight 1 · fail · +1 recoverable · /ask → HTTP 200, text/html
Expose a natural-language query endpoint at https://besthumanizer.app/ask that accepts ?query= and returns JSON (answer plus result URLs), so an agent can ask the site directly instead of crawling it. Evidence: /ask → HTTP 200, text/html.
The interface is declared for agent-driven UI
interfaces/a2ui · weight 1 · fail · +1 recoverable · no A2UI declaration
Declare an agent-driven UI surface on https://besthumanizer.app: mark the page (or publish a manifest) as A2UI so a reviewing agent knows the controls are renderable from a declared schema rather than inferred from the DOM. Evidence: no A2UI declaration.
Rate limits are declared in headers
interfaces/rate-limit-headers · weight 1 · fail · +1 recoverable · no rate-limit headers
Emit RateLimit-Limit / RateLimit-Remaining / RateLimit-Reset (and Retry-After on 429) from the API on https://besthumanizer.app. Evidence: no rate-limit headers.
Writes are retry-safe
interfaces/idempotency · weight 1 · fail · +1 recoverable · Idempotency-Key documented
Accept an Idempotency-Key header on mutating endpoints of https://besthumanizer.app and document it, so an agent can retry without duplicating work. Evidence: Idempotency-Key documented.
Paid access is discoverable by an agent
interfaces/payment-negotiation · weight 1 · fail · +1 recoverable · x402 discovery HTTP 404
Make paid access discoverable on https://besthumanizer.app: return HTTP 402 with a machine-readable list of accepted payment options, or publish a machine-readable price list. Evidence: x402 discovery HTTP 404.
A visible publish or update date
trust/visible-date · weight 2 · partial · +1 recoverable · no visible date
Show a visible publish or last-updated date on https://besthumanizer.app/ that matches dateModified in the schema. Evidence: no visible date.
Every page is served over HTTPS
trust/https · weight 2 · partial · +1 recoverable · https origin, http:// answered 200
Serve https://besthumanizer.app only over HTTPS and 301 every http:// URL to https://. Evidence: https origin, http:// answered 200.
Baseline security headers are set
trust/security-headers · weight 1 · fail · +1 recoverable · HSTS no, nosniff no
Set Strict-Transport-Security, X-Content-Type-Options: nosniff and Referrer-Policy: strict-origin-when-cross-origin on https://besthumanizer.app. Evidence: HSTS no, nosniff no.
Infrastructure paths are excluded from crawl budget
access/crawl-budget · weight 1 · partial · +0.5 recoverable · no /api/ or /cdn-cgi/ exclusion
On https://besthumanizer.app exclude infrastructure from crawl budget: Disallow /api/ and /cdn-cgi/, then re-Allow /static/ and your badge/sitemap paths. Evidence: no /api/ or /cdn-cgi/ exclusion.
Text responses are compressed
render/compression · weight 1 · partial · +0.5 recoverable · no compression header relayed
Enable Brotli/gzip compression for HTML and JSON on https://besthumanizer.app. Evidence: no compression header relayed.
A Markdown sitemap lists the pages in one read
discovery/sitemap-md · weight 1 · partial · +0.5 recoverable · sitemap.md lists 0 link(s)
Publish /sitemap.md on https://besthumanizer.app: a Markdown list of the site's pages as [title](url), one line each, so an agent gets the whole map in one cheap request. Evidence: sitemap.md lists 0 link(s).
The skill file is substantive
discovery/agents-md-depth · weight 1 · partial · +0.5 recoverable · 0/3 of install, configuration, examples
Deepen /AGENTS.md on https://besthumanizer.app to include install steps, configuration, and at least one complete usage example. Evidence: 0/3 of install, configuration, examples.
A wildcard agent manifest is published
interfaces/agents-json · weight 1 · partial · +0.5 recoverable · 0 agent(s) enumerated
Publish /.well-known/agents.json on https://besthumanizer.app: a JSON document naming each agent or action the site accepts, with the URL to call and the input it expects. Evidence: 0 agent(s) enumerated.
Per-action permissions are declared
interfaces/agent-permissions · weight 1 · partial · +0.5 recoverable · permissions file has no scope/consent keys
Publish /.well-known/agent-permissions.json on https://besthumanizer.app mapping each action an agent may take to the scope it needs and whether a human must confirm it. Evidence: permissions file has no scope/consent keys.
The site publishes its own bot signing keys
access/web-bot-auth · weight 1 · partial · +0.5 recoverable · 0 signing key(s)
Publish a signing-key directory at https://besthumanizer.app/.well-known/http-message-signatures-directory so another site can verify requests this site's bots send. Evidence: 0 signing key(s).
Unlock the full fix pack
Pro shows every prompt, keeps the report on a schedule, and exposes the same scan over the API and MCP so your agent can close the loop without a human copying text.
Take the report with you
- /report/besthumanizer.app.json — cached JSON, 6-hour TTL
- /report/besthumanizer.app.md — Markdown mirror, text/markdown
- /badge/besthumanizer.app.svg — score badge
- /api/scan?url=… — the same number as JSON
A snapshot is not a guarantee: one scan is one request per surface at one moment. Re-scan after every deploy.