Findings · 2026-08-14 · By VSNARY | Emmanuel Orta · 0 views
llms.txt adoption rate: how many sites actually publish one
Declaring an entity is common. Declaring the specific facts an assistant is asked for is an order of magnitude rarer.
Two facts make a business quotable by an answer engine and almost no site states both: who is responsible for the content, and when it was last verified. An author with a real identity and a date the page was checked are the pair that let an engine attribute a claim with a source and a time. Most sites publish neither, which is why generic pages get summarised without attribution.
Are they open? and what does it cost? are the two most common questions anyone asks about a business. They are also, on the evidence, two of the least published machine-readable facts on the web.
The shape of it #
In the schema-type detection population published by BuiltWith, read on 12 August 2026: Organization is found on roughly 354,000 sites. PostalAddress on roughly 109,000. ContactPoint near 92,000. Offer near 55,000. OpeningHoursSpecification near 23,000.
An important caveat, and it is the reason this is a shape and not a rate: those are marginal counts. Each row counts sites where that type was found somewhere. They are not a joint distribution, so you cannot divide one row by another and get a coverage percentage — we do not know which sites overlap. What the magnitudes support is the ordering, and the ordering is the finding.
Schema types, by how many sites publish them #
| Type | Sites (BuiltWith schema-type population, 12 August 2026) | The question it answers |
|---|---|---|
| Organization | roughly 354,000 | who this is |
| PostalAddress | roughly 109,000 | where to send someone |
| ContactPoint | near 92,000 | how to reach them |
| Offer | near 55,000 | what it costs |
| GeoCoordinates | near 28,000 | where it is on a map |
| LocalBusiness | near 26,000 | that it is a place of business |
| OpeningHoursSpecification | near 23,000 | whether they are open now |
Declaring an entity is common. Saying when it is open, and what it charges, is not.
Declaring that you exist is not the same as being answerable #
Announcing we are an organisation with a name is easy, and it is what most structured data on the web amounts to. The fields that let an assistant actually answer a question — the hours, the price, the availability, a contact point it can act on — sit an order of magnitude below it.
An assistant asked is this place open now has three options: read a declared OpeningHoursSpecification, scrape hours out of a rendered page and hope, or decline. Only the first is reliable, and it is the one almost nobody publishes.
The second file, and why its adoption is a different number #
The same ordering shows up one layer out, in the machine files a site publishes about itself. In the same detection population, 70,213 sites publish an llms.txt. That is a real and growing number and it is still a minority signal, well under a fifth of the sites that manage an Organization node.
Our own corpus reads higher and the reason is worth stating rather than hiding: the sites measured here are seeded and submitted, so they skew toward operators who already care. Among sites this scanner watches daily, about half currently have no llms.txt, against a web-wide adoption rate that is far lower. Two populations, two honest numbers, and neither is the other. The panel is not a sample of the web and should never be quoted as one.
The entity map is the sharper case. Across every site scanned here, and across twenty-three vendor sites whose own product tells customers to publish structured data about themselves, the count that publish a machine-readable entity map is zero. Not low. Zero, three weeks apart, on two separate measurements.
Which of these gaps come and go, and which just sit there #
A missing declaration behaves differently from a broken one, and the difference is measurable. Absence is stable: a missing llms.txt shows almost no gap between the sites that ever carried it and the sites carrying it right now, because a file either exists or it does not and nothing about a Tuesday changes that. The per-code series puts the intermittent defects at the top — stale caches, pinned challenge pages, origins refusing under load — and the missing-declaration codes at the bottom with a gap of nearly nothing.
That is useful when deciding what to fix. An intermittent defect needs a change to infrastructure and will keep returning until you make it. A missing declaration needs one edit, once, and then it is done and it stays done.
The failure mode nobody sees #
This does not look like a defect from the inside. Your hours are on your website. A human reads them in a second. Nothing is broken, no validator complains, and every rank tracker is content.
What changed is that a growing share of the questions about your business are now answered by something that never loads your page the way a person does. For that reader, a fact that is not declared is a fact that does not exist.
And the reader may not even be the engine’s own crawler. Text-extraction pipelines that sit between a website and a model routinely discard the whole of <head> as boilerplate — which is where nearly all structured data is published, because that is where the documentation puts it. We measured two independent pipelines doing exactly that, and 87% of the schema nodes across ten sites we operate sit in the region they drop. So a declared fact has a delivery condition attached, and the prose is what survives regardless. Declare it and write it in a sentence.
The order to fix it in #
Hours first, because the question is asked most and the answer is cheapest to publish. Then a contact point an agent can use. Then price or availability if you sell something. Then the machine files — an llms.txt that names your real pages, and an entity map, which nobody in this corpus publishes and which therefore costs nothing to be first at. Everything after that is polish.
A free scan here reports which of these your site declares and which it only shows to humans.
What to publish, exactly #
For hours, an openingHoursSpecification array on the business node, one entry per day pattern, with opens and closes in 24-hour time; Open 24 hours is 00:00 to 23:59. For a contact route, a contactPoint with a telephone or email and a contactType. For price, an Offer with price and priceCurrency, or a priceRange if you will not commit to a number. Each of these is a few lines in the JSON-LD you almost certainly already have, and each turns a fact a human can read into one an assistant can use.
How the scan reads them #
The local-presence section scores opening hours, telephone and geo on the business node directly, and the E-E-A-T proxy rows check that a contact route is declared at all. The RDF reading added later counts every one of these as a triple, which is a useful way to see how little a page that only says we are an organisation actually states. Related: every contact address failed for one character, and what is entity SEO.
Every figure above came out of this scanner.
Point it at your own domain and see the same measurements, free.
The main product
Found this on your own site? We fix it for $749.
Scan free to see where you stand. The fix is one site, every finding implemented and re-measured, with a sealed before and after.
Questions this post answers
What share of sites publish llms.txt or an entity map?
Both are rare, and the specific-facts file is rarer than the declaration of existence by roughly an order of magnitude.
Why is declaring that you exist not enough?
An assistant asked a specific question needs the specific fact. A file that names your business without stating hours, service area or price answers nothing that was asked.
Which should I fix first?
The facts an assistant is actually asked for. Publishing another declaration adds a file; publishing the facts adds an answer.
What counts as a real author?
One with an identity that resolves somewhere else — a profile, a byline that appears across publications, an entity an engine can match. A name in a byline with no corroborating reference is a string, not an author.
Is a last-updated date enough on its own?
Only if it is true. A date that changes on every deploy stops meaning anything, and engines discount it once the pattern is visible. Change it when the content changes.
Related findings
Comments
Comments are read before they appear. Nothing is published automatically, and no account is needed.
Writing about this? Facts, live figures and marks — every number on that page is dated and traceable to a scan.