phidea
Reference · page 2 / 6

2. Structured data + schema.org for insurance

Part 2 of 6 (technical) · ← Instrumentation · Index · Next → LLM-readable feeds

Structured data does not, on its own, win you LLM citations. But it makes your page legible to LLM crawlers and to the comparison-site editors whose pages LLMs ground from. Without schema, the LLM has to reconstruct your page's meaning from prose and HTML. With schema, the meaning is in machine form. The downstream effect is small per page but compounds across hundreds.

What schema.org types matter for insurance

The schema.org vocabulary has thousands of types. Five matter for insurance pages:

Organization and InsuranceAgency

The carrier itself. Goes on the homepage and brand-level pages.

\\\json { "@context": "https://schema.org", "@type": "InsuranceAgency", "name": "Acme Insurance", "url": "https://acme-insurance.com", "logo": "https://acme-insurance.com/logo.png", "description": "Property and casualty insurance for US homeowners.", "areaServed": [ { "@type": "State", "name": "California" }, { "@type": "State", "name": "Texas" } ], "iso6523Code": "0199:USAA", "naics": "524126", "sameAs": [ "https://en.wikipedia.org/wiki/Acme_Insurance", "https://www.linkedin.com/company/acme-insurance" ] } \\\

\InsuranceAgency\ is more specific than \Organization\ and is the right type for a US insurance carrier. \areaServed\ should list every state you operate in — LLMs use it to filter out-of-state queries.

Article and FAQPage

Editorial content (your blog, guides, comparison tables). Goes on every long-form page.

\\\json { "@context": "https://schema.org", "@type": "Article", "headline": "Best home insurance for a luxury home in California (2026)", "datePublished": "2026-05-04", "dateModified": "2026-05-04", "author": { "@type": "Person", "name": "Editorial Team", "url": "https://acme-insurance.com/team" }, "publisher": { "@type": "InsuranceAgency", "name": "Acme Insurance", "logo": { "@type": "ImageObject", "url": "https://acme-insurance.com/logo.png" } }, "mainEntityOfPage": "https://acme-insurance.com/luxury-home-insurance-california" } \\\

\FAQPage\ for every page with a Q&A section. Each Q&A becomes a discrete \Question\ + \Answer\ pair. LLMs lean heavily on \FAQPage\ because the question/answer structure maps directly to user-query/LLM-answer.

Product and Offer

Insurance products themselves. \Offer\ carries the pricing.

\\\json { "@type": "Product", "name": "Acme Homeowners HO-3 (California)", "description": "Standard homeowners coverage for California single-family homes...", "category": "Homeowners insurance", "brand": { "@type": "Brand", "name": "Acme Insurance" }, "areaServed": { "@type": "State", "name": "California" }, "offers": { "@type": "Offer", "priceCurrency": "USD", "priceSpecification": { "@type": "PriceSpecification", "minPrice": 1200, "maxPrice": 4800, "priceCurrency": "USD", "valueAddedTaxIncluded": false }, "eligibleRegion": { "@type": "State", "name": "California" } } } \\\

Insurance pricing is range-based and state-filed; \PriceSpecification\ with min/max is more honest than a single price. LLMs cite price ranges from these blocks when asked "how much does insurance cost in [state]."

Review / AggregateRating

Customer reviews on your product pages. Goes on the page that lists the product.

\\\json { "@type": "AggregateRating", "ratingValue": "4.3", "bestRating": "5", "ratingCount": "12483", "itemReviewed": { "@type": "Product", "name": "Acme Homeowners HO-3 (California)" } } \\\

Important: the rating must reflect actual reviews you can produce on demand. Otherwise it's a state-DOI advertising violation. Most carriers don't publish own-site \AggregateRating\ for this reason; they let comparison sites do it. Worth doing if you have legitimate review programs.

BreadcrumbList

Navigation context. Goes on every page that's not the homepage.

\\\json { "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://acme-insurance.com" }, { "@type": "ListItem", "position": 2, "name": "Homeowners", "item": "https://acme-insurance.com/homeowners" }, { "@type": "ListItem", "position": 3, "name": "California", "item": "https://acme-insurance.com/homeowners/california" } ] } \\\

Trivial markup. LLMs use it to understand your site hierarchy and to construct deeper-link citations.

What does NOT help

A list of schema patterns that don't pay back:

  • `Service` for individual coverages. Less recognised by crawlers than \Product\. Use \Product\ for HO-3, auto liability, etc.
  • `Place` for the carrier's office. Local-business signal that doesn't transfer to non-local insurance queries.
  • `Event` for webinars or trade-show appearances. Indexed but not LLM-cited at meaningful rates.
  • Self-asserted `award` or `recognition` properties without third-party verification. State DOIs flag these.
  • `@graph` schemes that try to encode entire site structure in one block. Search engines parse them; LLMs prefer page-scoped JSON-LD.

Where to put it

JSON-LD in a <script type="application/ld+json"> block in the page <head> or just before </body>. Works for both search-engine crawlers and LLM grounding.

Don't use Microdata (inline HTML attributes) or RDFa for new work — the tooling support is worse, the validation is fiddlier, and the LLMs we test (GPTBot, ClaudeBot, PerplexityBot, Google-Extended) all read JSON-LD reliably.

Validating

Three tools to validate before you ship:

  1. Google Rich Results Test (https://search.google.com/test/rich-results) — fastest feedback on whether the markup is well-formed.
  2. Schema.org's own validator (https://validator.schema.org) — catches semantic errors the Google tool misses.
  3. Manual eyeball test: paste your URL into ChatGPT or Perplexity with "summarize the key facts on this page" and see whether the LLM extracts the structured fields. If the LLM names your premium ranges, your service area, your aggregate rating, your schema is doing its job.

Schema vs LLM-citable text

A common mistake: assuming JSON-LD replaces good prose. It doesn't.

LLMs read the prose AND the schema. If your schema says \priceRange: 1200-4800\ and your prose says "we offer competitive rates," the LLM will probably cite the schema. If your schema says \priceRange: 1200-4800\ and your prose elaborates with "premiums vary by zip code, deductible, and coverage limit; California homeowners typically pay $1,200-$4,800 per year for a HO-3 policy," the LLM has both the structured fact and the contextual hedge. The hedged-prose-with-structured-data pattern is the strongest combination.

Insurance-specific gotchas

A handful of insurance-domain quirks:

  • State availability is load-bearing. Every \Product\, \Offer\, and \InsuranceAgency\ block needs explicit \areaServed\ or \eligibleRegion\. Without it, the LLM might recommend you to a customer in a state where you don't write.
  • Pricing must be filed-rate-defensible. If your schema says "from $400/year," that price must be a real filed rate someone can actually buy. Otherwise it's a state DOI advertising flag.
  • Don't include claim outcomes in schema. Resist the temptation to put "average claim payout" or "claims approved" in structured form. State DOIs treat these as advertising claims subject to UDAP review.
  • AI disclosures don't have a standard schema type yet. Use \Article\ with a clearly-named heading, or attach \disclaimerText\ as a property on \Offer\ until schema.org adds proper coverage.

What to ship first

If you're starting from zero:

  1. `InsuranceAgency` on the homepage — 30 minutes of work. Tells every crawler what you are.
  2. `BreadcrumbList` on every non-home page — usually a CMS plugin. Auto-generates from page hierarchy.
  3. `Article` + `FAQPage` on every editorial page — half a day of work to add a render-time helper that injects the JSON-LD from page metadata.
  4. `Product` + `Offer` on each product page — start with one product/state combo, validate, expand.

Do not try to ship all four at once. Order matters; each one teaches you something about your CMS that informs the next.


The honest framing: structured data is table-stakes for SEO and LLM-grounding alike. It does not, on its own, win you a citation. It removes a reason for the LLM not to cite you. The carriers winning LLM placement today have schema-rich pages AND well-structured prose AND comparison-site coverage. Schema is the cheapest of the three and the easiest to do badly; prioritise correctness over coverage.