Schema markup does not buy you mentions in ChatGPT, Gemini or Perplexity. No structured data format is a ranking factor for AI answers, and nobody at those companies has published a schema-based inclusion rule. What markup does is remove ambiguity. When a crawler or retrieval system lands on your page, JSON-LD tells it which string is the brand name, which number is the price, which address is the storefront, and which block of text is a question and its answer. That is the whole value proposition, and it is worth an afternoon, not a quarter.
The practical question is where to spend that afternoon. Five types cover most of what a marketing site or small ecommerce catalog actually needs.
What each type communicates
Organization
Organization is your entity card. It states the legal or trading name, URL, logo, and often sameAs links to profiles you control. The sameAs array is the part that earns its keep: it is how you connect the name on your site to the LinkedIn page, the Crunchbase entry, and the Wikipedia article, so a system has fewer ways to confuse you with a company that shares your name.
One caution specific to this topic. sameAs is a claim, not a verification. Listing a profile that does not exist, or that belongs to someone else, weakens the signal rather than strengthening it.
Product
Product is the type that most directly maps to commercial questions. Name, image, description, brand, sku, and an offers object with price, priceCurrency, and availability. When someone asks an assistant which standing desk under $600 has a memory preset, the answer is assembled from whatever text the system retrieved. Clean Product markup makes the price and availability unambiguous, which matters most when those values change and your visible page copy lags behind.
Product markup without accurate price and availability is worse than none. Stale structured data that contradicts the page is a documented way to lose rich results in Google Search, and it gives an AI system a reason to distrust the rest of the page.
LocalBusiness
LocalBusiness extends Organization with address, geo coordinates, telephone, and openingHoursSpecification. If you have physical locations, this is the type that answers "is this place open right now" and "where exactly is it." Use the most specific subtype you can honestly claim, such as Restaurant or Dentist, rather than the generic parent.
FAQPage
FAQPage marks up question-and-answer pairs. It is the type most people reach for when they think about AI search, and it is also the one most often abused: sites mark up questions that appear nowhere on the page, or write answers in the markup that are longer and more promotional than the visible text.
Be clear about the limits. Google has narrowed how FAQ rich results appear in Search, and no vendor has stated that FAQPage markup increases the chance of being cited in an AI answer. Treat it as a way to label content you were already publishing, not as a citation lever.
Article
Article (and its subtypes like NewsArticle and BlogPosting) carries headline, author, datePublished, and dateModified. The useful fields are the dates. A system trying to decide whether your comparison post is current reads dateModified. If you update a post and leave the date untouched, you have thrown away a free, accurate signal.
A quick comparison
| Type | Main fields | What it disambiguates | Where it belongs |
|---|---|---|---|
| Organization | name, url, logo, sameAs | Who you are, and which profiles are yours | Homepage, About page |
| Product | name, brand, sku, offers | Price, currency, availability | One page per product |
| LocalBusiness | address, geo, telephone, hours | Location and open hours | Each location page |
| FAQPage | mainEntity, Question, acceptedAnswer | Which text is a Q&A pair | Pages with real Q&A content |
| Article | headline, author, datePublished, dateModified | Authorship and freshness | Posts, guides, news |
JSON-LD examples
JSON-LD is the format Google recommends and the one that is easiest to maintain, because it lives in a script tag instead of being woven into your HTML attributes. Here is a minimal Organization block:
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Northline Supply",
"url": "https://example.com",
"logo": "https://example.com/logo.png",
"sameAs": [
"https://www.linkedin.com/company/northline-supply",
"https://www.crunchbase.com/organization/northline-supply"
]
}
A Product with an offer:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Adjustable Standing Desk, 60 inch",
"brand": { "@type": "Brand", "name": "Northline" },
"sku": "NL-DESK-60",
"offers": {
"@type": "Offer",
"price": "549.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://example.com/desks/standing-60"
}
}
A LocalBusiness with hours:
{
"@context": "https://schema.org",
"@type": "HardwareStore",
"name": "Northline Supply — Eastside",
"address": {
"@type": "PostalAddress",
"streetAddress": "1420 East Main St",
"addressLocality": "Columbus",
"addressRegion": "OH",
"postalCode": "43205",
"addressCountry": "US"
},
"telephone": "+1-614-555-0142",
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "07:00",
"closes": "19:00"
}]
}
An FAQPage with one pair:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "Do you deliver on Saturdays?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. Saturday delivery is available within 30 miles of the Eastside store for orders placed before 2pm Friday."
}
}]
}
And an Article header:
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "How to Choose a Standing Desk Height",
"author": { "@type": "Person", "name": "Dana Whitfield" },
"datePublished": "2026-03-04",
"dateModified": "2026-09-12",
"mainEntityOfPage": "https://example.com/blog/standing-desk-height"
}
If hand-writing JSON is the thing stopping you, our free schema markup generator is a form that builds JSON-LD for Organization, LocalBusiness, Product or FAQPage. Fill in the fields, copy the output into your page template, then validate it.
The rule that matters more than the type
Google's structured data guidelines are explicit that markup must represent the visible content on the page. The same principle is the sensible default everywhere: the JSON-LD describes what a human sees, not what you wish the page said.
That means:
- The price in
offersmatches the price on the page, including sale pricing. - Every FAQ question and answer in the markup appears in the page text, worded the same way.
dateModifiedreflects a real edit, not a nightly automated touch of the template.- The Organization name matches the name in your footer and your About page.
- Review and rating fields are only used for reviews you actually display and can substantiate.
Markup that describes invisible content is the single most common way sites turn a helpful signal into a liability. If a field cannot be backed by visible text, delete the field.
How markup fits with crawling
Structured data is downstream of access. If a crawler is blocked, no amount of JSON-LD matters. The OpenAI crawler set is a good example of why the distinctions matter: OAI-SearchBot is the one tied to appearing in ChatGPT search, while GPTBot is for foundation-model training and blocking it does not affect search. We covered that split in GPTBot vs OAI-SearchBot vs ChatGPT-User. Anthropic draws a similar line between ClaudeBot, Claude-User, and Claude-SearchBot, and Perplexity separates PerplexityBot from Perplexity-User.
There is also a file some people pair with schema, llms.txt, which is a proposed convention rather than a documented requirement of any of these systems. Schema markup has a real specification behind it. Keep the two in separate buckets when you plan.
A realistic order of work
- Add Organization to the homepage and confirm the name and
sameAslinks are accurate. - Add Product markup to your top revenue pages, wired to the same data source that renders the visible price so the two cannot drift.
- Add LocalBusiness to each location page with correct hours.
- Add Article dates to your blog template and start updating
dateModifiedwhen you actually edit a post. - Add FAQPage only on pages that already contain visible Q&A content.
Validate each addition with Google's Rich Results Test and the Schema Markup Validator before shipping, and re-check after any template change.
Next step
Open your homepage source and search for application/ld+json. If nothing comes back, start there: build an Organization block with the schema generator, paste it into your site header template, and validate it. Then pick your three highest-traffic product or service pages and do the same. One afternoon, five types, no guessing about which fields are real.