What it does, precisely
Structured data annotates facts already on the page so a machine does not have to infer them from layout. That is genuinely valuable: it removes ambiguity about which number is the price and which string is the opening time, and it is the difference between a parser guessing and a parser knowing.
What it does not do is get your page read. JSON-LD is delivered inside the same HTML document as everything else, so it inherits every delivery problem that document has. A blocked fetch takes the markup with it, and a page too large to be read carries its schema into the part that got truncated.
| If this is broken | Does more structured data help? |
|---|---|
| The fetch is blocked by a bot rule | No. Nothing in the page is read |
| Facts render only after JavaScript | No, unless the JSON-LD is server-rendered too |
| The response is enormous | Marginally. It is more bytes, not fewer |
| Facts are present but ambiguous | Yes. This is what it is for |
| Prose and markup disagree | No. More markup deepens the conflict |
The failure mode nobody mentions
The most common structured-data defect in our scans is not missing markup. It is markup that contradicts the visible text: a price updated in the template but not the JSON-LD, hours changed on the page but not in the schema, a product marked in stock by a block that no longer runs.
An assistant given two versions of a fact picks one, fluently, and nothing in the answer signals that there was a conflict. This is worse than having no structured data at all, because the confident wrong answer is indistinguishable from a right one.
The order that works
- Confirm the page is fetched and parseable. Everything else is downstream of this, including your markup.
- Fix disagreements before adding types. Diff the visible facts against the JSON-LD on one page of each template. Fix what conflicts.
- Cover the facts people ask about. Price, availability, hours, location, fees, eligibility. Coverage beats exotic types.
- Then serve the facts cheaply too. Content negotiation gives the parser the same facts without the document they were buried in, so it never has to reach the markup at all.