agentspeed.

hub.docker.com

r2026.11.0sha fd2d068us-eastscan bbc36aa0checked 2026-08-24 11:08 UTC
Compare this site →Simulate an agent task →

Publicly-generated scan via agentspeed.com. Not affiliated with hub.docker.com.

hub.docker.com is solidly ready for AI agents (composite 86, grade B). Strongest sub-score: performance (100). Weakest: readability (77). The most actionable gaps detected: no markdown content negotiation.

Agent preview

What an AI agent fetching this site today is likely to understand. Each row is backed by a real signal that ran on this scan, or labels itself “not detected”. We never invent values.

confidence · 3/5 fields resolvedmedium
B
grade86/100
8 findings · 1 critical · 7 medium
discoverability86
readability77
structured_data80
actionability89
performance100

Based on 37 checks · 26 deterministic · 10 heuristic · 1 model-assisted. see /rubric.

Governance & crawler policy

How hub.docker.com declares its policy toward AI agents and crawlers. These rows are a presentation view over checks already counted under Discoverability and Readability, so they don’t add to the composite a second time.

Has robots.txtrobots_txt.presentpass
Allows well-known agentsrobots_txt.allows_known_agentswarn
Declares Content-Signalrobots_txt.content_signalspass
Supports Web Bot Authdiscoverability.web_bot_authskip
Cookie consent does not block contentauth.cookie_consent_blocks_contentwarn
Crawler access
robots.txt-derived snapshotwarn

robots.txt partially restricts AI agents: some pass, some are blocked. Run the live matrix below for a per-agent verdict.

For a live UA-by-UA fetch matrix (status, redirects, content similarity, cloaking detection across GPTBot, ChatGPT-User, ClaudeBot, Claude-User, PerplexityBot, Google-Extended, Googlebot, Bingbot, CCBot, and a default browser), run the matrix tool against this domain.

Run live crawler matrix →Fix robots.txt →
Top fixes (8)

Findings grouped by severity. Critical and high-severity items move the composite the most; medium and low items are quality improvements. Each finding links to a full remediation page.

Critical1

1 required-field error(s).

Medium7
weight 2

1 access agent(s) blocked: Amazonbot.

Consent modal detected (cookielaw.org); content still visible.

No HTTP Link: response headers.

weight 1

Visible text is 1.3% of HTML weight (6972/516862 bytes).

Requests with `Accept: text/markdown` return a markdown representation of the page (Markdown content negotiation).

Heading hierarchy is well-formed (one H1, no skipped levels).

weight 0

The page exposes WebMCP (in-browser Model Context Protocol) so on-page agents can invoke tools without leaving the tab.

Beyond the scan

Running AI agents of your own? AgentSpeed also monitors them in production: every run, its latency, cost, and failures, with alerts when something breaks. Free for 10,000 events a month, no credit card.

Start watching free →How it works

first scan. History starts after the next scan.

Top findings (8)
critical
Failing: structured_data.validates
structured_data.validates
expand ›
What we looked for

JSON-LD validates against the declared schema.org type.

What we found
{
  "warns": 0,
  "errors": 1,
  "firstError": {
    "path": "$.name",
    "message": "WebSite requires \"name\".",
    "severity": "error"
  }
}
Remediation

1 required-field error(s). First: WebSite requires "name".

full remediation →
See the spechttps://schema.org
Cite this findingagentspeed.com/score/hub.docker.com/scan/bbc36aa0-b219-4b41-8404-3274da47a97f#structured_data.validates
medium
Warning: robots_txt.allows_known_agents
robots_txt.allows_known_agents
expand ›
What we looked for

robots.txt does not disallow answer-time AI access agents (ChatGPT-User, OAI-SearchBot, Claude-User, Claude-SearchBot, PerplexityBot, Perplexity-User, YouBot, Amazonbot). Training-data crawler blocks (GPTBot, CCBot, Google-Extended, …) are reported as informational and never fail the check.

Fix this issue
Generated fixreplace filehttps://hub.docker.com/robots.txt

Your current /robots.txt disallows this AI agent: Amazonbot. Replace your robots.txt with the version below to explicitly allow them while keeping any custom rules you've added below the wildcard block.

# robots.txt for hub.docker.com
# Explicitly allow well-known AI agents that were previously blocked.
# Adjust or remove specific agents as your policy requires.

User-agent: *
Allow: /

User-agent: Amazonbot
Allow: /

Sitemap: https://hub.docker.com/sitemap.xml
save as https://hub.docker.com/robots.txt
  • This snippet replaces your existing robots.txt. Merge any custom Disallow rules you have today below the wildcard block.
  • Cloudflare and a few CDNs cache robots.txt aggressively, so purge the cache after deploy to confirm AI agents see the change.
What we found
{
  "blocked": [
    "Amazonbot"
  ],
  "declaredMarkets": [],
  "regionalBlocked": [],
  "trainingBlocked": [
    "GPTBot",
    "ClaudeBot",
    "Google-Extended",
    "Applebot-Extended",
    "Bytespider",
    "CCBot",
    "Meta-ExternalAgent"
  ]
}
Remediation

1 access agent(s) blocked: Amazonbot. These keep your site out of AI answers. 7 training-data crawler(s) blocked (GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, Bytespider, CCBot, Meta-ExternalAgent), a licensing choice, not scored.

full remediation →
See the spechttps://datatracker.ietf.org/doc/html/rfc9309
Cite this findingagentspeed.com/score/hub.docker.com/scan/bbc36aa0-b219-4b41-8404-3274da47a97f#robots_txt.allows_known_agents
medium
Failing: discoverability.link_headers
discoverability.link_headers
expand ›
What we looked for

HTTP `Link:` response headers carry useful relations (canonical, alternate, describedby) that agents consume without parsing HTML.

What we found
{}
Remediation

No HTTP Link: response headers. Emit canonical/alternate/describedby relations so HEAD-only or stream-rendering agents get them without parsing HTML.

full remediation →
See the spechttps://datatracker.ietf.org/doc/html/rfc8288
Cite this findingagentspeed.com/score/hub.docker.com/scan/bbc36aa0-b219-4b41-8404-3274da47a97f#discoverability.link_headers
medium
Failing: readability.markdown_negotiation
readability.markdown_negotiation
expand ›
What we looked for

Requests with `Accept: text/markdown` return a markdown representation of the page (Markdown content negotiation).

What we found
{
  "status": 200
}
Remediation

Accept: text/markdown returns HTML, not markdown. Serve a markdown variant of primary content when requested; agents summarize and cite it more reliably.

full remediation →
See the spechttps://www.rfc-editor.org/rfc/rfc7763.html
Cite this findingagentspeed.com/score/hub.docker.com/scan/bbc36aa0-b219-4b41-8404-3274da47a97f#readability.markdown_negotiation
medium
Failing: content.text_ratio
content.text_ratio
expand ›
What we looked for

Visible text makes up at least 15% of the rendered DOM weight.

What we found
{
  "ratio": 0.01348909380066633,
  "htmlBytes": 516862,
  "textBytes": 6972,
  "styleBytes": 114376,
  "markupBytes": 325620,
  "scriptBytes": 69894
}
Remediation

Visible text is 1.3% of HTML weight (6972/516862 bytes). 14% of the document is inline script, 63% is markup.

full remediation →
Cite this findingagentspeed.com/score/hub.docker.com/scan/bbc36aa0-b219-4b41-8404-3274da47a97f#content.text_ratio
medium
Warning: content.headings_hierarchy
content.headings_hierarchy
expand ›
What we looked for

Heading hierarchy is well-formed (one H1, no skipped levels).

What we found
{
  "skips": 10,
  "total": 58,
  "issues": [
    "10 skipped level(s)"
  ],
  "h1Count": 1
}
Remediation

Heading issues: 10 skipped level(s).

full remediation →
See the spechttps://www.w3.org/WAI/tutorials/page-structure/headings/
Cite this findingagentspeed.com/score/hub.docker.com/scan/bbc36aa0-b219-4b41-8404-3274da47a97f#content.headings_hierarchy
medium
Warning: auth.cookie_consent_blocks_content
auth.cookie_consent_blocks_content
expand ›
What we looked for

A cookie-consent modal does not cover or block the primary content on first load.

What we found
{
  "matchedScripts": [
    "cookielaw.org"
  ],
  "matchedSelectors": []
}
Remediation

Consent modal detected (cookielaw.org); content still visible. Verify the modal does not block first-paint for screenshot agents.

full remediation →
Cite this findingagentspeed.com/score/hub.docker.com/scan/bbc36aa0-b219-4b41-8404-3274da47a97f#auth.cookie_consent_blocks_content
medium
Failing: actionability.web_mcp
actionability.web_mcp
expand ›
What we looked for

The page exposes WebMCP (in-browser Model Context Protocol) so on-page agents can invoke tools without leaving the tab.

What we found
{}
Remediation

No WebMCP detected. On pages with first-class actions (cart, support, account), embed a WebMCP server so on-page agents invoke tools directly.

full remediation →
Cite this findingagentspeed.com/score/hub.docker.com/scan/bbc36aa0-b219-4b41-8404-3274da47a97f#actionability.web_mcp
Checks (37)
Every check that ran. Switch to ELI5 for plain-language explanations.
checkstatusweightduration
actionability.web_mcpfail1.001ms
content.text_ratiomin text ratio = 15%fail1.0056ms
discoverability.link_headersfail1.000ms
readability.markdown_negotiationfail1.000ms
structured_data.validatesfail2.000ms
auth.cookie_consent_blocks_contentdetector = consent overlay heuristicwarn2.0085ms
content.headings_hierarchyrule = single H1, no skipped levelswarn1.00181ms
robots_txt.allows_known_agentswarn2.001ms
actionability.agent_skillsskip1.000ms
actionability.commerce_protocolsskip1.000ms
coherence.jsonld_name_matches_visibleskip1.000ms
coherence.jsonld_price_matches_visibleskip2.000ms
discoverability.api_catalogskip1.000ms
discoverability.mcp_server_cardskip1.000ms
discoverability.oauth_authorization_serverskip1.000ms
discoverability.oauth_protected_resourceskip1.000ms
discoverability.web_bot_authskip1.000ms
operability.filters_addressableskip2.0038ms
performance.full_render_msthreshold = 4sskip1.000ms
auth.paywall_or_login_wall_on_landingdetector = paywall/login-wall heuristicpass2.0079ms
coherence.language_declared_matches_contentdetector = stopword/script profile, >=40 words, WARN-onlypass1.003ms
content.js_required_for_primary_contentdetector = no-JS visibility heuristicpass2.001ms
journey.primary_probemodel-assistedpass2.001280ms
llms_txt.presentpass0.000ms
markup.canonicalpass2.0040ms
markup.languagepass1.000ms
markup.meta_descriptionpass2.0083ms
markup.titlepass2.0060ms
operability.primary_action_in_dompass2.0052ms
performance.payload_kbthreshold = 3MBpass1.000ms
performance.ttfb_msthreshold = 800mspass1.000ms
reachability.statuspass2.000ms
robots_txt.content_signalspass1.000ms
robots_txt.presentpass1.000ms
sitemap.presentpass2.000ms
structured_data.jsonld_presentpass2.000ms
structured_data.type_coveragematch = type-to-purpose inferencepass1.001ms

Sorted failures first. Every row was produced by the scan on 2026-08-24 11:08 UTC. Each check is defined in /rubric §6.

Reproduce this scan

This scan is content-addressable. Download the JSON and confirm that the composite matches score(rubric, checks) for the referenced rubric. Re-running the command below executes against the current rubric; scores agree within ±1 point unless the target site changed.

↓ Download scan.json→ View rubric
rubricr2026.11.0
rubric shafd2d068
regionus-east
user-agentAgentSpeedBot/1.0
viewport1280x800
finished2026-08-24T11:08:15Z
POST /api/scans: run a fresh scan
curl -sS -X POST https://agentspeed.com/api/scans \
  -H 'content-type: application/json' \
  -d '{"url": "https://hub.docker.com"}'
Download this scan: scan.json (cache-forever, immutable). Includes per-check raw values, rubric sha, and the full finding list with remediation.
What AgentSpeed scanned

What AgentSpeed scanned

Every scan is based on public website behaviour, fetched from a public client, no auth, no plugins, no private data. The nine signals below are what AgentSpeed reads about your site.

Embed an AgentSpeed badge

Show your AgentSpeed score in your README, footer, or sales deck. Four variants below; each is a static SVG served from /badge/<your-domain> with no JS, no tracking, no API calls. Documentation: /docs/badge.

Dark220×32

Default. Brand mark + grade + score on a dark base. Pairs well with most footers and READMEs.

AgentSpeed B 86/100
HTML snippet
<a href="https://agentspeed.com/score/hub.docker.com" target="_blank" rel="noopener">
  <img src="https://agentspeed.com/badge/hub.docker.com?variant=dark" alt="AgentSpeed grade B for hub.docker.com" width="220" height="32" />
</a>
Markdown snippet
[![AgentSpeed grade B for hub.docker.com](https://agentspeed.com/badge/hub.docker.com?variant=dark)](https://agentspeed.com/score/hub.docker.com)
Light220×32

Same dimensions as the dark variant; light background with dark text. For light-mode docs and pages.

AgentSpeed B 86/100
HTML snippet
<a href="https://agentspeed.com/score/hub.docker.com" target="_blank" rel="noopener">
  <img src="https://agentspeed.com/badge/hub.docker.com?variant=light" alt="AgentSpeed grade B for hub.docker.com" width="220" height="32" />
</a>
Markdown snippet
[![AgentSpeed grade B for hub.docker.com](https://agentspeed.com/badge/hub.docker.com?variant=light)](https://agentspeed.com/score/hub.docker.com)
Compact130×32

Brand mark + grade only. Use when you have horizontal space constraints.

AgentSpeed B
HTML snippet
<a href="https://agentspeed.com/score/hub.docker.com" target="_blank" rel="noopener">
  <img src="https://agentspeed.com/badge/hub.docker.com?variant=compact" alt="AgentSpeed grade B for hub.docker.com" width="130" height="32" />
</a>
Markdown snippet
[![AgentSpeed grade B for hub.docker.com](https://agentspeed.com/badge/hub.docker.com?variant=compact)](https://agentspeed.com/score/hub.docker.com)
Score-only60×32

Just the grade chip. Smallest variant, fits inline next to a heading or metric.

A·S B
HTML snippet
<a href="https://agentspeed.com/score/hub.docker.com" target="_blank" rel="noopener">
  <img src="https://agentspeed.com/badge/hub.docker.com?variant=score-only" alt="AgentSpeed grade B for hub.docker.com" width="60" height="32" />
</a>
Markdown snippet
[![AgentSpeed grade B for hub.docker.com](https://agentspeed.com/badge/hub.docker.com?variant=score-only)](https://agentspeed.com/score/hub.docker.com)
Certified250×32

Shows your certification tier while your certificate is valid; falls back to the score badge when it is not.

AgentSpeed B 86/100
HTML snippet
<a href="https://agentspeed.com/score/hub.docker.com" target="_blank" rel="noopener">
  <img src="https://agentspeed.com/badge/hub.docker.com?variant=certified" alt="AgentSpeed grade B for hub.docker.com" width="250" height="32" />
</a>
Markdown snippet
[![AgentSpeed grade B for hub.docker.com](https://agentspeed.com/badge/hub.docker.com?variant=certified)](https://agentspeed.com/score/hub.docker.com)
FAQ
What does this AgentSpeed score mean?expand ›

The composite is a 0–100 weighted average of five sub-scores measuring how well a website performs for AI agents (ChatGPT, Claude, Perplexity, Operator, etc.). The full rubric (every check, weight, and grade band) is published at /rubric.

Is this an official score from the website owner?expand ›

No. AgentSpeed scores are publicly generated against hub.docker.com's public surfaces (robots.txt, sitemap, the landing URL, /llms.txt, /.well-known/* discovery endpoints). AgentSpeed is not affiliated with or endorsed by hub.docker.com. The score reflects what we observed at scan time, nothing more.

How often is this site scanned?expand ›

Public scans happen when someone submits the URL on the homepage. Once a domain is claimed in the (forthcoming) monitoring tier, the site is rescanned daily and a history is kept. For now, every public score reflects the most recent submission.

How can this score be improved?expand ›

Each failing check on the page expands to a remediation step with the exact change to make. The "Top fixes" section ranks them by score impact. Most domains move 5–10 points by adding an llms.txt, allowing well-known agent user-agents in robots.txt, and emitting JSON-LD that matches the page purpose.

What rubric version was used?expand ›

This scan was computed against rubric r2026.11.0. The rubric is versioned and immutable: historical scans always render against the rubric they were computed on, even after a new version ships. The current rubric and its full changelog are at /rubric.