The same clinic, built twice. Only one can be read.
We build your site before we talk, and that build is the reference. Here is one, made before there is a client to point at: a clinic homepage in the shape the audit kept finding, and the same content rebuilt the way we build. Both are real pages you can open. What separates them is counted further down.
A specimen, not a case study. We have written both sides, and we say so at the top.
Open them both. They say the same thing.
Same practice, same six services, same hours, same headline. One of them hands all of that to a machine. The other hands over an empty box and a container that is filled in later. Both are a single page on purpose — a real build follows the structure of the site it came from, and each says so at the top.
Before. The headline is a picture. The six services are written into the carousel by a script after the page arrives. There are no questions answered anywhere on it.
After. The headline is text, set to look like a headline. Every service is its own heading. The four questions patients actually ask are answered on the page, and marked up so they can be quoted.
What each build hands to a machine.
Five counts, taken from the HTML each of those two URLs serves — the bytes, before any JavaScript runs. That is where a crawler starts, and on the before build it is also where it stops. Three of them are given against the total on the page, so you can see how much is being lost and not only which way it goes.
Headings a machine can readEvery h1–h6 element whose text is not empty, against every heading on the page.
3 of 5 headings
17 of 17 headings
Headings shipped as a pictureEvery h1–h6 element with no text in it, holding an image instead.
2 of 5 headings
0 of 17 headings
FAQ schemaA JSON-LD block declaring itself an FAQPage.
None
Present
Structured data blocksJSON-LD scripts. In the after build: a practice record and the questions.
0
2
Body text a crawler receivesCharacters in the HTML body, against every character a visitor can read once the page has loaded.
716 of 1,506 characters
2,629 of 2,629 characters
How these five numbers were counted
Each URL was fetched and parsed as text with Python's standard-library HTML parser — no browser, no JavaScript, nothing rendered. Every row is a count over that document, so you can reproduce all five from the same two pages. The script that produced them is at /tools/measure-specimen.py, and it needs nothing installed.
- Headings a machine can read
- Every
h1–h6element whose text content is not empty after collapsing whitespace. The denominator is everyh1–h6element in the document, readable or not. - Headings shipped as a picture
- Every
h1–h6element whose text content is empty and which contains at least oneimg, against the same denominator. Two of them in the before build: the hero headline and the services title. - FAQ schema
- Whether any
application/ld+jsonblock declares"@type": "FAQPage". - Structured data blocks
- Every
script type="application/ld+json"element. The after build has two: aDentistrecord carrying the hours and services, and theFAQPagerecord carrying the four answers. - Body text a crawler receives
- Every text node inside
bodyand outsidescriptandstyle, joined, whitespace collapsed to single spaces, then counted in characters. Thetitleis head, not body, and is not counted. - … against what a visitor can read
- The same body text, plus whatever the page's own script writes into it after loading. In the before build that is the six services, held in a JavaScript array in
before.jsand injected into the carousel: 790 characters that a visitor swipes through and a crawler is never handed. The after build has no such script, which is why its two figures are the same number.
One thing to subtract yourself. 878 of the after build's 2,629 characters are the four patient questions and their answers — content the before build never carried in any form, because it answered nothing. Take those out and it is 1,751 characters against 716: the same services, the same hours, the same headline, and nearly two and a half times as much of it reaching a machine. The first four rows are unaffected by that subtraction.
And two notes on the last row. Both builds carry the same two specimen banners at the top of the page, which is why both totals include them. Open the before build with JavaScript turned off and a browser reports 716 characters, exactly the figure above; turn JavaScript on and it reports 1,507 rather than our 1,506, because inserting the six slides splits one run of whitespace into two. We count the strings, not the gap between them.
Nothing in the before build is broken. That is the problem.
It loads fast, it reads well, it works on a phone. Every one of its problems is invisible to the person who owns it, because every one of them is in the markup — and the markup is the only part a machine ever sees.
-
The headline is a picture
Custom type, exact spacing, perfectly on brand — and set into the page as an image with no text alternative. A patient reads it. A crawler receives a heading with nothing in it. 17 of 19 clinic sites we audited hid their main headline from search engines as an image.
-
The services arrive after the page does
Six services, one at a time, in a carousel a visitor swipes through. The copy lives in a script and is written into the page once it has loaded. What the visitor swipes through, the crawler was never handed.
-
Nothing answers a question
Cost, how long it takes, whether you can be seen today, where to park. The before build never answers any of them, so nothing can quote it on any of them. 0 of 42 clinic homepages we audited answered patient questions on the page (no FAQ).
-
No structure a machine can read
No question-and-answer markup, no practice record, no opening hours in any parseable form. Organised to a patient, one undifferentiated blob to a machine.
Two of the five patterns we describe on the product page are not reproduced here — answers locked inside a PDF, and having no way to measure what visitors do. Those need a file and an audience, not markup, so a specimen cannot honestly show them.
Yours is the one that counts.
This page is a specimen, and a specimen only proves we can build. We build your site first — from what you already have, or from scratch. This one is a rebuild because there was a site to start from; when there is no site, or nothing on it can be reached, we build from nothing instead. Either way it is the build we send you, not this page, that you should judge us on.
A link if you have one, the name of the practice if you don't. Back to the clinics page →
