vercel.com — llms.txt & GEO score
Built for machines, not just declared
vercel.com publishes a curated llms.txt — 24 links across 9 sections, 4.6 KB in all.
20 of those links (83%) 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 points at clean markdown copies. Right now: 20 of 24 end in .md or .txt (83%, detected by file extension). Closing it is worth 2 points.
What it does well
- Every link carries a description 24 of 24 described (100%)
- Descriptions add to the title No description merely repeats its title
- Link titles are descriptive All 24 titles are meaningful
- A workable number of links 24 links (12–50 is the sweet spot)
What is missing
- Points at clean markdown copies +2 20 of 24 end in .md or .txt (83%, detected by file extension)
- The index is kept current +2 Cannot be confirmed — the server sends no Last-Modified header
- Descriptions say something concrete +1 Average 64 characters across 24 described links
- Enough written detail per link +1 22 words per link across 530 words
Among the 22 sites measured here so far, vercel.com ranks 1st, 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 vercel.com tells an assistant
Vercel
Vercel is a cloud platform for building, deploying, and scaling web applications and AI workloads.
Content & links
Can a model pick the right page, first time?
7 of 11 checks pass. What is left: descriptions say something concrete, points at clean markdown copies, list items are markdown links and enough written detail per link.
-
Every link carries a description 24 of 24 described (100%)10/10
-
Descriptions say something concrete Average 64 characters across 24 described links6/7
-
Descriptions add to the title No description merely repeats its title4/4
-
Points at clean markdown copies 20 of 24 end in .md or .txt (83%, detected by file extension)8/10
-
Link titles are descriptive All 24 titles are meaningful4/4
-
A workable number of links 24 links (12–50 is the sweet spot)4/4
-
Skippable links marked Optional An ## Optional section is present3/3
-
No duplicate links All 24 URLs are distinct2/2
-
List items are markdown links 8 of 32 list items are plain text, not links3/4
-
Enough written detail per link 22 words per link across 530 words2/3
-
Links are absolute URLs All 24 links are absolute URLs1/1
Structure
Does it follow the llms.txt shape?
All 7 checks pass in this group.
-
Exactly one H1 project title “Vercel”3/3
-
Summary directly under the title Present as a blockquote3/3
-
Summary is a usable length 98 characters3/3
-
Concrete language, not marketing filler No marketing filler detected3/3
-
Grouped into balanced sections 9 H2 sections, largest group holds 5 of 24 links4/4
-
Conforms to the published grammar Markdown only, headings used as the spec defines them2/2
-
Section names say what is inside All 9 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 629 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
5 of 6 checks pass. What is left: homepage has a meta description.
-
Homepage title is the right length 31 characters, from title2/2
-
Title is not padded or repetitive No repeated terms1/1
-
Homepage has a meta description 45 characters, from meta description — thin for a snippet1/2
-
Canonical URL declared https://vercel.com1/1
-
Language declared lang="en"1/1
-
Social card image og:image is set1/1
Depth & upkeep
Is there more than the index, and is it current?
3 of 5 checks pass. What is left: server reports when it last changed and the index is kept current.
-
Publishes llms-full.txt Companion full-text file found3/3
-
The index points at the full file llms.txt links to llms-full.txt1/1
-
Index is a sensible size 4.6 KB2/2
-
Server reports when it last changed No Last-Modified header — clients cannot tell when this changed0/1
-
The index is kept current Cannot be confirmed — the server sends no Last-Modified header0/2
What vercel.com should fix next
Ordered by what each one is worth. Open a row for the steps.
-
Right now: 20 of 24 end in .md or .txt (83%, detected by file extension)
Publish a .md version of each page and link to that. The single biggest win here: the model reads your content instead of your navigation and footer.
Where: Your CMS or docs build — this is the biggest single win here
- Publish a .md version of each page you link to, at a predictable URL (page.md next to page).
- Point the llms.txt links at the .md copies, not at the HTML pages.
- Strip navigation, cookie banners and footers from the markdown — that is the whole point: the model reads your content instead of your chrome.
- Declare the pair in your HTML with a link relation so clients can find it without guessing.
In your file
line 37- [Vercel REST API OpenAPI description](https://vercel.com/openapi.json): Machine-readable OpenAPI 3.0 description for the public REST API.
line 62- [Agent resource catalog](https://vercel.com/.well-known/ai-catalog.json): Experimental catalog of agent-facing resources.
line 63- [Product taxonomy](https://vercel.com/docs/taxonomy.json): Canonical product names, aliases, and deprecations.
Placeholders in { } are yours to write — we do not invent text about your pages.
-
Right now: Cannot be confirmed — the server sends no Last-Modified header
Regenerate llms.txt when the docs change. A year-old index quietly points models at pages that have moved.
Where: Your build pipeline
- Regenerate llms.txt in the same step that publishes content, so it cannot go stale silently.
- Treat it as a build artifact, not a hand-edited file — hand-edited indexes drift within a quarter.
- An llms.txt with discontinued products is worse than none: a model will repeat the wrong facts confidently.
-
Right now: Average 64 characters across 24 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 56- [Vercel Academy](https://vercel.com/academy/llms.txt): Courses and learning paths.
- [Vercel Academy](https: {what is on the page — numbers, limits, formats}line 58- [Vercel Changelog sitemap](https://vercel.com/changelog/sitemap.md): Product updates and release notes.
- [Vercel Changelog sitemap](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: 22 words per link across 530 words
A list of names is not documentation. Aim for 30+ words per link across the file — summary, section context and descriptions together. For an exhaustive map what matters instead is that the list is grouped so a model can skip whole branches.
Where: The descriptions and section context in llms.txt
- Count the words in your file against the number of links — aim for 30 or more per link.
- A list of page names is an index, not documentation; the descriptions are what a model actually reads.
- Add a line of context under each "## " heading saying what that group covers.
-
Right now: 45 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: 8 of 32 list items are plain text, not links
A file list needs `- [Title](url): description`. A plain line gives a model something to read but nowhere to go — it cannot follow it, quote it, or check it.
Where: Every "- " line in llms.txt
- Turn each plain line into a markdown link: "- [Title](https://your-site/page.md): description".
- A line without a URL gives a model something to read but nowhere to go — it cannot follow, quote or verify it.
- If a fact has no page behind it (an address, a phone number), put it in the free-text body above the sections, not in a file list.
- Note that "#" is a heading in markdown, not a comment — lines starting with # become H1/H2 headings.
In your file
line 9- Deploy and scale web applications, APIs, and AI workloads from a Git repository or the Vercel CLI.
- [Deploy and scale web applications, APIs, and AI workloads from a Git repository or the Vercel CLI.]({https://your-site/path}.md): {what this page covers}line 10- Automate projects, deployments, domains, and account resources through the Vercel REST API or SDK.
- [Automate projects, deployments, domains, and account resources through the Vercel REST API or SDK.]({https://your-site/path}.md): {what this page covers}line 11- Connect an authenticated AI assistant to Vercel projects, deployments, logs, analytics, and documentation through Vercel MCP.
- [Connect an authenticated AI assistant to Vercel projects, deployments, logs, analytics, and documentation through Vercel MCP.]({https://your-site/path}.md): {what this page covers}Placeholders in { } are yours to write — we do not invent text about your pages.
-
Right now: No Last-Modified header — clients cannot tell when this changed
Let the server send Last-Modified on llms.txt. Without it a client has to re-download the whole file to notice a change.
Where: Your web server configuration
- Serve llms.txt as a real file on disk so the server can derive Last-Modified from its mtime.
- If it is generated by an application route, set the header yourself from the generation time.
- Without it a client has to re-download the whole file to notice a change, and cannot answer "is this current?".
Instead ofHTTP/1.1 200 OK\nContent-Type: text/plain
Do thisHTTP/1.1 200 OK\nContent-Type: text/plain\nLast-Modified: Wed, 10 Sep 2026 08:14:00 GMT
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 20 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.