JSON-LD Organization schema for AI-search
The one <script> tag every homepage needs so
ChatGPT, Perplexity, and Gemini know who you are. Copy-paste
template, every field explained, and how to verify it parses.
Why AI-search cares about Organization schema
When Perplexity or ChatGPT-with-browsing cites your page in an answer, it needs to attach a brand name and logo to the citation card. The model has two ways to figure out who runs a domain:
- Infer it from your
<title>,og:site_name, header copy, and footer. Fuzzy, error-prone, and the reason AI answers occasionally attribute your quote to a different company with a similar name. - Read the JSON-LD
Organizationblock. Deterministic, machine-parseable, and unambiguous.
The gap between these two is the difference between "as Acme Corp explains…" and "as a company called Acme (which we couldn't confirm) suggests…". JSON-LD closes it.
The copy-paste template
Paste this inside <head> on your homepage,
with your own values swapped in. Every field below is either
required or high-signal — nothing here is padding.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://yourdomain.com/#organization",
"name": "Your Company",
"legalName": "Your Company, Inc.",
"url": "https://yourdomain.com/",
"logo": "https://yourdomain.com/logo.png",
"description": "One-sentence description of what you do.",
"foundingDate": "2019-01-15",
"sameAs": [
"https://twitter.com/yourhandle",
"https://www.linkedin.com/company/yourcompany",
"https://github.com/yourorg",
"https://en.wikipedia.org/wiki/Your_Company"
],
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer support",
"email": "[email protected]",
"url": "https://yourdomain.com/contact/"
}
}
</script> Every field, explained
| Field | Required? | What LLMs use it for |
|---|---|---|
@id | Recommended | A stable URL identifier for this entity. Lets other schema blocks reference the organization by ID instead of duplicating it. |
name | Required | The name AI citations will use. Matches your marketing brand — not the legal entity. |
legalName | Optional | The registered legal entity (e.g. "Acme Corp, Inc."). Helps LLMs match your brand to SEC filings, press releases, and Wikipedia. |
url | Required | Canonical homepage. Make sure this matches your actual live domain and includes the trailing slash. |
logo | Required | Absolute URL to a square logo image. Perplexity uses this in citation cards; Google surfaces it in knowledge panels. PNG or SVG, minimum 112×112 for Google's rich results. |
description | Recommended | One sentence. This is what LLMs paraphrase when a user asks "what is Acme Corp?". Write it deliberately. |
foundingDate | Optional | ISO date (YYYY-MM-DD). Helps disambiguate you from newer or older companies with similar names. |
sameAs | Critical | Array of canonical URLs for the same entity on other platforms. Twitter/X, LinkedIn, GitHub, Crunchbase, and — if you have one — your Wikipedia page. This is the single highest-leverage field: LLMs cross-reference these URLs to confirm your identity. |
contactPoint | Optional | Structured contact info. Useful when someone asks "how do I contact Acme?" — the LLM can quote the email or link the contact page directly. |
Common variants: LocalBusiness, Corporation, OnlineStore
Organization is the base type. If a more specific
subtype describes you accurately, use it — the extra information
helps LLMs answer more specific questions about you.
LocalBusiness (with a physical address)
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Acme Coffee Roasters",
"url": "https://acmecoffee.example/",
"logo": "https://acmecoffee.example/logo.png",
"address": {
"@type": "PostalAddress",
"streetAddress": "42 Bean Street",
"addressLocality": "London",
"postalCode": "E1 6AN",
"addressCountry": "GB"
},
"telephone": "+44-20-1234-5678",
"openingHours": "Mo-Fr 07:00-18:00, Sa-Su 08:00-16:00"
}
</script> Corporation (public / regulated entity)
{
"@context": "https://schema.org",
"@type": "Corporation",
"name": "Acme Holdings",
"legalName": "Acme Holdings PLC",
"tickerSymbol": "ACME",
"url": "https://acme.example/",
"logo": "https://acme.example/logo.png"
} Multiple types (Organization + OnlineStore)
{
"@context": "https://schema.org",
"@type": ["Organization", "OnlineStore"],
"name": "Acme Shop",
"url": "https://shop.acme.example/",
"logo": "https://shop.acme.example/logo.png"
} Verify it's actually parsed
- View source, find the block. Open your
homepage, view source (
Ctrl-U), search forapplication/ld+json. Confirm there's exactly one Organization block (multiple confuses parsers). - Run the Schema.org validator. Paste your homepage URL at validator.schema.org. It parses the JSON-LD and lists any errors — missing required fields, malformed URLs, wrong data types.
- Run Google's Rich Results Test. search.google.com/test/rich-results — same idea, plus it shows how Google's parser sees your entity specifically.
- Curl-fetch it as an LLM would.
curl -A "PerplexityBot" https://yourdomain.com/ | grep -A 30 'application/ld+json'— proves the block is actually served to crawlers and not hidden behind a client-side hydration boundary.
The 5 mistakes that make LLMs skip your schema
- Injecting JSON-LD via JavaScript after page load.
Some crawlers execute JS, many don't. Server-render the
<script>tag or ship it as static HTML. - Relative URLs in
url,logo, orsameAs. LLMs parse these into a knowledge graph — relative URLs break that. Always absolute. - Multiple conflicting Organization blocks. If your CMS auto-generates one and your theme also has one, parsers will pick one non-deterministically. Audit for duplicates.
- Missing
sameAs. Without it, LLMs have nothing to cross-reference. Even three URLs (Twitter, LinkedIn, GitHub) massively improves brand disambiguation. - Malformed JSON. A single trailing comma silently breaks the entire block. Validate before shipping. In-place edits on production HTML are how this happens.
Check your site now
FAQ
Should I put JSON-LD on every page or just the homepage?
Organization schema belongs on the homepage only.
Sub-pages use Article, Product,
BreadcrumbList, or FAQPage depending
on content. Repeating the full Organization block on every page
is wasteful and can produce inconsistent knowledge-graph entries
if the copies drift.
Does JSON-LD affect Google search ranking?
Not directly. Google uses it to build knowledge-panel cards and decide rich-result eligibility, which affects clickthrough. AI answer engines like Perplexity and ChatGPT use it for citation-card correctness. Neither treats it as a ranking factor in the classical PageRank sense — but wrong or missing schema costs you visibility both places.
Can I use Microdata or RDFa instead of JSON-LD?
Technically yes — schema.org supports all three. Practically no: JSON-LD is the format every AI-search parser handles reliably. Microdata mixed with your HTML is fragile and Microdata-only sites regularly get skipped. Ship JSON-LD.
What about Google-Extended and AI training?
JSON-LD is public content in your HTML — any crawler that
fetches your page sees it, whether you allow AI training or
not. Its purpose is disambiguation at inference time (when a
user asks a question), not training. Blocking
Google-Extended in robots.txt doesn't hide your
JSON-LD from Gemini's live retrieval.
How big can the JSON-LD block get before it's a problem?
Practical ceiling: ~50KB. Under that, no parser cares. Over
that, some crawlers truncate. Keep sameAs to
canonical URLs only (not every social platform), skip the
long knowsAbout arrays that some SEO tools
auto-generate, and you'll stay well under.
Ship the JSON-LD once and it works forever — unless your brand
name, logo, or social handles change. This is the highest-leverage
30-minute fix in the AI-search stack. For the full 13-signal fix
pack — llms.txt, robots.txt, OpenGraph,
and the rest — see the
AICite Pro Report ($24, 30 seconds).