platform.claude.com — llms.txt & GEO score
Built for machines, not just declared
platform.claude.com publishes an unusually large llms.txt: 629 links across 3 sections, 66 KB in all. Past roughly fifty entries a model has to read the whole file before it can choose, so breadth starts working against precision.
629 of those links (100%) point at clean .md copies rather than HTML pages. That is the strongest single signal here and the one most sites skip: a model reads the content instead of the navigation, cookie banner and footer around it.
The clearest gap is enough links carry a description. Right now: 115 of 629 described (18%) — for a map-shaped file the bar is 60%, not every line. Closing it is worth 7 points.
What it does well
- Points at clean markdown copies 629 of 629 end in .md or .txt (100%, detected by file extension)
- A workable number of links 629 links, nearly all pointing at machine-readable copies — an exhaustive map rather than a short guide, which is a legitimate shape for a documentation site
- List items are markdown links 12 of 641 list items are plain text, not links
- AI crawlers are not blocked No AI user-agent is disallowed at the root
What is missing
- Enough links carry a description +7 115 of 629 described (18%) — for a map-shaped file the bar is 60%, not every line
- Descriptions say something concrete +5 Average 25 characters across 115 described links
- Skippable links marked Optional +3 Nothing is marked as skippable
- Summary directly under the title +2 An opening paragraph is there, but not as a "> " blockquote — clients that look for the quoted summary will miss it
Among the 22 sites measured here so far, platform.claude.com ranks 7th, against a median of 71. That comparison moves as new sites are scanned — it is a snapshot of this list, not of the web.
What platform.claude.com tells an assistant
Anthropic Developer Documentation
Content & links
Can a model pick the right page, first time?
6 of 11 checks pass. What is left: enough links carry a description, descriptions say something concrete, descriptions add to the title, link titles are descriptive and skippable links marked Optional.
-
Enough links carry a description 115 of 629 described (18%) — for a map-shaped file the bar is 60%, not every line3/10
-
Descriptions say something concrete Average 25 characters across 115 described links2/7
-
Descriptions add to the title 9 descriptions just repeat the link title3/4
-
Points at clean markdown copies 629 of 629 end in .md or .txt (100%, detected by file extension)10/10
-
Link titles are descriptive 31 weak titles (bare URLs, “here”, one-word labels)3/4
-
A workable number of links 629 links, nearly all pointing at machine-readable copies — an exhaustive map rather than a short guide, which is a legitimate shape for a documentation site4/4
-
Skippable links marked Optional Nothing is marked as skippable0/3
-
No duplicate links All 629 URLs are distinct2/2
-
List items are markdown links 12 of 641 list items are plain text, not links4/4
-
Grouped so the map stays navigable Median heading group holds 19 links across 12 groups (12 sub-headings)3/3
-
Links are absolute URLs All 629 links are absolute URLs1/1
Structure
Does it follow the llms.txt shape?
5 of 7 checks pass. What is left: summary directly under the title and grouped into balanced sections.
-
Exactly one H1 project title “Anthropic Developer Documentation”3/3
-
Summary directly under the title An opening paragraph is there, but not as a "> " blockquote — clients that look for the quoted summary will miss it1/3
-
Summary is a usable length 90 characters (from the opening paragraph)3/3
-
Concrete language, not marketing filler No marketing filler detected3/3
-
Grouped into balanced sections 3 H2 sections and 12 sub-headings, largest group holds 377 of 629 links3/4
-
Conforms to the published grammar Markdown only, headings used as the spec defines them2/2
-
Section names say what is inside All 3 headings are descriptive2/2
Discovery & access
Can an assistant reach it, and is it allowed to?
All 5 checks pass in this group.
-
At the root of the domain you typed Found at the standard /llms.txt path2/2
-
Sent as plain text Content-Type: text/plain; charset=utf-81/1
-
robots.txt exists 138 B of crawler rules1/1
-
AI crawlers are not blocked No AI user-agent is disallowed at the root6/6
-
robots.txt points at a sitemap A Sitemap: line is declared1/1
Search-engine basics
What a crawler reads from your homepage today
3 of 6 checks pass. What is left: homepage title is the right length, homepage has a meta description and canonical URL declared.
-
Homepage title is the right length 15 characters, from title — shorter than search engines prefer1/2
-
Title is not padded or repetitive No repeated terms1/1
-
Homepage has a meta description 28 characters, from meta description — thin for a snippet1/2
-
Canonical URL declared No rel="canonical" link0/1
-
Language declared lang="en-US"1/1
-
Social card image og:image is set1/1
Depth & upkeep
Is there more than the index, and is it current?
4 of 5 checks pass. What is left: the index points at the full file.
-
Publishes llms-full.txt Companion full-text file found3/3
-
The index points at the full file Not linked from llms.txt0/1
-
Index is a sensible size 66 KB2/2
-
Server reports when it last changed Server sends Last-Modified1/1
-
The index is kept current Last changed 0 days ago2/2
What platform.claude.com should fix next
Ordered by what each one is worth. Open a row for the steps.
-
Right now: 115 of 629 described (18%) — for a map-shaped file the bar is 60%, not every line
Add ": " and one short line after every link. An undescribed link is a coin flip — the model has to open it to find out what it is.
Where: Each "- [Title](url)" line
- Add ": " and one short line after every link — not most of them, every one.
- Describe what the page answers, not what it is called.
- An undescribed link is a coin flip: the model has to open it to find out.
In your file
line 34- [Documentation](https://platform.claude.com/docs/en/home.md)
- [Documentation](https://platform.claude.com/docs/en/home.md): {one line on what this page covers}line 39- [Features overview](https://platform.claude.com/docs/en/build-with-claude/overview.md)
- [Features overview](https://platform.claude.com/docs/en/build-with-claude/overview.md): {one line on what this page covers}line 42- [Intro to Claude](https://platform.claude.com/docs/en/intro.md)
- [Intro to Claude](https://platform.claude.com/docs/en/intro.md): {one line on what this page covers}Placeholders in { } are yours to write — we do not invent text about your pages.
-
Right now: Average 25 characters across 115 described links
Write 60+ characters that add information the title does not: numbers, limits, formats, names.
Where: The text after ": " on each link
- Write 60 characters or more, and make them add information the title does not.
- Cover every link: this is measured per LINK, not per description, so an undescribed line counts as zero.
- Name the concrete things on the page: numbers, limits, formats, model names.
- If the description could be pasted under any other link, it is not a description yet.
In your file
line 38- [Overview](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview.md) - Agent Skills
- [Overview](https: {what is on the page — numbers, limits, formats}line 40- [Quickstart](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/quickstart.md) - Get started with Agent Skills in the API
- [Quickstart](https: {what is on the page — numbers, limits, formats}line 41- [Quickstart](https://platform.claude.com/docs/en/get-started.md) - Get started with Claude
- [Quickstart](https: {what is on the page — numbers, limits, formats}Placeholders in { } are yours to write — we do not invent text about your pages.
-
Right now: Nothing is marked as skippable
Move the nice-to-haves under ## Optional so a model on a tight budget knows what to drop first.
Where: A new "## Optional" section at the end of llms.txt
- Move the nice-to-have links — history, press, careers — under "## Optional".
- By convention a client may skip that whole section when context is tight.
- This is you deciding what gets dropped first, instead of the model guessing.
Do this## Optional - [Company history](https://acme.example/about.md): Background, not needed to answer product questions
-
Right now: An opening paragraph is there, but not as a "> " blockquote — clients that look for the quoted summary will miss it
Put the opening line in a > blockquote. The spec calls it optional, but it is the first thing a model reads and often the only thing it quotes back.
Where: The line directly under the H1
- Add a single line starting with "> ".
- Answer three things in it: what you do, for whom, and what makes it specific.
- This is the sentence a model is most likely to quote back, so write it last, after the rest of the file.
Instead of> We are an innovative company delivering world-class solutions.
Do this> Industrial spare parts for food processing lines, shipped across Europe with same-week dispatch.
-
Right now: No rel="canonical" link
Add <link rel="canonical"> so www and non-www are not counted as two competing sites.
Where: The <head> of every page
- Add <link rel="canonical" href="..."> with the absolute, preferred URL.
- Pick one host — www or non-www — and make every canonical point at it.
Do this<link rel="canonical" href="https://acme.example/">
-
Right now: 9 descriptions just repeat the link title
A description that echoes the title costs context and adds nothing. Say what is on the page, not what it is called.
Where: The text after ": " on each link
- Find the descriptions that just repeat the link title and rewrite them.
- Say what is ON the page — the numbers, limits, formats or names a reader would come for.
- If the description and the title carry the same information, one of them is wasted context.
In your file
line 101- [Streaming Messages](https://platform.claude.com/docs/en/build-with-claude/streaming.md) - Streaming messages
- [Streaming Messages](https: {what is on the page — numbers, limits, formats}line 111- [Tool Runner (SDK)](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-runner.md) - Tool runner (SDK)
- [Tool Runner (SDK)](https: {what is on the page — numbers, limits, formats}line 275- [C#](https://platform.claude.com/docs/en/cli-sdks-libraries/sdks/csharp.md) - C# SDK
- [C#](https: {what is on the page — numbers, limits, formats}Placeholders in { } are yours to write — we do not invent text about your pages.
-
Right now: 3 H2 sections and 12 sub-headings, largest group holds 377 of 629 links
Group links under headings a reader would look for, and spread them — one group holding most of the file is the same as no grouping.
Where: The "## " headings in llms.txt
- Split the link list into at least five "## " groups by what a reader would be looking for.
- Typical split: Docs, API, Guides, Product, Company, Optional.
- Grouping is what lets a model skip nine tenths of the file and still find the right page.
Instead of## Links - [A](...) - [B](...) - [C](...)
Do this## Docs - [A](...) ## API - [B](...) ## Optional - [C](...)
-
Right now: 28 characters, from meta description — thin for a snippet
Add a 70–160 character meta description. It is the snippet under your result, and assistants reuse it verbatim.
Where: The <meta name="description"> tag on your homepage
- Target 70–160 characters; beyond that Google truncates it mid-sentence.
- Write it as the sentence you would want quoted, because assistants reuse it verbatim.
Instead of<meta name="description" content="Welcome to our website.">
Do this<meta name="description" content="Industrial spare parts for food processing lines, shipped across Europe with same-week dispatch and two-year warranty.">
-
Right now: 15 characters, from title — shorter than search engines prefer
Write a 30–60 character title that names the product and what it does.
Where: The <title> tag on your homepage
- Target 30–60 characters; past 60 the result gets cut off in search.
- Put what you do before the brand name — the first words are what survives truncation.
Instead of<title>Acme Parts | Acme | Industrial Spare Parts Supplier Europe Acme</title>
Do this<title>Industrial spare parts for food lines — Acme</title>
-
Right now: 31 weak titles (bare URLs, “here”, one-word labels)
Replace bare URLs and “click here” with the page’s real name — the title is half the signal.
Where: The "[Title]" part of each link
- Replace bare URLs, "here", "click here" and one-word labels with the page’s real name.
- The title is half the signal — a model reads it before it reads your description.
In your file
line 69- [Effort](https://platform.claude.com/docs/en/build-with-claude/effort.md)
- [{the page’s real name}](https://platform.claude.com/docs/en/build-with-claude/effort.md)line 136- [Dreams](https://platform.claude.com/docs/en/managed-agents/dreams.md)
- [{the page’s real name}](https://platform.claude.com/docs/en/managed-agents/dreams.md)line 151- [Tools](https://platform.claude.com/docs/en/managed-agents/tools.md)
- [{the page’s real name}](https://platform.claude.com/docs/en/managed-agents/tools.md)Placeholders in { } are yours to write — we do not invent text about your pages.
-
Right now: Not linked from llms.txt
Mention llms-full.txt inside llms.txt. Guessing the filename works often enough to be tempting and not often enough to rely on.
Where: Inside llms.txt
- Mention the full file in llms.txt itself, as a link or a line of context.
- Guessing the filename works often enough to be tempting and not often enough to rely on.
Do thisFull inlined text: https://acme.example/llms-full.txt
This score is Devsly’s own heuristic, not an official standard — llms.txt has no scoring body. It measures how well a file serves an AI assistant, and it does not predict whether any assistant will cite the site. The reading is a snapshot from 21 September 2026; run it again for the current state, or check a different site.
Other recently scored sites
Every scan that finds an llms.txt gets a score card. Cards link back to the full report here, not out to the site.