AX Rush

Prontezza IA di craighill.co

Rapporto del sito: 1 pagina misurata. Valutazione complessiva: Buono.

Punteggio del sito · craighill.co

Combina l'origine e 1 pagina misurata. Il report qui sotto dettaglia soltanto la pagina di origine.

craighill.co

Discreto · 52 controlli superati, 37 avvisi, 7 controlli non superati · 6,4s

Condividi questo rapporto con il team tecnico

Porta i risultati a chi può risolverli. Copia un riepilogo pronto per Slack, Teams o la prossima riunione.

Email

Questo rapporto è pubblico. Il team può aprirlo senza un account.

Contenuto

80/100

C'è sostanza che un agente possa leggere?

  • Homepage does not serve Markdown via content negotiation

    Serve a Markdown representation of your pages when agents request "Accept: text/markdown". Agents like Claude Code and Cursor ask for it, and Markdown cuts token usage by roughly 80% against HTML. Cloudflare ("Markdown for Agents") and Vercel can enable this without code changes.

  • No <link rel="alternate" type="text/markdown"> fallback found on the homepage

    If you cannot enable content negotiation, advertise a Markdown version with <link rel="alternate" type="text/markdown" href="/index.md"> so agents can discover it.

  • <title> is too short (9 chars): "Craighill"

    Lengthen the title to 20-70 characters with a clear topic indicator.

  • Meta description is short (34 chars)

    Expand the description to 70-160 characters with the page's main value proposition.

  • Canonical URL: https://craighill.co/

  • <html lang="en">

  • UTF-8 charset declared

  • Viewport meta present: "width=device-width,initial-scale=1"

  • 2 JSON-LD block(s) found

  • @context references schema.org

  • No @graph array (single-entity only)

    Use an @graph array to define multiple entities in one JSON-LD block: { "@context": "https://schema.org", "@graph": [...] }

  • Key types found: Organization, WebSite

  • No BreadcrumbList found

    Add a BreadcrumbList entity to help AI agents understand your site navigation hierarchy.

  • No author declared in structured data

    An assistant deciding whether to cite a page weighs where it came from. Add author as a Person or Organization, not a bare string.

  • 3 sameAs link(s) tie your entity to external identifiers

  • No dateModified or datePublished in structured data

    Assistants weigh recency when they answer time-sensitive questions, and a page with no date cannot be weighed at all. Add dateModified to anything that changes.

  • 85/86 interactive elements have an accessible name

  • 3/3 form controls are labelled

  • 1/1 iframes have no title

    An untitled frame is an opaque region. A title tells an agent whether it is worth entering.

  • 58/61 images, frames or videos have no declared dimensions

    Undeclared dimensions shift the layout as media loads. An agent working from a screenshot clicks where the button was a moment ago. Set width and height, or aspect-ratio.

  • Method note: this reads markup, not a rendered accessibility tree

  • Server-rendered content detected (647 words, 4210 chars of visible text)

  • Markup-heavy page (text is 2.9% of structural markup)

    The visible text clears the content thresholds, so agents can read this page. Trimming wrapper markup would still make it cheaper to consume.

  • Semantic landmarks present (main, section, header, footer, nav)

  • 3 <h1> headings found (recommend exactly 1)

    Use a single <h1> per page to clearly mark the primary topic. Demote secondary headings to <h2>+.

  • 60/61 <img> tags have alt attributes

Accesso

97/100

Un agente riesce a recuperarla?

  • Response compressed with Brotli (br)

  • Cache validator present (ETag)

  • Conditional request returned 200 instead of 304 Not Modified

    The server advertises a cache validator but does not honor If-None-Match / If-Modified-Since. Configure it to return 304 when the validator matches, so crawlers avoid re-downloading unchanged pages.

  • Homepage is on the large side (604.2 KB decompressed)

    Consider trimming inlined payloads to reduce crawl cost.

  • Roughly 1,053 tokens of content in 154,483 tokens of response (99% markup)

    An agent pays to receive the markup and then discards it. Serving Markdown on Accept negotiation is the direct fix.

  • Homepage responded in 191ms

  • Site is served over HTTPS

  • HTTP requests redirect to HTTPS

  • HSTS max-age is short (7889238s = ~91 days)

    Use at least max-age=15768000 (~6 months); preload list submission requires max-age=31536000 (1 year).

  • HSTS does not include subdomains

    Add includeSubDomains to apply HSTS across api., docs., etc. Required for preload list submission.

  • HSTS lacks the preload directive

    Add preload (and ensure max-age >= 31536000 + includeSubDomains) and submit the domain at https://hstspreload.org for browser-built-in HTTPS enforcement.

  • All 10 core AI crawler user-agents receive the same page as a regular client

  • Missing pages return 404

  • Homepage answers without a redirect

  • HEAD requests are supported

  • Content-Type: text/html with charset

  • Homepage is indexable

  • No directive restricts how AI assistants may use this page

Individuabilità

78/100

Un agente trova ciò che pubblichi?

  • No AI meta tags (ai:*) found

    Add AI meta tags to your HTML <head>: <meta name="ai:summary" content="Brief description">, <meta name="ai:content_type" content="website">, <meta name="ai:author" content="Your Name">.

  • No rel="alternate" link to llms.txt in HTML

    Add to your <head>: <link rel="alternate" type="text/plain" href="/llms.txt" title="LLM-optimized content">

  • No rel="alternate" link to the Agent Card in HTML

    Add to your <head>: <link rel="alternate" type="application/json" href="/.well-known/agent-card.json" title="Agent Card">

  • No rel="me" identity links found

    Add rel="me" links to verify your identity across platforms: <link rel="me" href="https://github.com/yourname">, <link rel="me" href="https://twitter.com/yourname">.

  • OpenGraph required tags present (og:title, og:description, og:url, og:type)

  • Twitter Card required tags present (twitter:card, twitter:title, twitter:description)

  • Twitter Card recommended tags missing: twitter:image

    Add twitter:image for richer previews.

  • /robots.txt exists

  • No core AI crawlers explicitly configured

    Add User-agent entries for core AI crawlers in your robots.txt. For each crawler, add: User-agent: <name> followed by Allow: / on the next line.

  • Sitemap directive present

  • No Content-Signal directive found (optional)

    Declare how crawlers may use your content after access with the Content Signals Policy, e.g.: Content-Signal: search=yes, ai-train=no. Known signals: search, ai-input, ai-train, plus the optional use=immediate|reference|full. Generate yours at contentsignals.org.

  • 0/57 known AI crawlers have explicit rules

    Add explicit User-agent entries for more AI crawlers to maximize discoverability.

  • 5/7 security headers present

  • Link header present but does not reference AI discovery files

    Add AI discovery entries to your Link header: Link: </llms.txt>; rel="alternate"; type="text/plain", </.well-known/agent-card.json>; rel="alternate"; type="application/json"

  • No machine-readable discovery relations beyond llms.txt and the Agent Card

    Advertise what you publish with Link relations so agents stop guessing paths. Add the ones that apply, for example: Link: </llms.txt>; rel="describedby", </.well-known/api-catalog>; rel="api-catalog". Informational in 3.x: this does not affect your score.

  • /llms.txt exists

  • /llms.txt Content-Type OK (text/markdown)

  • H1 heading: "Agent Instructions — Craighill"

  • No blockquote description found ("> ...")

    Add a blockquote description after the H1 heading, e.g.: > A brief summary of your site for AI agents.

  • 5 section heading(s) found

  • 5 link(s) found

  • /llms-full.txt also available (bonus)

  • No rel="describedby" link to llms.txt

    llms.txt v2 uses this relation so a page can name the file that covers it. Add <link rel="describedby" href="/llms.txt"> or the equivalent Link header, so an agent that landed on a deep page does not have to guess that an index exists.

  • 2 duplicate link(s) in llms.txt

    Each URL should appear once. Duplicates spend an agent’s budget re-reading what it already has.

  • 3 sampled link(s) resolve

  • 1 sampled link(s) redirect

    Point llms.txt at the final URL. Each redirect is a round trip the agent pays for on every visit.

  • No per-page Markdown mirror found

    llms.txt v2 documents appending .md to a URL for its Markdown version. The index tells an agent which pages exist; the mirrors are what make reading them cheap.

  • Consumer note: llms.txt is read by coding agents, not by search

  • Sitemap located: https://craighill.co/sitemap.xml

  • Content-Type is XML (application/xml)

  • Sitemap-index references 5 child sitemap(s)

  • 3/3 sample child sitemap(s) reachable

  • Sample yielded 118 URL(s) across 3 child(ren)

  • Newest <lastmod> is recent (0 day(s) ago)

Protocolli

7/100

Che cosa può chiamare un agente?

  • /.well-known/agent-card.json not found

    This site offers something an agent could call, but nothing tells an agent what. Publish an A2A Agent Card at /.well-known/agent-card.json. A minimal 1.0 card needs name, description, version, capabilities, supportedInterfaces, defaultInputModes, defaultOutputModes and skills. Spec: https://a2a-protocol.org/latest/specification/

  • API surface present but no machine-readable description found

    The API exists; nothing describes it in a form an agent can read, so using it requires a human to read your documentation first. Serve an OpenAPI description at /openapi.json and advertise it with Link: </openapi.json>; rel="service-desc". For several APIs, publish an RFC 9727 catalog.

  • No agent resource catalog found

    A catalog is one document listing everything an agent can call here — agent cards, MCP servers, APIs, skills — so a client stops probing four conventions to find out. Worth publishing once you have more than one of those. Informational: both ai-catalog.json and ard.json are still drafts, so this never affects your score.

  • No Agent Skills published

    This site has documentation, so it has procedures worth teaching. A skill is a SKILL.md an agent installs and follows: setup steps, argument shapes, the mistakes to avoid. Publish one per task at /.well-known/agent-skills/{name}/SKILL.md and list them in /.well-known/agent-skills/index.json.

  • Protected-resource metadata published (RFC 9728)

  • 1 authorization server(s) named

  • Authorization server https://shopify.com publishes no discovery metadata

    The chain stops here: an agent knows which server to ask but not which endpoints it has. Publish RFC 8414 or OpenID discovery metadata.

  • UCP profile published at /.well-known/ucp

  • UCP version 2026-08-25

  • 1 commerce service(s) declared: dev.ucp.shopping

  • 2 declared schema URL(s) resolve

  • UCP profile declares no payment handlers

    Without a payment handler an agent can read your catalog but cannot complete a purchase. Declare the handlers you accept.

  • UCP profile declares no signing keys

    Publish the public keys an agent uses to verify your responses. Money is moving; identity should not rest on DNS alone.

  • 4 form(s) on the page, none declared as agent tools

    A declared form is called by an agent rather than driven pixel by pixel. Add toolname and tooldescription to the forms worth automating — search, filter, subscribe — and toolparamdescription to each field.

  • No MCP server — MCP discovery does not apply to this site

Criteri

18/100

Quali diritti d'uso sono dichiarati?

  • /.well-known/security.txt not found

    Create a /.well-known/security.txt file per RFC 9116. At minimum, include Contact: and Expires: fields. See https://securitytxt.org/ for a generator.

  • No RSL license discovery found

    Declare machine-readable licensing terms for your content with Really Simple Licensing. Add to robots.txt: License: https://your-site.com/license.xml — then publish the RSL document. See https://rslstandard.org.

  • No machine-readable usage policy declared

    State your terms where they can be read without a lawyer. The lowest-effort option is a Content-Signal line in robots.txt: Content-Signal: search=yes, ai-input=yes, ai-train=no. Absence is neutral, not permission — but it also gives you nothing to point at.

Dettagli tecnici

Motore
axrush-engine@6.0.0
Scansionato
10 set 2026, 19:05:25 UTC
Durata
6375 ms
Check eseguiti
26

Trasforma questo rapporto in miglioramenti continui

Dai al team rapporti completi, correzioni prioritarie e monitoraggio per mantenere i miglioramenti dopo ogni rilascio.

Leggere questo report tramite l'API o il server MCP