FAQPage + Service Schema: Two Jobs, One Page
We ran a structured data pass on our /ai page this week and landed on two schemas running side by side: FAQPage and Service. They look similar at first glance. They are not doing the same thing.
What FAQPage does
FAQPage schema marks up question-and-answer pairs so that Google and AI answer engines can extract them directly. When someone searches "what is a fractional AI operations partner" or "does Twenty1 Media serve Carmel Indiana," the page needs an answer that's already formatted for consumption, not buried three paragraphs into a wall of copy.
The pattern is simple: each FAQ entry gets a Question object with an acceptedAnswer. Google uses this for rich results in the SERP. Perplexity and ChatGPT use it when they summarize what a page says. You're not writing for ranking only. You're writing for the layer that happens before the click.
We structured five questions on the page, each written answer-first. The questions map to the actual queries that surface service businesses in local AI search: what the role is, which cities we cover, what the audit includes, what kind of businesses we help, and how pricing works. Every answer contains a geo signal. Hamilton County, Carmel, Fishers, Westfield, Noblesville, Kokomo, Indianapolis. Not once. In every answer where it's relevant.
What Service schema does
FAQPage tells search engines what you do and answers questions about it. Service schema tells them who provides it and where.
export function serviceSchema(input: ServiceSchemaInput) {
return {
"@context": "https://schema.org",
"@type": "Service",
name: input.name,
serviceType: input.serviceType,
description: input.description,
url: input.url,
provider: {
"@type": "LocalBusiness",
name: input.provider.name,
url: input.provider.url,
},
areaServed: input.areaServed.map((name) => ({ "@type": "City", name })),
};
}
The areaServed property is the part that matters for local queries. Each city gets its own City object with a name. When a search engine or AI assistant is deciding whether to surface a business in response to "AI automation help near Fishers," the areaServed array is direct evidence that the answer is yes. You're not relying on keyword density in body copy. You're telling the engine explicitly.
The provider block is equally direct. It links the service to a LocalBusiness entity. That entity can cross-reference with what's in the ProfessionalService schema on the home page, the NAP in the footer, and the Google Business Profile. Consistency across all of those is how you build entity confidence. Inconsistency across them is how you get ignored.
Why you need both
FAQPage without Service means search engines can read your answers but can't easily tie them to a provider and service area. Your FAQ answers a question about Hamilton County services, but the schema doesn't say you are a business that serves Hamilton County. That linkage lives in Service.
Service without FAQPage means you've declared what you do and where, but you haven't given AI answer engines the answer-shaped content they need to cite you. They might know you exist. They don't have clean text to surface when someone asks.
Together, the page does both jobs. The FAQ gives the answer engines something to quote. The Service schema gives them the entity attribution to quote it correctly.
The implementation detail that tripped us up
We initially rendered both schemas inside a single <script> tag as an array. That's valid JSON-LD, but some validators flag it. We split them into two separate JsonLd component calls instead, one per schema. Cleaner for debugging, no ambiguity in how parsers handle it.
The other thing worth noting: we keep the areaServed city list in src/content/local.ts alongside the NAP block. Same source used for the footer, the city landing pages, and now the Service schema. One list, no drift between where it appears.
If you're running a service business in Indiana and your site doesn't have these two schemas wired up, the page is invisible to the layer of AI search that's actually answering local queries right now. Start with our free operations audit and we'll tell you what else is missing.