Skip to content
SectionAnswer engines
Reviewed2026-08-01
Words1,290
Sources4
Answer engines

Structured data as content, not decoration

Why markup should be treated as a parallel statement of what a page says, written with the same care as the prose.

Short answer

Structured data is a statement about the page, made in a form a machine can parse without interpretation. It should be written deliberately, describe only what is visible on the page, and stay accurate as the page changes. Markup generated automatically and never reviewed is the most common source of contradictions between what a clinic says and what its markup claims.

Structured data is usually treated as a technical afterthought: install a plugin, tick the boxes, move on. That treatment produces markup that is present, syntactically valid and quietly wrong, which is the worst of the three available states.

The more useful framing is that markup is content. It is a second, parallel expression of what the page says, written for a reader that cannot infer, and it should be authored with the same care as the prose it accompanies.

What markup actually does

It removes interpretation. A page that says "open until six" requires a machine to work out which days, which time zone and which exceptions. An openingHoursSpecification block states it without ambiguity. That is the entire function: not persuasion, not ranking, disambiguation.

Google's introduction to structured data sets out what it is used for, and the general guidelines set the constraints: the markup must represent the content of the page, must not mislead, and must be visible to users where the guidance requires it.

Three rules that prevent most problems

  1. Only mark up what is on the page. If the FAQ answers are not visible, do not publish FAQPage markup. If the review is not shown, do not publish an aggregate rating.
  2. Make it identical to the visible text. Where the visible page says one thing and the markup says another, you have published a contradiction about yourself.
  3. Maintain it. Prices change, hours change, practitioners leave. Markup that was accurate in 2024 is a false statement in 2026, and nothing on the page reminds anyone it is there.
The plugin problem

Automatically generated markup is generated from templates and defaults. It frequently asserts a business type that is wrong, an address that is stale, an aggregate rating pulled from a widget, or an author that is the content management system user account. Read your own markup as text at least once, on each page type. Most clinics have never done this.

The types a clinic actually needs

PagePrimary typeAlso useful
HomepageMedicalClinic or LocalBusinessWebSite, Organization
Location pageMedicalClinic per sitePostalAddress, GeoCoordinates, openingHours
Treatment pageMedicalWebPageMedicalProcedure, FAQPage, BreadcrumbList
Practitioner pagePhysician or PersonworksFor, memberOf, sameAs
ArticleArticle or MedicalWebPageauthor, datePublished, dateModified

Anything beyond that list is usually solving a problem the clinic does not have. Depth in the types you use beats breadth across types you use badly.

Writing it deliberately

Treat each block as a set of claims and check each claim. Is the name exactly the canonical name? Is the address in the canonical format? Is the phone number the canonical one? Is the specialty accurate and defensible? Does the opening hours block include the exceptions? Is every URL in sameAs a record you stand behind?

Treatment page: MedicalWebPage with breadcrumb and organisation referenceValid JSON-LD
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "MedicalWebPage",
      "@id": "https://example.co.uk/treatments/acne-scarring#page",
      "url": "https://example.co.uk/treatments/acne-scarring",
      "name": "Acne scarring treatment: what it involves and who it suits",
      "description": "How acne scarring is assessed and treated, what recovery looks like and who is not suitable.",
      "inLanguage": "en-GB",
      "datePublished": "2026-02-10",
      "dateModified": "2026-07-30",
      "medicalAudience": {
        "@type": "MedicalAudience",
        "audienceType": "Patient"
      },
      "specialty": "https://schema.org/Dermatologic",
      "publisher": {
        "@id": "https://example.co.uk/#clinic"
      },
      "about": {
        "@type": "MedicalCondition",
        "name": "Acne scarring"
      },
      "lastReviewed": "2026-07-30",
      "reviewedBy": {
        "@type": "Physician",
        "name": "Dr Example",
        "medicalSpecialty": "https://schema.org/Dermatologic"
      }
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://example.co.uk/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Treatments",
          "item": "https://example.co.uk/treatments"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Acne scarring",
          "item": "https://example.co.uk/treatments/acne-scarring"
        }
      ]
    }
  ]
}

Using stable identifiers

Give the organisation a stable @id, typically a fragment URL on your own domain, and reference it from other blocks rather than repeating the organisation details on every page. That makes the graph explicit: one organisation, referenced many times, rather than forty separate organisation declarations that may drift apart. The JSON-LD specification defines the mechanics.

Validating properly

  1. Parse the JSON. A trailing comma makes the whole block invisible, and it fails silently.
  2. Run the URL through the Rich Results Test to see what Google can read.
  3. Run it through the Schema Markup Validator for vocabulary correctness beyond Google's subset.
  4. Read the block as prose and ask whether every sentence it implies is true.
  5. Check the Search Console enhancement reports for errors appearing at scale.

Step four is the one that gets skipped and the one that catches real problems, because syntactic validity says nothing about truth.

SURFACE 08

Your own website

HIGH CONTROL
What controls it
  • Every byte a crawler receives, and the speed it arrives at
  • The entity claims: name, address, identifiers, sameAs, service list
  • Canonical URLs, hreflang if used, and the internal link graph
  • Whether the page answers the question it was built to answer
What does not
  • How the answer is displayed once it leaves your server
  • Whether a third party republishes an outdated version of your facts
How to test it
  • Crawl the whole site and compare the URL list against the sitemap
  • Validate every JSON-LD block against the Rich Results Test
  • Measure field data, not only lab scores, for Core Web Vitals

Aggregate ratings, carefully

Review markup is the area where clinics most often publish something they should not. Aggregate rating markup must reflect reviews that are genuinely about the entity and visible on the page, and must not be self-serving in the ways the guidelines prohibit. Marking up a rating collected on a third-party platform as though it were on your page is a policy problem, not a clever shortcut.

Medical content markup

Where a page carries clinical information, MedicalWebPage is the appropriate type and it supports properties that matter: the specialty, the intended audience, and the aspect of the subject covered. Using it accurately tells a system that the page is clinical content published by a clinical organisation, which is a more precise statement than Article.

Putting it on a schedule

Add markup review to the same cycle as content review. When a page is edited, the markup is checked. Twice a year, every page type is read as text and verified against reality. This costs very little and it prevents the state most clinic sites are in: valid, present, and no longer true.

No commercial links on this page

This article contains no affiliate links, no sponsored placements and no links to any agency, supplier, clinic or commercial brand. Nobody paid for it, nobody previewed it and no directory advertiser had sight of it. This publication does not rank or recommend agencies anywhere on the site.

Nothing here is medical or legal advice. Regulatory material summarises published guidance. Read the source before relying on it. Our full position is in the editorial standards.

Sources

Primary documentation and regulators only. We do not cite opinion surveys as though they were measurements of a system.

Frequently asked questions

Does structured data improve rankings?

It is not a ranking factor in itself. It makes a page's meaning unambiguous and can qualify a page for richer presentation, both of which are worth having, but the documentation does not describe it as a ranking input.

Can I add FAQ markup to any page?

Only where the questions and answers are visible on the page. The general guidelines require markup to represent page content, and FAQ markup on a page without a visible FAQ breaches that.

Is a plugin enough?

It is a starting point. Read the output as text on each page type and check every claim it makes. Plugin defaults commonly assert the wrong business type, a stale address or an invented author.

Should aggregate rating markup include reviews from other platforms?

No. Review markup must reflect reviews that are genuinely about the entity and appropriately presented on the page. Importing an external score into your own markup is a policy problem.

How do I know my markup is valid?

Parse the JSON, run the Rich Results Test and the Schema Markup Validator, then read the block as prose and confirm every implied statement is true. The last step is the one that finds real errors.

The surfaces move. We write when they do.

A short briefing on documented changes to the surfaces clinics are discovered on. One labelled sponsor slot per issue, no rankings, no invented numbers.