Technical SEO

Schema Markup for AI Search: The Structured Data That Gets You Cited in 2026

AI engines lean on structured data to extract facts about your business. This guide covers the five schema types that move AI citations for local businesses — LocalBusiness, FAQPage, Service, Person, and Article — with copy-paste JSON-LD examples.

Ember AEO 8 min read

AI engines decide what to say about your business by extracting facts from sources they trust. Schema markup is how you hand them those facts directly: machine-readable statements about who you are, what you do, where you serve, and what questions you answer. For a San Diego business competing for AI citations, five schema types do most of the work, and you can implement all of them in an afternoon.

This guide covers each type with working JSON-LD, in priority order.

Why Structured Data Matters More in the AI Era

A traditional search engine matched keywords. A generative engine builds an internal model of your business as an entity: a thing with a name, a category, a location, services, people, and relationships to other entities. It assembles that model from your site, your Google Business Profile, directories, and press mentions.

Prose makes the engine infer. Markup lets it extract. When your homepage states in JSON-LD that you’re a Dentist with areaServed: San Diego offering Invisalign, no inference is required. The fact arrives pre-parsed, and pre-parsed facts are the ones that survive into answers.

Two practical effects follow:

  • Eligibility. Google AI Overviews and rich results draw on the same structured data pipeline. Pages with valid markup qualify for surfaces unmarked pages don’t.
  • Accuracy. Engines describe marked-up businesses more precisely. Vague entity data produces vague (or wrong) AI descriptions, and a wrong description in ChatGPT costs you the customer who read it.

1. LocalBusiness: Your Entity’s Anchor

Every local business site needs one LocalBusiness block, sitewide, usually in the layout. Use the most specific subtype that fits: Attorney, Dentist, Plumber, Restaurant, AccountingService. Specific subtypes map your business to a category engines already understand.

{
  "@context": "https://schema.org",
  "@type": "Plumber",
  "name": "Harbor Plumbing Co.",
  "url": "https://harborplumbingsd.com",
  "telephone": "+1-619-555-0142",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "4180 Morena Blvd",
    "addressLocality": "San Diego",
    "addressRegion": "CA",
    "postalCode": "92117"
  },
  "areaServed": ["San Diego", "La Mesa", "Chula Vista", "El Cajon"],
  "knowsAbout": ["water heater repair", "repiping", "slab leak detection"],
  "sameAs": [
    "https://www.yelp.com/biz/harbor-plumbing-san-diego",
    "https://www.google.com/maps/place/..."
  ]
}

Three properties here punch above their weight:

  • areaServed tells engines exactly which “near me” and city-level queries you’re a candidate for.
  • knowsAbout declares topical expertise in plain terms, and it’s one of the few places you can do that explicitly.
  • sameAs links your website entity to your profiles elsewhere, letting engines merge signals that would otherwise stay fragmented across the web.

The values must match your Google Business Profile and directory listings exactly. Inconsistent NAP data in markup is worse than no markup, because you’re feeding the contradiction to the engine yourself.

2. Service: One Block Per Service

A generic LocalBusiness block says you exist. Service blocks say what you sell. Put one on each service page:

{
  "@context": "https://schema.org",
  "@type": "Service",
  "serviceType": "Tankless Water Heater Installation",
  "provider": { "@type": "Plumber", "name": "Harbor Plumbing Co." },
  "areaServed": "San Diego, CA",
  "description": "Same-week tankless water heater installation with permits handled, serving all of San Diego County."
}

When a customer asks an AI “who installs tankless water heaters in San Diego,” the engine is matching that prompt against service-level facts. Businesses that only describe services in paragraph prose make the engine work harder than businesses that declare them.

3. FAQPage: The Highest-Leverage Markup for AEO

Question-and-answer content is the most extractable content format in AI search, and FAQPage schema makes the extraction trivial. Each Q&A pair becomes a discrete, quotable fact:

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [{
    "@type": "Question",
    "name": "How much does a tankless water heater cost installed in San Diego?",
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "Most San Diego installations run $3,800–$6,500 including the unit, permits, and labor. Gas line upgrades, when required, add $500–$1,500."
    }
  }]
}

Two rules keep this markup working for you instead of against you:

  • The questions and answers must appear visibly on the page. Markup for invisible content violates Google’s guidelines.
  • Answer the question with specifics in the text field itself. An answer that says “costs vary, contact us” gives the engine nothing to cite.

Write the questions the way customers say them out loud, with the city name where it’s natural. Those are the prompts engines field every day.

4. Person: Put Real Experts Behind the Content

E-E-A-T runs on people. A Person block connects your content to a credentialed human, which both Google’s quality systems and generative engines weigh when deciding whom to trust on a topic:

{
  "@context": "https://schema.org",
  "@type": "Person",
  "name": "Maria Delgado",
  "jobTitle": "Master Plumber, License #C-36-1048821",
  "worksFor": { "@type": "Plumber", "name": "Harbor Plumbing Co." },
  "knowsAbout": ["California plumbing code", "tankless systems"],
  "sameAs": ["https://www.linkedin.com/in/mariadelgado-sd"]
}

Add this to your about and team pages, and reference the person as author in article markup. Licensed professions in particular (law, medicine, contracting, finance) should include license numbers; they’re verifiable facts, and verifiable facts are what entity grounding is made of.

5. Article: Attribution for Your Blog

Every post should carry Article (or BlogPosting) markup with a real author, publish date, and update date:

{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "How Long Does a Water Heater Last in San Diego's Hard Water?",
  "author": { "@type": "Person", "name": "Maria Delgado" },
  "datePublished": "2026-05-20",
  "dateModified": "2026-05-20",
  "publisher": { "@type": "Organization", "name": "Harbor Plumbing Co." }
}

dateModified matters more than it used to. Perplexity and ChatGPT search both favor fresh sources, and an honest update date on a refreshed article is a recency signal you control.

Implementation Checklist

  1. Add one LocalBusiness subtype block sitewide with areaServed, knowsAbout, and sameAs.
  2. Add a Service block to every service page.
  3. Add FAQPage markup wherever the page visibly answers questions, with specific answers.
  4. Add Person blocks for credentialed team members and wire them into Article markup as authors.
  5. Validate every template at validator.schema.org and the Rich Results Test, using live URLs.
  6. Re-check after any site redesign. Markup silently breaking during a rebuild is the most common way businesses lose it.

Schema markup won’t rescue thin content or a weak entity footprint, and it works alongside the rest of the AEO stack: answer-first content, a complete Google Business Profile, and earned citations. But of everything in that stack, it’s the cheapest item to ship and the one most businesses still skip. An afternoon of JSON-LD puts you ahead of most of your San Diego competitors on a signal the engines read directly.

schema markup structured data JSON-LD technical SEO AI search

Frequently Asked Questions

Does schema markup help with AI search?

Yes. Schema markup gives AI engines machine-readable facts about your business — what you do, where you serve, who works there, what questions you answer. Engines that retrieve your pages can extract these facts with high confidence instead of inferring them from prose, which raises the odds you're described accurately and named in answers. Google has also confirmed structured data feeds AI Overviews the same way it feeds rich results.

Which schema types matter most for a local business?

Five types do most of the work: LocalBusiness (or a specific subtype like Attorney or Dentist) for entity facts, Service for each service you offer, FAQPage for question-and-answer content, Person for the people behind the business, and Article with author attribution for blog content. Everything else is situational.

Should I use JSON-LD or microdata?

JSON-LD. It's Google's recommended format, it lives in a single script tag instead of being woven through your HTML, and it's far easier to maintain and validate. Every example in this guide uses JSON-LD.

How do I test my schema markup?

Use Google's Rich Results Test (search.google.com/test/rich-results) to check eligibility for rich results, and the Schema.org validator (validator.schema.org) to catch structural errors. Test the live URL, not just the code, so you confirm the markup ships in the rendered page.

Can schema markup hurt my rankings?

Markup that misrepresents your page — fake reviews, FAQ schema for questions the page never answers, services you don't offer — can earn a manual action from Google and erodes the consistency AI engines key on. Accurate markup carries no downside.

Work with Ember

Ready to get your business cited by AI?

Book a free discovery call and we'll audit your current AI citation share, local rankings, and entity footprint — then tell you exactly what to fix first.