Score verdict
High-priority gaps
Level 1
AI Readiness
Technical SEO
Security
Performance
Production Quality
Report brief
What stands out
mathei.com scored 42/100 on this public readiness scan. 2 pages were checked from 2 discovered URLs.
Top findings
- Needs workMarkdown negotiationAI Readiness
No markdown response for Accept: text/markdown
- Needs workIndexability DirectivesTechnical SEO
1 sampled public page(s) are marked noindex.
/cdn-cgi/content?id=8v0xVYYGXI5F27ca5gJy3KOrUmCckyoaymef2Osnbeg-1777297850.0121-1.0.1.1-JAoK5MdZIw8DhEStPPVUvBgJVbAzMODRptGXpjOKoaM - Needs workMeta Description QualityTechnical SEO
2 sampled page(s) have missing or multiple meta descriptions; 0 description quality warning(s) were detected.
mathei.com, /cdn-cgi/content?id=8v0xVYYGXI5F27ca5gJy3KOrUmCckyoaymef2Osnbeg-1777297850.0121-1.0.1.1-JAoK5MdZIw8DhEStPPVUvBgJVbAzMODRptGXpjOKoaM - Needs workSitemapTechnical SEO
No valid sitemap was discovered
- Needs workTitle QualityTechnical SEO
1 sampled page(s) have missing or multiple titles; 0 title quality warning(s) were detected.
mathei.com
Category context
- AI Readiness: 0/100
- Technical SEO: 59/100
- Security: 48/100
- Performance: 100/100
- Production Quality: 40/100
AI Readiness
Markdown negotiation
Return a markdown version of HTML pages when agents request it via Accept: text/markdown so LLMs ingest your content cleanly.
No markdown response for Accept: text/markdown
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/`.
A2A Agent Card
Publish an A2A Agent Card so other agents can discover your agent-to-agent capabilities and supported interfaces.
A2A Agent Card is missing
Publish /.well-known/agent-card.json describing your agent: `name`, `description`, `endpoints`, `version`, and a complete `supportedInterfaces` array with the protocols and message types you accept. Include a `capabilities` block so calling agents can negotiate, and keep the URL stable across deploys — agents cache discovery responses.
Agent Skills
Publish a discoverable agent-skills index so AI agents can find and load your structured skill bundles.
Agent Skills index is missing
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.
API Catalog
Publish an API catalog at /.well-known/api-catalog so agents can discover your API documentation and schemas without crawling.
API catalog is missing
Create /.well-known/api-catalog returning `application/linkset+json` with a `linkset` array. Each entry should include an `anchor` URL for the API and link relations like `service-desc` (OpenAPI spec), `service-doc` (human docs), and `status` (health endpoint). See RFC 9727 Appendix A for examples and RFC 9264 for the linkset format.
MCP Server Card
Serve an MCP Server Card so agents can discover your Model Context Protocol surface and connect with the right capabilities.
MCP server card is missing
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
Expose OAuth/OIDC discovery metadata so agents can authenticate against your APIs programmatically.
OAuth or OIDC discovery metadata is missing or incomplete
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.
OAuth Protected Resource
Publish OAuth Protected Resource metadata so agents know which auth servers issue valid tokens for your APIs.
OAuth protected resource metadata is missing
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.
WebMCP
Expose in-page tools to AI agents via the WebMCP browser API so agents can act on your site directly.
No WebMCP registration markers were detected
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.
Technical SEO
Indexability Directives
Robots meta tags and X-Robots-Tag headers align with which pages should actually be crawled and ranked.
1 sampled public page(s) are marked noindex.
Audit `<meta name="robots">` tags and `X-Robots-Tag` response headers across the site. Remove `noindex` and `nofollow` from any page meant to appear in search, especially on staging templates that leaked into production. For pages that genuinely should be excluded (admin, internal tools), keep the directive but verify the URL isn't also linked from a sitemap.
Meta Description Quality
Every indexable page has a single meta description (50-180 chars) that previews the page accurately for search and social.
2 sampled page(s) have missing or multiple meta descriptions; 0 description quality warning(s) were detected.
Add one `<meta name="description">` tag to each important indexable page — 50–180 characters of distinct, human-readable copy that previews the page accurately. Avoid copying the title, padding with keywords, or duplicating descriptions across pages; search engines either rewrite duplicates or skip them entirely.
Sitemap
Maintain a sitemap of canonical URLs and reference it from robots.txt so crawlers find new and changed pages.
No valid sitemap was discovered
Generate /sitemap.xml listing your canonical URLs (split into a sitemap index if you exceed 50,000 URLs or 50 MB). Refresh it whenever you publish, retire, or rename a page, and reference it from /robots.txt with a Sitemap: directive so crawlers find it without guessing.
Title Quality
Every indexable page has exactly one descriptive, unique title that summarizes the page in 50-60 characters.
1 sampled page(s) have missing or multiple titles; 0 title quality warning(s) were detected.
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
Each page has a clear heading hierarchy with one h1 and properly nested h2/h3 sections so structure conveys meaning to readers and crawlers.
1 H1 issue(s) and 0 skipped heading hierarchy warning(s) were detected.
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.
Link headers
Expose Link response headers so agents can discover related resources (API catalog, skills, agent card) without parsing HTML.
No discovery-oriented Link headers were detected on the homepage response
Add Link response headers on your homepage and key API endpoints pointing agents to discovery documents. For example: `Link: </.well-known/api-catalog>; rel="api-catalog"` for your API catalog, or `Link: </docs/api>; rel="service-doc"` for documentation. See RFC 8288 for the format and the IANA Link Relations registry for valid `rel` values.
Canonical Hygiene
Each indexable page declares one canonical URL pointing to itself or the definitive original, so search engines consolidate ranking signals.
0 canonical error(s) and 2 canonical warning(s) were detected in the sample.
Add exactly one `<link rel="canonical" href="...">` per indexable page in the document head, with an absolute URL pointing to the preferred version (after redirects, with the right protocol and trailing-slash policy). Self-canonical is fine for the original; cross-canonical only when consolidating duplicates. Never canonicalize to a noindexed or 404 page.
Internal Link Quality
Internal links use descriptive anchor text and form a reachable graph so crawlers, readers, and AI agents can navigate context.
1 link crawlability or anchor-text warning(s) were detected.
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.
Content Depth and Duplication
Each indexable page carries enough unique, substantive content to merit indexing on its own without overlapping siblings.
1 thin-content warning(s) and 0 duplicate-content fingerprint group(s) were detected.
Audit indexable pages for substantive, unique content — at minimum a few hundred words of original copy that delivers on the title and description. Consolidate near-duplicate pages with canonical tags or merge them into a single richer page. Don't ship placeholder "Coming soon" pages to production indexable URLs.
Favicon Metadata
The site declares a favicon (and ideally apple-touch-icon variants) via standard <link> tags so browsers, bookmarks, and previews show the right brand mark.
No favicon link was detected on the sampled homepage.
Add a `<link rel="icon" href="/favicon.ico">` (or a versioned `.png`/`.svg`) to the homepage head, plus an optional `<link rel="apple-touch-icon" href="/apple-touch-icon.png">` (180×180) for iOS bookmarks. Keep the URL stable across deploys so browsers and bookmarks don't lose the icon to cache busts.
Hreflang Annotations
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.
No hreflang annotations were detected in the sampled pages.
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.
Sitemap Metadata Consistency
Sitemap entries match the live canonical URLs and stay consistent with what the site actually publishes.
No sitemap URL metadata was available from the already-fetched sitemap sample.
Make sure sitemap entries match what the site actually publishes: only canonical URLs, only indexable pages (no noindex), and `<lastmod>` values in valid W3C datetime format. Remove redirects, 404s, and non-canonical URLs from the sitemap so crawlers don't spend budget chasing them.
Social Metadata
Pages expose Open Graph and Twitter Card metadata so they preview cleanly when shared on social, in chat, or by AI assistants.
No Open Graph or Twitter card metadata was detected in the sampled pages.
On shareable pages, add Open Graph and Twitter Card metadata in the head: `og:title`, `og:description`, `og:image` (1200×630 minimum), `og:url`, `og:type`, plus `twitter:card` set to `summary_large_image`. Make the OG content match the visible page so previews aren't misleading, and use a real image URL with stable dimensions so social platforms cache reliably.
Structured Data
Pages publish JSON-LD structured data so search engines and AI agents can extract entities, products, FAQs, and offers reliably.
No JSON-LD structured data was detected in the sampled pages.
Embed JSON-LD `<script type="application/ld+json">` blocks in the head describing the page's primary entity — Article, Product, FAQPage, Organization, etc. — using schema.org types and required fields per Google's structured data guidelines. Validate with the Rich Results Test before shipping, and keep the JSON strictly parseable (no trailing commas, no comments).
Security
Content-Security-Policy
Content-Security-Policy is missing
Publish a baseline Content-Security-Policy for the site shell.
HTTP Observatory
HTTP Observatory grade D with score 30.
Tighten response headers and HTTP posture where Observatory reports gaps.
Strict-Transport-Security
HSTS is missing
Add a Strict-Transport-Security header on HTTPS responses.
Web Bot Auth
Identify your own bot traffic with Web Bot Auth signed requests so receiving sites can verify and trust them.
Web Bot Auth HTTP Message Signatures directory is missing
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.
X-Content-Type-Options
X-Content-Type-Options is not set to nosniff
Set X-Content-Type-Options: nosniff.
DNSSEC Signals
DNSKEY records were detected, but no DS delegation was observed.
Cloudflare Challenge Signals
No Cloudflare Challenge Page marker was detected on the homepage response.
Performance
Cloudflare Cache Signals
Cloudflare reported cache status DYNAMIC.
CrUX 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.
PageSpeed Insights
PSI mobile performance score is 100.
Improve mobile Lighthouse performance issues highlighted by PageSpeed Insights.
Production Quality
Discovery Link Headers
Homepage Link headers do not advertise agent-useful discovery artifacts
Expose Link headers for api-catalog, service-desc, agent-skills, or related discovery artifacts.
ACP
Publish Agentic Commerce Protocol discovery so agents can transact with your commerce surfaces without scraping.
No ACP discovery markers were detected
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.
MPP
Publish Machine Payment Protocol metadata so agents can discover paid endpoints in your API.
No MPP discovery markers were detected
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.
UCP
Expose Universal Commerce Protocol metadata so agents can transact for content or services through a standard interface.
No UCP discovery markers were detected
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.
x402
Support x402-style HTTP 402 payment flows so agents can pay for API access machine-to-machine.
No x402 discovery markers were detected
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.
Scan Coverage
Scanned every discovered page (2).
Cloudflare Error Diagnostics
No Cloudflare-generated error diagnostics were detected on the homepage response.
Cloudflare Product Signals
No Cloudflare product beacons were detected in the homepage response.
DNS Service Discovery
Detected 1 public DNS/service signal(s).