People are usually surprised by the size of the first jump. A site scores in the thirties, someone spends an afternoon on it, and it scores in the seventies. That looks like the score is soft. It is not — it is that most of what we measure is a set of switches, and the first afternoon is spent finding the ones that are off.
The score is mostly switches, not dials
Consider what “structured data: 0” actually means. It rarely means the markup is mediocre. It usually means one of three things: there is none, there is some but it fails validation, or there is plenty but it is scattered across unconnected blocks so nothing can be resolved into an entity.
All three are binary conditions. None of them improve gradually. You do not move from invalid JSON-LD to slightly-less-invalid JSON-LD — you fix the comma and the whole category changes state.
The same is true across the other three areas:
- Access.
Disallow: /for GPTBot is on or off. A CDN returns 403 or 200. - Rendering. A crawler that does not execute JavaScript either receives your
content in the HTML or receives an empty
<div id="root">. - llms.txt. The file exists or it does not.
This is why the technical layer is worth doing first, and worth doing before anyone commissions content. It is the part of the problem with the highest ratio of movement to effort, and it is finite.
The four changes that move it most
In rough order of what we see move furthest per hour spent:
1. Removing a crawler block you did not know about. Usually a robots.txt rule added in 2023 by someone who has left, or bot protection switched on at the CDN by default during an upgrade. This one is often a single line and it gates everything else — markup a crawler cannot fetch scores nothing.
2. Getting content into the server response. If your product pages are client-rendered, the crawlers that do not execute JavaScript see nothing to assess. Server-side rendering or prerendering the key templates changes what every other check is looking at.
3. Replacing scattered JSON-LD with one connected graph. Four plugins each
emitting their own unconnected Organization is worse than one careful block,
because a parser has to guess which is authoritative. Consolidating into a
single @graph with stable @ids is often a day of work on a template, not a
site-wide content project.
4. Publishing llms.txt. Cheap, quick, and still uncommon enough to be a differentiator — though see the note on adoption for why that will not last.
Why the second month is slower than the first
This is the part worth being honest about, and it is why we would rather you heard it from us than discovered it.
Switches only flip once. Once robots.txt is clean, the page renders server-side and the graph is connected, you have collected essentially all of the cheap movement available. The score does not keep climbing at that rate, because the remaining distance is in the genuinely slow work: whether you have content that answers the questions your customers actually ask, whether anyone else on the internet corroborates what you say about yourself, and whether your catalogue data is accurate enough to be worth quoting.
A score that goes from 34 to 78 in a fortnight and then to 82 over the following quarter is not a stalled project. That is the expected shape.
What “movement” actually means here
One caution on interpretation. A visibility score measures whether the machine-readable conditions for being cited are met. It is a measure of readiness, not of outcome.
Rising from 30 to 80 means answer engines can now fetch, parse and resolve your site into entities and offers they could quote. Whether they do quote you depends on competition, corroboration and whether your content answers the question — none of which a technical score can see.
Treat the score as removing the reasons you are excluded. That is a real and necessary job, and it is not the same as a ranking.