The full menu

Everything we check

Every signal Bot Appétit tests when you scan a page — grouped by course, with why each one matters and what good looks like. It's the same catalog the scanner runs on, so this is exactly what a scan looks at: 54 checks across six categories, plus 10 more in an Advanced (agent & MCP) course and live Core Web Vitals — 64 checks in all.

Wondering why a scanner like this needs to exist? Why we built Bot Appétit (and why the web is mostly bots now) →

Scan your site →

AEO / content

7 checks

Answer-engine optimisation — how ready your content is to be read, quoted and cited by AI assistants.

Your answer is in the HTML

High

If the main content only appears after JavaScript runs, many AI engines never see it — and can't cite it.

Good looks like The core content is server-rendered and present in the raw HTML.

Read more about your answer is in the html →

Semantic HTML landmarks

Medium

Real landmarks (header/nav/main/article) tell machines what each region is, so they parse and cite you cleanly.

Good looks like The page uses header, nav, main and article instead of generic divs.

Content is scannable in self-contained chunks

Medium

Answer engines parse by passage, not whole page; self-contained sections are far more likely to be lifted.

Good looks like One idea per section (~200–400 words), with descriptive headings, lists and tables.

Author / publisher is clear

Medium

Declared authorship and entity signals build the E-E-A-T that makes AI confident enough to attribute you.

Good looks like A Person or Organization identified in schema, or an author meta/rel marker.

A machine-readable published / updated date

Low

AI engines favour recently-updated content and use dates to judge relevance — but only a date they can read without guessing.

Good looks like A published and/or last-updated date in schema, article meta, or a time element with a datetime attribute.

llms.txt is present and valid

Medium

A machine-readable index of your key content, at a fixed path, in plain text. Without it an AI client has to guess its way around your site from HTML built for human eyes. Cloudflare's own docs publish one and tell crawlers to fetch it to discover all available pages before exploring further — this is a signal AI clients read today.

Good looks like A valid /llms.txt (H1 + summary + sectioned links), advertised via a Link: rel=describedby header.

Read more about llms.txt is present and valid →

Clean content for agents (Markdown)

Low

Serving a clean markdown version to agents that ask for it gives them noise-free content. Nice-to-have; few platforms support it.

Good looks like Responds to Accept: text/markdown with a clean markdown version.

Read more about clean content for agents (markdown) →

AI access

5 checks

Whether AI crawlers are actually allowed to reach, read and cite your content.

AI crawlers aren't blocked

High

Blocking the search-and-answer bots (GPTBot, ClaudeBot, PerplexityBot, Google-Extended…) removes you from AI answers entirely.

Good looks like The AI crawlers you want are allowed in robots.txt.

Read more about ai crawlers aren't blocked →

AI bot rules are explicit and intentional

High

A deliberate allow/deny per bot (separating training bots from search bots from user-fetchers) reads as maturity and avoids accidental blocks.

Good looks like An explicit allow/disallow per AI crawler that matches your actual intent.

Read more about ai bot rules are explicit and intentional →

Automated visitors can reach your pages

High

AI answer engines can only cite pages they can load. If your site turns away automated visitors indiscriminately, GPTBot, ClaudeBot and PerplexityBot go with them and you vanish from AI answers. Note the distinction: most bot-protection vendors allow VERIFIED crawlers while refusing unverified ones, so being refused is not by itself proof that AI crawlers are blocked.

Good looks like Your pages load for honest automated clients — AI crawlers aren't blocked at the door.

Read more about automated visitors can reach your pages →

Structured data

6 checks

The machine-readable JSON-LD that tells engines exactly what your page and business are.

Structured data is valid

High

Broken or incomplete schema is ignored — or worse, distrusted. (We show the snippet + any errors below.)

Good looks like Every JSON-LD block parses cleanly and each entity declares its @context and @type.

Read more about structured data is valid →

FAQ / Q&A schema

Medium

A question paired with a direct answer is exactly what an AI answer engine or a search result quotes. FAQPage and QAPage markup label your Q&A content in a machine-readable format that Google and the AI/search crawlers (Bing, Perplexity, RAG crawlers) still parse. Google removed the visual FAQ rich result from search listings in May 2026, but that was only the SERP feature — the markup stays valid, is still read, and the Q&A content itself is what gets cited, so keep your answers genuine and visible on the page.

Good looks like A JSON-LD FAQPage block (multiple questions, your own answers) backing a real, visible FAQ — or, for a page built around one user-answered question, a QAPage block.

Read more about faq / q&a schema →

Organization schema with sameAs

Medium

sameAs links let engines confirm you're one real entity across sources — the foundation of being named by AI.

Good looks like An Organization entity — JSON-LD or microdata — carrying a logo and sameAs links to your profiles.

Read more about organization schema with sameas →

Right schema type for the page

Medium

Type-appropriate markup (Article, Product, LocalBusiness, Breadcrumb…) unlocks the matching rich results.

Good looks like Schema types that match the page's purpose, with required fields filled.

Breadcrumb structured data

Low

BreadcrumbList JSON-LD earns a distinct breadcrumb rich result in search and gives AI engines a clear sense of where a page sits in your site.

Good looks like A valid BreadcrumbList on interior pages, matching the on-page breadcrumb trail.

Read more about breadcrumb structured data →

SEO

25 checks

The classic search-engine fundamentals that crawlers and rankings still depend on.

Reached without a redirect chain

Low

Each redirect hop is another request an AI client or crawler has to make before it reaches your content, and some give up. A single clean redirect is normal; a chain of them is latency you are adding to every visit. A page that does not answer at all is reported separately, as a refusal rather than a score.

Good looks like The URL answers directly, or through one clean redirect.

Read more about reached without a redirect chain →

Caching or validation headers are set

Low

A Cache-Control, ETag, or Last-Modified header lets browsers and CDNs skip re-downloading an unchanged page — faster repeat visits, less server load, and a small hand to crawlers hitting you often.

Good looks like The page sends a Cache-Control, ETag, Last-Modified, or Expires header.

This page declares its canonical URL

High

The canonical consolidates ranking signals onto the URL you want and resolves duplicate-content ambiguity. It counts whether you declare it as a link element or an HTTP Link header — Google treats both the same.

Good looks like A self-referencing canonical pointing to the preferred, on-domain URL — as a <link rel="canonical"> element or a Link: rel="canonical" response header.

Read more about this page declares its canonical url →

Mobile viewport is set

High

Google indexes mobile-first; without a viewport tag the page renders broken on phones and its rankings are capped.

Good looks like A width=device-width viewport meta tag.

Read more about mobile viewport is set →

Has a title tag

Critical

The title is the strongest on-page relevance signal and the first thing a search engine or an answer engine reads to know what a page is. A page with no title is unnamed to a machine.

Good looks like Every page has a unique, keyword-led title element.

Read more about has a title tag →

Title fits a search snippet

Low

A title outside roughly 30-60 characters either gets truncated in a search result or is too thin to say what the page is. It's a presentation detail rather than a machine-readability one, which is why it's weighted lightly — the title existing is what actually matters.

Good looks like A title of roughly 30-60 characters — long enough to be specific, short enough to show in full.

Compelling meta description

High

It doesn't rank you directly, but it owns the search snippet and lifts click-through.

Good looks like A unique description roughly 70–160 characters — ~120–160 is the sweet spot for a full snippet.

Read more about compelling meta description →

Exactly one H1

High

One clear H1 states the page topic to crawlers and AI; none or several muddies the signal.

Good looks like A single H1 that states the page's topic.

Read more about exactly one h1 →

Logical heading order

High

A clean H1→H2→H3 structure is how crawlers, screen readers, and AI parse your content.

Good looks like Headings nest in order with no skipped levels.

Read more about logical heading order →

Topic is consistent across title, H1 and URL

Medium

When the title, H1, URL, and opening line agree on the topic, relevance is unambiguous.

Good looks like The main topic appears in the title, the H1, the slug, and the first paragraph.

Open Graph tags for sharing

Medium

OG tags control the preview card when your links are shared or cited — a growing discovery surface.

Good looks like og:title, og:description, og:image and og:url are all set, declared with property=.

Read more about open graph tags for sharing →

Twitter/X card tags

Low

Without a card + image, links render as a small, less clickable preview on X.

Good looks like twitter:card, title, description and image are set.

Images are optimised

Medium

Heavy, unsized images are the most common cause of slow loads and layout shift.

Good looks like Modern formats (WebP/AVIF), lazy-loading below the fold, and explicit width/height.

Language and charset declared

Low

A lang attribute and UTF-8 charset help engines, browsers and screen readers render correctly.

Good looks like A valid <!doctype html>, lang attribute, and UTF-8 charset.

hreflang for language variants

Low

hreflang serves the right language/region version and prevents duplicate-content confusion.

Good looks like Valid, reciprocal hreflang tags across your language variants.

Analytics is installed

Low

You can't improve what you don't measure; no analytics means no baseline and no lead attribution.

Good looks like GA4 (or a privacy-first equivalent) is installed, ideally via GTM.

Search Console / Bing verification

Low

Verifying the site is your direct line to index status, errors and search performance.

Good looks like Google Search Console (and ideally Bing) verification is in place.

A favicon is set

Low

Your favicon shows next to your result in search and in some AI answer interfaces — a small but real trust and brand signal.

Good looks like A <link rel="icon"> (or apple-touch-icon) pointing at a real icon.

No meta-refresh redirect

Low

A client-side <meta http-equiv="refresh"> redirect is slower than a server 301, can be ignored by crawlers, and is treated as a mild cloaking smell.

Good looks like Redirects use a server 301/302, not a meta refresh.

Security

7 checks

How safely your site is served — HTTPS, secure headers, and no leaked internals.

Served over a secure HTTPS connection

Critical

HTTPS is a baseline trust and ranking signal; browsers warn users away from insecure pages, and AI engines skip them.

Good looks like Every page loads over HTTPS with a valid, unexpired certificate.

Read more about served over a secure https connection →

HTTP redirects to HTTPS

High

If the insecure http:// version still loads, you split trust and risk duplicate content.

Good looks like http:// requests 301-redirect to the https:// version.

Read more about http redirects to https →

No mixed (insecure) content

Medium

Browsers outright block insecure scripts, styles and frames on an https page — breaking the page — and auto-upgrade insecure images/media, which then break if the host doesn't serve https.

Good looks like Every script, style, frame, image and media file is referenced over https.

Core security headers are set

Medium

Headers like HSTS, X-Content-Type-Options and a referrer policy harden the site and are a recognised best-practice signal.

Good looks like HSTS, X-Content-Type-Options, X-Frame-Options/CSP frame-ancestors, and a Referrer-Policy are present.

Read more about core security headers are set →

Not flagged for malware or phishing

Medium

A site flagged by Google Safe Browsing is hidden behind warnings and won't be recommended.

Good looks like The site is clean in Google Safe Browsing.

No server version leakage

Low

Headers that reveal exact server/framework versions hand attackers a head start.

Good looks like Server and X-Powered-By headers are absent or generic.

security.txt is published

Low

A /.well-known/security.txt (RFC 9116) gives security researchers a standard way to report a vulnerability — a maturity signal shipped by Google, GitHub and Meta.

Good looks like A /.well-known/security.txt with the two fields RFC 9116 requires: Contact: and a future Expires: date.

Read more about security.txt is published →

Advanced

10 checks

Agent & MCP readiness — MCP server cards, agent-skills manifests, API catalogs, OAuth & OpenID discovery, web-bot-auth and AI DNS records: the emerging well-known signals AI agents use to act on your site. These run on every scan and appear as their own Advanced sub-score in your results (kept separate from the headline, since most sites don't need them yet).

MCP Server Card

Low

Advertises an MCP server so agents can discover and use your tools. Only relevant if you expose agent-facing infrastructure.

Good looks like A valid MCP Server Card at /.well-known/mcp.json or /.well-known/mcp/server-card.json (the two paths served in the wild — the spec proposals are still drafts).

Agent Skills index

Low

A discoverable manifest of skills an agent can use on your site.

Good looks like A valid Agent Skills index at /.well-known/agent-skills/index.json.

API catalog

Low

A machine-readable index of your APIs (RFC 9727) lets agents find and use them.

Good looks like A valid /.well-known/api-catalog.

OAuth authorization-server metadata

Low

Discovery metadata lets agents learn how to authenticate against protected resources.

Good looks like Valid OAuth authorization-server metadata at the well-known path.

OAuth protected-resource metadata

Low

RFC 9728 protected-resource metadata is how an MCP server tells an agent which authorization server guards it — the entry point of the MCP auth handshake.

Good looks like A valid /.well-known/oauth-protected-resource pointing at your authorization server.

OpenID Connect discovery

Low

OIDC discovery metadata lets agents and clients learn your token, authorization and JWKS endpoints without hard-coding them.

Good looks like Valid OpenID Connect discovery metadata at /.well-known/openid-configuration.

Web Bot Auth (operates a signed bot)

Low

Web Bot Auth (IETF draft) lets a BOT OPERATOR cryptographically prove its traffic: the operator publishes signing keys on its own domain, and websites verify them. This one only applies if this domain operates a bot or agent — a normal publisher site has nothing to publish here, and that's expected.

Good looks like Only if you operate a bot/agent: a JWKS at /.well-known/http-message-signatures-directory on the domain your bot signs as (e.g. chatgpt.com publishes one).

Universal Commerce Protocol manifest

Low

UCP (Google) is how an AI shopping agent finds out what you sell without a human browsing your site. The agent appends /.well-known/ucp to your domain and reads a JSON manifest of your services, capabilities, payment handlers and API endpoints. Only relevant if you sell something — we don't check it otherwise.

Good looks like A JSON manifest at /.well-known/ucp declaring what you sell, how to transact, and which transports you support.

Auth.md agent registration

Low

OAuth tells an agent how to authenticate. auth.md tells it how to register in the first place — the step before that. Without one, an AI agent acting for a customer has no documented way to get credentials for your service.

Good looks like A /auth.md describing your registration flows, scopes and endpoints, alongside your OAuth protected-resource metadata.

AI discovery via DNS

Low

DNS-based AI-discovery records help agents find your endpoints without fetching the page.

Good looks like AI-discovery DNS records are published.

Performance

Measured live

On top of the 64 checks above, we measure your Core Web Vitals live through Google PageSpeed — on every single-page scan, and on the homepage of a site scan — both what real Chrome users experience (field data, including INP) and a simulated mobile lab test (LCP, CLS, FCP, TBT, Speed Index, TTFB, page weight and render-blocking — INP itself can only be measured from real users, so the lab uses Total Blocking Time as its interactivity proxy).

See where your site stands

A free scan gives you a 0–100 score and a course-by-course breakdown in seconds — no signup.

Scan your site →