Guide
Schema markup for AI search: Organization, Product, FAQ, and Article
JSON-LD examples for Organization, Product, FAQPage, and Article. The markup has to match the page. No invented ratings. Google stopped showing FAQ rich results on 7 May 2026.
13 October 2026 · CiteScore Team · 11 min read
Schema markup is a labeled copy of facts the page already states. JSON-LD, a script tag with type="application/ld+json", is the format Google recommends because it is easier to keep next to the HTML than attributes scattered through the layout. The four blocks below are Organization, Product, FAQPage, and Article. Each one is valid only when a person can read the same facts on that URL.
None of them is a ranking file, and none of them makes ChatGPT, Perplexity, Claude, or Google AI Overviews cite you. The free check lists the JSON-LD types on the homepage. The $39 audit looks for markup that matches the copy. We do not log into those products. A shorter comparison of what schema changes, and what a rank report still does not say, is GEO vs SEO.
The rule before the script
- The name in the script is the name in the title, the H1, and the footer. A nickname in JSON-LD and a legal name in the footer describes two entities.
- A price, a date, and a description in the script are the price, the date, and the description on the page. Do not add a field to fill a template.
- Leave out
aggregateRatingandreviewunless the page shows a rating you can support. This site does not publish one, so the Product example has none. - Put the script in the HTML the server sends. Text that appears only after JavaScript runs is text many crawlers never read.
Organization
Use Organization on the page that identifies the company: the homepage or an About page. name and url are the fields that stop a parser guessing. Add logo only when that URL is a real image file a crawler can fetch. The CiteScore mark in the header is drawn in the page, not served as an image file, so this example has no logo. Add sameAs only for profiles that are actually yours. The description matches the footer on this site.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "CiteScore",
"url": "https://citescore.vercel.app",
"description": "A one-time GEO audit for indie SaaS founders and small SEO agencies."
}
</script>If you copy this onto another site, replace the name, the URL, and the description. Pasting CiteScore’s name onto your domain describes the wrong organization.
Product
Use Product on the page that sells the thing, with an Offer for the price that page shows. This example is the CiteScore audit: one public URL, a 0–100 score, about ten fixes, delivered as a PDF for $39. The price is the number on the audit page. There is no availability field, because a checkout that is not configured on a given deploy should not be marked in stock by a template. There is no rating.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "CiteScore GEO audit",
"description": "A one-time audit of one public URL: a 0–100 CiteScore and about ten prioritized fixes, delivered as a PDF.",
"brand": {
"@type": "Brand",
"name": "CiteScore"
},
"offers": {
"@type": "Offer",
"price": "39",
"priceCurrency": "USD",
"url": "https://citescore.vercel.app/geo-audit"
}
}
</script>Put this block on the URL in offers.url, not on every guide. A guide that mentions a price is not the product page. price is a string so a decimal such as 39.00 survives. priceCurrency is the ISO code, here USD. Change both if your price is different. Do not invent a sku, a gtin, or a review count to look complete.
FAQ
FAQPage is a list of questions the page itself answers, one accepted answer each. The three pairs below are the questions in the next section, and they are the FAQPage script this page publishes. The FAQ schema generator emits the same shape from questions you type. It uploads nothing.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Does JSON-LD make an answer engine cite the page?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No. JSON-LD labels facts that are already in the HTML. It does not rank the page, and it does not create a citation. A fact that exists only inside the script, or only inside an image, is a fact a person on the page cannot see. Write the sentence first. Then repeat it in the script."
}
},
{
"@type": "Question",
"name": "Can FAQPage markup stand in for questions that are not on the page?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No. The question and the answer both need to be in the HTML a person can read. Google’s Search Central changelog says FAQ rich results stopped appearing in Google Search on 7 May 2026, so this markup will not restore an accordion under a blue link. Keep it when the pairs on the page are real."
}
},
{
"@type": "Question",
"name": "Should the Product example include a star rating?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Only when the page shows a rating you can support. CiteScore does not publish an aggregate rating or a review count, so the Product example on this page has neither aggregateRating nor review. Inventing either one describes a different product from the one on the page."
}
}
]
}
</script>Google’s Search Central changelog says FAQ rich results stopped appearing in Google Search on 7 May 2026. The markup will not bring back an accordion under a blue link. Keep the script when the questions are visible. Remove it when they are not. One canonical page is enough. Repeating the same FAQPage on every URL does not make the answers more true. A page where visitors post competing answers is a QAPage, which this example is not.
Article
Use Article on a page that is an article: a headline, a date, and an author a person can see. This page publishes the script below. The headline is the H1. The date is the date under the title. The author is CiteScore Team, the same byline. Add an image property only when the page shows that image. This page has no article image, so the script has none. Do not point it at a logo that is not the article image, and do not invent a thumbnail URL.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Schema markup for AI search: Organization, Product, FAQ, and Article",
"description": "JSON-LD examples for Organization, Product, FAQPage, and Article. The markup has to match the page. No invented ratings. Google stopped showing FAQ rich results on 7 May 2026.",
"datePublished": "2026-10-13",
"url": "https://citescore.vercel.app/schema-markup-for-ai-search",
"author": {
"@type": "Organization",
"name": "CiteScore Team",
"url": "https://citescore.vercel.app"
},
"publisher": {
"@type": "Organization",
"name": "CiteScore",
"url": "https://citescore.vercel.app"
},
"mainEntityOfPage": "https://citescore.vercel.app/schema-markup-for-ai-search"
}
</script>The author is an Organization because CiteScore Team is the team name on the byline, not a person. Use Person only when the page names a person. The publisher is CiteScore, the site. If you maintain several scripts, you can point Article’s publisher and author at an Organization @id you defined once. Separate script tags, as on this page, are easier to check. Both are JSON-LD.
Questions about the markup
Does JSON-LD make an answer engine cite the page?
No. JSON-LD labels facts that are already in the HTML. It does not rank the page, and it does not create a citation. A fact that exists only inside the script, or only inside an image, is a fact a person on the page cannot see. Write the sentence first. Then repeat it in the script.
Can FAQPage markup stand in for questions that are not on the page?
No. The question and the answer both need to be in the HTML a person can read. Google’s Search Central changelog says FAQ rich results stopped appearing in Google Search on 7 May 2026, so this markup will not restore an accordion under a blue link. Keep it when the pairs on the page are real.
Should the Product example include a star rating?
Only when the page shows a rating you can support. CiteScore does not publish an aggregate rating or a review count, so the Product example on this page has neither aggregateRating nor review. Inventing either one describes a different product from the one on the page.
Free check, then the $39 audit
Run the free check first. It looks at one host and reports whether the homepage responded, whether robots.txt allows or blocks GPTBot, PerplexityBot, and Google-Extended, whether /llms.txt is a non-empty text file, whether a sitemap is present, and which JSON-LD @type values appear on the homepage. A passing schema row means the homepage has JSON-LD. It does not mean the types match the copy, and it is not a live answer from ChatGPT or Perplexity.
The $39 GEO audit is one public URL, a 0–100 CiteScore, and about ten prioritized fixes, as a PDF. The score comes from on-page signals — definitions, entities, evidence, schema, freshness, crawler access — and, when a language-model key is configured, a review of the HTML we fetched. We do not log into ChatGPT, Perplexity, Claude, or Google AI Overviews. The per-engine snapshot is an inference, and the report says so.
Who is allowed to fetch the page is the other half. Copy-paste groups for GPTBot, ClaudeBot, PerplexityBot, Google-Extended, and CCBot are on the robots.txt guide.