🤖 LLMO Checker
LLMO (Large Language Model Optimization) — diagnostics for the AI-search era. Verify llms.txt presence, the permission states of major AI crawlers (GPTBot / ClaudeBot / Google-Extended, etc.), and structured data — all in one shot.
📖 What this check tells you
This check looks at whether /llms.txt exists and how it is structured, what your robots.txt says about AI crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot and others), and whether structured data is present. Nobody can measure whether your page will be cited by ChatGPT or an AI search product, because no equivalent of a ranking API exists. What you can confirm here is only the precondition: that you are machine-readable and not blocking access in the first place.
| Item | What it means | How to fix it |
|---|---|---|
| No llms.txt | llms.txt is a proposal from 2024. No LLM currently requires it, and there is no confirmed causal link between having one and being cited. Think of it as handing a machine-readable map of your site over in Markdown. Its absence is not a defect. | If you do add one, put an H1 site name at /llms.txt, follow it with a one-paragraph summary, and below that a ## Section heading for each area with a list of links and one-line descriptions, all in Markdown. In effect it is a human-style sitemap page written in plain Markdown; no dedicated generator is needed. |
| Blocking every AI crawler | Each user-agent means something different. Disallowing Google-Extended only opts you out of uses like AI Overviews and does not affect normal search rankings, since the crawling is still done by Googlebot. Blocking GPTBot or ClaudeBot, by contrast, gives up the referral traffic that comes back from those products. |
To separate do not train on me from please cite me, disallow only the training-oriented bots such as CCBot and GPTBot while allowing the ones that fetch at answer time. Compliance is voluntary, though, so if you need a hard stop, reject the user-agent at the server. |
| No structured data | An LLM reads your prose too, but schema.org JSON-LD is the only way to state unambiguously that this is an article, who wrote it and when it was updated. If the date and author exist nowhere as structure, they get dropped in summarisation — or attached to the wrong number. | Add Article (or BlogPosting), Organization and BreadcrumbList as JSON-LD. The thing that matters is generating the markup and the visible HTML from the same data; write them separately and one of them will always go stale. We made exactly that mistake with our own FAQ and rebuilt it so a single array emits both. |
There is no settled playbook for LLMO yet. What reliably helps today is (1) body text readable without JavaScript, (2) a heading hierarchy that matches the content, and (3) primary information that exists nowhere else — much the same list as for search engines. Treat all three as higher priority than adding an llms.txt.