Scan summary

Needs work

https://kordu.tools

Scanned
CachedRe-check after fixes to refresh the report.
Pages scanned12 / 224
Priority fixes12
Checks passing37 / 52
74/100

Score verdict

Needs focused fixes

Level 3

See something off? Mention @kordugg on X.

AI Readiness

252/8
2 of 8 passing

Technical SEO

9813/17
13 of 17 passing

Security

856/10
6 of 10 passing

Performance

913/4
3 of 4 passing

Production Quality

605/13
5 of 13 passing

AI Readiness

Markdown negotiation

Needs work
Goal

Return a markdown version of HTML pages when agents request it via Accept: text/markdown so LLMs ingest your content cleanly.

Issue

No markdown response for Accept: text/markdown

How to fix

Enable Markdown for Agents so requests with `Accept: text/markdown` return a markdown version of your HTML response while HTML stays the default for browsers. Set `Content-Type: text/markdown` on the markdown variant and add `Vary: Accept` so caches differentiate the two representations. Verify with `curl -H "Accept: text/markdown" https://yoursite.com/`.

Agent Skills

Needs work
Goal

Publish a discoverable agent-skills index so AI agents can find and load your structured skill bundles.

Issue

Agent Skills index exists but does not list any SKILL.md paths

How to fix

Publish a skills discovery index at /.well-known/agent-skills/index.json (per the Agent Skills Discovery RFC v0.2.0) with a `$schema` field and a `skills` array. Each entry should have `name`, `type`, `description`, `url`, and a `sha256` digest of the SKILL.md so agents can verify integrity. Make sure each `url` resolves to a reachable SKILL.md.

MCP Server Card

Needs work
Goal

Serve an MCP Server Card so agents can discover your Model Context Protocol surface and connect with the right capabilities.

Issue

MCP server card is missing

How to fix

Serve an MCP Server Card at /.well-known/mcp/server-card.json with `serverInfo` (name, version), the transport endpoint URL, and the `capabilities` you support. Accept /.well-known/mcp.json as a fallback for clients on the legacy path. The schema is being standardized — track the active proposal at github.com/modelcontextprotocol/modelcontextprotocol/pull/2127.

OAuth discovery

Needs work
Goal

Expose OAuth/OIDC discovery metadata so agents can authenticate against your APIs programmatically.

Issue

OAuth or OIDC discovery metadata is missing or incomplete

How to fix

If your site has protected APIs, publish /.well-known/openid-configuration (for OpenID Connect) or /.well-known/oauth-authorization-server (for OAuth 2.0) with `issuer`, `authorization_endpoint`, `token_endpoint`, `jwks_uri`, and `grant_types_supported`. This lets agents discover how to authenticate without parsing your docs.

Resources

OAuth Protected Resource

Needs work
Goal

Publish OAuth Protected Resource metadata so agents know which auth servers issue valid tokens for your APIs.

Issue

OAuth protected resource metadata is missing

How to fix

Publish /.well-known/oauth-protected-resource (per RFC 9728) with your `resource` identifier, `authorization_servers` (the list of OAuth/OIDC issuer URLs that can issue tokens for this resource), and `scopes_supported`. This tells agents which auth server to obtain access tokens from and which scopes to request.

Resources

WebMCP

Needs work
Goal

Expose in-page tools to AI agents via the WebMCP browser API so agents can act on your site directly.

Issue

No WebMCP registration markers were detected

How to fix

Implement the WebMCP API by calling `navigator.modelContext.provideContext()` with tool definitions exposing your site's key actions to AI agents. Each tool needs `name`, `description`, `inputSchema` (JSON Schema), and an `execute` callback. Register tools at the points an agent could meaningfully use them — after page hydration, on route changes, or when permission state changes.

Resources

Technical SEO

Title Quality

Needs work
Goal

Every indexable page has exactly one descriptive, unique title that summarizes the page in 50-60 characters.

Issue

1 sampled page(s) have missing or multiple titles; 0 title quality warning(s) were detected.

How to fix

Add exactly one `<title>` tag to every indexable page, ideally 50–60 characters. Make each title descriptive and unique across the site so search engines can disambiguate them. For sectional pages, include the brand as a suffix (`Page Topic | Brand`) so social previews still attribute correctly.

Heading Structure

Watch
Goal

Each page has a clear heading hierarchy with one h1 and properly nested h2/h3 sections so structure conveys meaning to readers and crawlers.

Issue

0 H1 issue(s) and 2 skipped heading hierarchy warning(s) were detected.

How to fix

Use exactly one `<h1>` per page that conveys the page's subject, then nest `<h2>` sections beneath it and `<h3>` for sub-sections — never skip levels (h1 → h3) or wrap headings in `<div>` for styling. Headings communicate document structure to assistive tech and crawlers; write them as outline entries, not as styled text.

Affected pages (2)

Internal Link Quality

Watch
Goal

Internal links use descriptive anchor text and form a reachable graph so crawlers, readers, and AI agents can navigate context.

Issue

25 link crawlability or anchor-text warning(s) were detected.

How to fix

Use real `<a href="...">` elements for navigation — never `<div onclick>` or button-styled spans, which crawlers can't follow. Write descriptive anchor text that summarizes the destination (avoid "click here", "read more", or naked URLs). Keep important pages within ~3 clicks of the homepage so crawl depth doesn't starve them.

Hreflang Annotations

Info
Goal

Pages declare language and region alternates with hreflang annotations when content varies by locale, so search engines route the right version to the right reader.

Result

No hreflang annotations were detected in the sampled pages.

How to fix

On each localized page, add `<link rel="alternate" hreflang="...">` tags pointing to every language/region variant (including a self-reference). Use valid IANA language-region codes (e.g. `en-US`, `fr-FR`), absolute `href` URLs, and one `hreflang="x-default"` entry pointing to the version for unspecified locales. Each variant must reciprocally link back.

Security

Web Bot Auth

Needs work
Goal

Identify your own bot traffic with Web Bot Auth signed requests so receiving sites can verify and trust them.

Issue

Web Bot Auth HTTP Message Signatures directory is missing

How to fix

Publish a JWKS at /.well-known/http-message-signatures-directory containing the public keys you use to sign outgoing bot requests, so receiving sites can verify those requests via HTTP Message Signatures (RFC 9421). Rotate keys on a regular cadence and keep the previous key in the JWKS until in-flight requests have aged out.

HTTP Observatory

Watch
Issue

HTTP Observatory grade B+ with score 80.

How to fix

Tighten response headers and HTTP posture where Observatory reports gaps.

Cloudflare Challenge Signals

Info
Result

No Cloudflare Challenge Page marker was detected on the homepage response.

DNSSEC Signals

Info
Result

No DNSSEC DS or DNSKEY records were detected for the DNS zone.

Performance

CrUX Field Data

No field data

Chrome doesn't have enough real-user traffic for this site to publish field metrics yet — this isn't a failure on your side.

The Chrome User Experience Report only covers public origins with enough opted-in Chrome traffic. Smaller or newly launched sites typically appear after they accumulate sufficient sample size. Lab performance (PageSpeed Insights) below stays a useful proxy in the meantime.

Production Quality

ACP

Needs work
Goal

Publish Agentic Commerce Protocol discovery so agents can transact with your commerce surfaces without scraping.

Issue

No ACP discovery markers were detected

How to fix

Serve /.well-known/acp.json at the origin root with `protocol.name` set to `"acp"`, the `protocol.version`, `api_base_url`, supported transports, and `capabilities.services`. Agents can then discover your ACP implementation without first creating a checkout session.

Resources

MPP

Needs work
Goal

Publish Machine Payment Protocol metadata so agents can discover paid endpoints in your API.

Issue

No MPP discovery markers were detected

How to fix

Publish an OpenAPI document at /openapi.json with `x-payment-info` extensions on payable operations. Each operation should declare `intent` (charge or session), `method` (tempo, stripe, lightning, card), `amount`, and `currency`. Use the MPP SDK (`mppx` for TypeScript, `pympp` for Python) with framework middleware for Hono, Express, Next.js, or Elysia to handle the payment flow.

Resources

UCP

Needs work
Goal

Expose Universal Commerce Protocol metadata so agents can transact for content or services through a standard interface.

Issue

No UCP discovery markers were detected

How to fix

Serve /.well-known/ucp with your protocol version, declared `services`, supported `capabilities`, and reachable `endpoints`. Make sure any spec URLs and referenced JSON Schemas resolve so agents can validate against them at discovery time.

Resources

x402

Needs work
Goal

Support x402-style HTTP 402 payment flows so agents can pay for API access machine-to-machine.

Issue

No x402 discovery markers were detected

How to fix

Add x402 payment middleware to your API routes so AI agents can pay for access via HTTP. Use `@x402/express`, `@x402/hono`, or `@x402/next` middleware with a facilitator URL and wallet address. Protected routes will return HTTP 402 with payment requirements that agents can fulfill automatically.

Resources

Scan Coverage

Info
Result

Scanned 12 representative pages out of 224.

Cloudflare Error Diagnostics

Info
Result

No Cloudflare-generated error diagnostics were detected on the homepage response.