FAQPage + HowTo Schema Snippets
Validated JSON-LD you can paste today. The same schemas Xpand ships on every service and city page.
Why this exists
FAQPage schema is the highest-leverage single change you can make for GEO. Across Xpand audits, pages with FAQPage schema get cited in Perplexity 40% more often than equivalent pages without. Most teams either skip schema entirely or use the wrong type. Article schema where FAQPage would fit, FAQPage with one question, or Author/Organization schema with broken @id references.
Structured data is the single highest-leverage GEO change for most sites. AI engines and Google use schema.org JSON-LD as the canonical source of truth about what each page contains. These snippets are battle-tested on xpandmedia.io and validate cleanly in Google Rich Results Test and Schema.org validator.
Organization (site-wide, in your root layout)
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://yourdomain.com/#organization",
"name": "Your Company",
"url": "https://yourdomain.com",
"logo": "https://yourdomain.com/logo.png",
"description": "What you do in one sentence.",
"address": {
"@type": "PostalAddress",
"streetAddress": "Building A1",
"addressLocality": "Dubai",
"addressCountry": "AE"
},
"sameAs": [
"https://www.linkedin.com/company/yourcompany",
"https://www.crunchbase.com/organization/yourcompany",
"https://www.wikidata.org/wiki/Q123",
"https://x.com/yourcompany"
]
}
FAQPage (highest GEO ROI)
{
"@context": "https://schema.org",
"@type": "FAQPage",
"@id": "https://yourdomain.com/page#faq",
"isPartOf": { "@id": "https://yourdomain.com/#website" },
"mainEntity": [
{
"@type": "Question",
"name": "What does the service include?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Self-contained 2-4 sentence answer. No external context needed. Names the entity and a specific number or platform."
}
}
]
}
FAQPage schema lifts AI citation rates the most. Xpand audits show pages with 4+ FAQ entries get cited in Perplexity 40% more often than equivalent pages without.
BreadcrumbList (every non-home page)
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://yourdomain.com" },
{ "@type": "ListItem", "position": 2, "name": "Services", "item": "https://yourdomain.com/services" },
{ "@type": "ListItem", "position": 3, "name": "Page Name", "item": "https://yourdomain.com/services/page-name" }
]
}
HowTo (for step-by-step articles)
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to set up server-side tracking",
"totalTime": "PT2H",
"estimatedCost": { "@type": "MonetaryAmount", "currency": "USD", "value": "0" },
"step": [
{
"@type": "HowToStep",
"name": "Create a server-side GTM container",
"text": "Open Google Tag Manager, create a new container, select Server as the type."
}
]
}
Article (every blog post)
{
"@context": "https://schema.org",
"@type": "Article",
"@id": "https://yourdomain.com/blog/post-slug#article",
"headline": "Post title",
"description": "Meta description.",
"datePublished": "2026-04-15T09:00:00Z",
"dateModified": "2026-04-30T10:00:00Z",
"author": { "@type": "Organization", "name": "Your Company" },
"publisher": { "@id": "https://yourdomain.com/#organization" },
"mainEntityOfPage": "https://yourdomain.com/blog/post-slug",
"image": "https://yourdomain.com/blog/post-slug/og.png"
}
Service (every service or product page)
{
"@context": "https://schema.org",
"@type": "Service",
"@id": "https://yourdomain.com/service-name#service",
"name": "Service Name",
"serviceType": "Service Category",
"provider": { "@id": "https://yourdomain.com/#organization" },
"areaServed": [
{ "@type": "City", "name": "Dubai" },
{ "@type": "City", "name": "Singapore" }
],
"url": "https://yourdomain.com/service-name"
}
Validation
-
1
Paste each block into Google Rich Results Test (search.google.com/test/rich-results)
Confirm the test passes with no errors. Warnings are fine.
-
2
Run Schema.org Validator (validator.schema.org) for cross-engine compatibility
Bing, Perplexity, and ChatGPT use schema.org's validation rules, not just Google's.
-
3
Verify the @id graph by ensuring every reference resolves
If a page references Organization @id, the Organization schema must be loaded somewhere on the page (root layout or inline).
How to use it well
Paste the relevant block, replace placeholders with your actual data, then validate in two places: Google Rich Results Test and Schema.org Validator. Both must pass before deploy. Use stable @id values across the site so engines build one entity graph instead of fragmenting your brand across pages.
What good looks like
Live FAQPage schema rendered on xpandmedia.io/geo. Cited verbatim by Perplexity within 14 days of publish.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"@id": "https://xpandmedia.io/geo#faq",
"isPartOf": { "@id": "https://xpandmedia.io/#website" },
"mainEntity": [
{
"@type": "Question",
"name": "What is GEO?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Generative Engine Optimization (GEO) engineers content, schema, and entity authority so a brand is cited in generative AI answers (ChatGPT, Gemini, Perplexity, Claude, Microsoft Copilot)."
}
}
]
}
FAQ
Where do I put the JSON-LD?
In a script tag with type='application/ld+json' inside the page <head>. In Next.js, render via the JsonLd component or next/script with strategy='afterInteractive'. Server-rendered output is safest for AI crawlers.
How many schemas can a single page have?
No hard limit. Xpand pages typically run 3-5 schemas: Organization (root), WebSite (root), BreadcrumbList (page), and the page-type schema (Service / Article / FAQPage). Use stable @id values so engines can dedupe.
Will Google penalize over-schema'd pages?
Not for legitimate, accurate schema. Google penalizes manipulative schema (FAQ schema added to navigation pages, fake review schema, etc.). Match the schema to the page intent and you are fine.
Do I need schema if I have great content?
Yes. Schema is how AI engines build their knowledge graph of your entity. Two pages with identical content rank differently when one has clean schema and the other does not. The lift is most visible in Perplexity and Google AI Overviews.