Organization schema: telling machines who you are
A complete Organization schema example in JSON-LD, which LocalBusiness subtype to use, where to put the markup, and the errors that make it contradict itself.
By Crawlito · 9 min read
In short
- Google lists no required properties for Organization markup, and recommends name, url, logo, sameAs, contactPoint, address and identifiers such as vatID or leiCode.
- Google says the markup belongs on the home page or one page that describes the organization, such as an About page, and does not need to be on every page.
- A business with a physical location should use the most specific LocalBusiness subtype, where name and address are required and geo needs at least five decimal places.
- Put the JSON-LD in the server-sent HTML: Google can read JSON-LD injected by JavaScript, but crawlers that do not run JavaScript will not see it.
- Google's policies say structured data must be a true representation of the page and must not mark up content readers cannot see, so the name, address and phone in the markup should match the page.
On this page
- What Organization schema does, and what it does not
- A complete Organization JSON-LD example
- When to use LocalBusiness or another subtype
- Where to put Organization markup
- Keep it consistent across pages and profiles
- Common Organization schema errors
- Frequently asked questions
- Check your structured data in context
Organization schema is a block of structured data, usually JSON-LD, that states who runs a website: the legal and trading name, the official URL, the logo, the profiles that belong to it and how to contact it. It turns facts a reader would piece together from your footer and About page into one explicit record. Google says the markup can help it tell your organization apart from others in search results and can influence details such as which logo it shows. For other machines it is a clear statement of identity, as long as it matches everything else they find.
This guide gives a complete example you can adapt, explains when to use a LocalBusiness subtype instead, and lists the mistakes that most often make the markup contradict the page.
What Organization schema does, and what it does not
Google's Organization documentation describes two uses. The markup helps Google disambiguate your organization in search results, and it can influence visual elements such as which logo is shown in Search results. For merchants it can also feed details such as the return policy, address and contact information into the merchant knowledge panel.
It has limits worth stating plainly:
- It does not guarantee anything. Google's structured data policies say it does not guarantee that structured data will show up in search results.
- It is not an AI Overviews requirement. Google's page on AI features and your website says no special schema.org structured data is needed to appear in AI Overviews or AI Mode. See our note on Google AI Overviews technical requirements.
- AI assistants do not document how they use it. OpenAI, Anthropic and Perplexity do not say, in their crawler documentation, whether or how they parse JSON-LD. Treat Organization markup as a clean, machine-readable statement of facts, not as a lever for AI answers. Our overview of structured data for AI search separates what is documented from what is hype.
What it can do is reduce ambiguity. If a crawler, a search engine or a model sees one name, one URL, one logo and a list of profiles that all point back to the same site, it has less to guess.
A complete Organization JSON-LD example
Google lists no required properties for Organization. Its recommended list includes name, url, logo, sameAs, contactPoint, address, telephone, email, description, legalName, alternateName, foundingDate, numberOfEmployees, merchant properties such as hasMerchantReturnPolicy, and identifiers such as vatID, taxID, iso6523Code, leiCode, duns, naics and globalLocationNumber. Here is an example for a fictional company that uses the common ones:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://www.example.com/#organization",
"name": "Example Analytics",
"legalName": "Example Analytics Ltd",
"alternateName": "ExA",
"url": "https://www.example.com/",
"logo": {
"@type": "ImageObject",
"url": "https://www.example.com/images/logo-512.png",
"width": 512,
"height": 512
},
"description": "Example Analytics builds reporting tools for small online shops.",
"foundingDate": "2019-04-01",
"email": "hello@example.com",
"telephone": "+44 20 7946 0000",
"address": {
"@type": "PostalAddress",
"streetAddress": "10 Sample Street",
"addressLocality": "London",
"addressRegion": "Greater London",
"postalCode": "EC1A 1AA",
"addressCountry": "GB"
},
"contactPoint": [
{
"@type": "ContactPoint",
"contactType": "customer support",
"email": "support@example.com",
"telephone": "+44 20 7946 0001",
"availableLanguage": ["en"]
},
{
"@type": "ContactPoint",
"contactType": "sales",
"email": "sales@example.com"
}
],
"sameAs": [
"https://www.linkedin.com/company/example-analytics",
"https://github.com/example-analytics",
"https://www.youtube.com/@exampleanalytics"
],
"vatID": "GB123456789"
}
</script>Notes on the properties that matter most:
| Property | What to put there | Common slip |
|---|---|---|
name | The name people see on the site and use for you | A different spelling from the header or footer |
url | The canonical home page, absolute, with the right protocol and host | http:// or a non-canonical www variant |
logo | An image URL at least 112x112px that crawlers can fetch | A logo under a path blocked in robots.txt |
sameAs | Profiles that are definitely yours: social, GitHub, Wikipedia, Wikidata, review sites | Old, dead or someone else's accounts |
contactPoint | Every support channel a customer can actually use, with contactType | Phone numbers without the country code |
address | A full PostalAddress with addressCountry | An address that does not appear anywhere on the site |
@id | A stable identifier such as https://www.example.com/#organization | Changing it per page, which creates several "organizations" |
Google's logo guidelines ask for an image at least 112x112px, a URL that is crawlable and indexable, a format Google Images supports, and a logo that looks right on a plain white background. If you use an ImageObject for the logo, Google says it needs a valid url or contentUrl. Google also asks that phone numbers include the country and area codes.
The @id is not on Google's list, but it is useful. It gives the organization a name other blocks can point to. An Article's publisher or a WebSite's publisher can then say {"@id": "https://www.example.com/#organization"} instead of repeating the whole record, which keeps the facts in one place. Our Article and BlogPosting guide shows that pattern.
When to use LocalBusiness or another subtype
Google says to use the most specific schema.org subtype that fits. Its own example is OnlineStore rather than OnlineBusiness. schema.org/Organization has subtypes such as Corporation, EducationalOrganization, GovernmentOrganization, MedicalOrganization, NGO, NewsMediaOrganization, OnlineBusiness and LocalBusiness.
If customers visit you at a physical place, such as a shop, restaurant, clinic or office that takes walk-ins, use a LocalBusiness subtype and follow Google's local business guidelines. There, name and address are required. Recommended properties include telephone, url, geo, openingHoursSpecification, priceRange, department and, for food businesses, menu and servesCuisine. LocalBusiness has 30 direct subtypes at the time of writing, and most have their own children:
| Your business | Pick a type like |
|---|---|
| Restaurant, café, bar | Restaurant, CafeOrCoffeeShop, BarOrPub (under FoodEstablishment) |
| Shop | A Store subtype such as BookStore or HardwareStore |
| Dentist, clinic | Dentist, or a MedicalBusiness subtype |
| Law firm, accountant | LegalService, AccountingService |
| Hotel, guest house | A LodgingBusiness subtype such as Hotel |
| Gym, sports club | ExerciseGym or another SportsActivityLocation |
| Plumber, electrician | A HomeAndConstructionBusiness subtype such as Plumber |
Google's local business guide adds a few rules worth following exactly:
- If a business fits several types, list them as an array, for example
"@type": ["Restaurant", "BarOrPub"]. Google saysadditionalTypeis not supported. geoneeds a latitude and longitude with at least five decimal places.urlshould be the fully qualified, working URL of that specific business location.- Define each location as its own
LocalBusinessitem. Giving each location its own page, with its own markup, is our suggestion rather than a Google rule, but it keeps eachurland address unambiguous. - Opening hours use
openingHoursSpecificationwithdayOfWeek,opensandcloses. For hours past midnight, use a singleOpeningHoursSpecificationwhose closing time is earlier than its opening time. To show a business as open 24 hours, setopensto00:00andclosesto23:59.
A short example for one location:
{
"@context": "https://schema.org",
"@type": "Dentist",
"@id": "https://www.example-dental.com/leeds/#location",
"name": "Example Dental Leeds",
"url": "https://www.example-dental.com/leeds/",
"telephone": "+44 113 496 0000",
"address": {
"@type": "PostalAddress",
"streetAddress": "4 Park Row",
"addressLocality": "Leeds",
"postalCode": "LS1 5HD",
"addressCountry": "GB"
},
"geo": { "@type": "GeoCoordinates", "latitude": 53.79712, "longitude": -1.54683 },
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:30",
"closes": "17:30"
}
],
"parentOrganization": { "@id": "https://www.example-dental.com/#organization" }
}A business that only operates online should not invent a street address to qualify for LocalBusiness. Use Organization or OnlineBusiness and leave address out, or give the registered office if you are happy to show it on the page.
Where to put Organization markup
Google says to place Organization markup on your home page or on a single page that describes the organization, such as an About page, and that it does not need to be on every page. Many sites still output it site-wide from a template, which is fine as long as every copy is identical.
Two placement details matter more than the page you choose:
- Put it in the HTML the server sends. Google says it can read JSON-LD that is injected by JavaScript, and that JSON-LD can sit in the
<head>or the<body>. Many AI crawlers do not run JavaScript, though. A December 2024 analysis by Vercel and MERJ found that none of the major AI crawlers it measured rendered JavaScript. Markup added by a tag manager or a client-side component is invisible to them. Our guide to whether AI crawlers run JavaScript explains the difference. - Output one block, not several. SEO plugins, themes and page builders each like to add their own Organization block. Two blocks with different names or logos tell a parser there may be two organizations.
How to check what a crawler receives
Fetch the raw HTML and parse every JSON-LD block in it. The user agent below is OpenAI's documented example string for OAI-SearchBot (the version number may change); sending it from your own machine only shows what your server returns to that user agent, not what OpenAI's IP addresses receive. The script prints the type, name and @id of each item, and flags invalid JSON:
curl -s -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36; compatible; OAI-SearchBot/1.4; +https://openai.com/searchbot" https://www.example.com/ \
| python3 -c '
import sys, re, json
html = sys.stdin.read()
blocks = re.findall(r"<script[^>]*application/ld\+json[^>]*>(.*?)</script>", html, re.S | re.I)
print(len(blocks), "JSON-LD block(s) in raw HTML")
for b in blocks:
try:
data = json.loads(b)
except json.JSONDecodeError as e:
print("INVALID JSON:", e)
continue
items = data if isinstance(data, list) else data.get("@graph", [data])
for item in items:
print(item.get("@type"), "|", item.get("name"), "|", item.get("@id", "no @id"))
'If the count is zero but your browser's developer tools show the block, it is either being added by JavaScript or your server, CDN or firewall is sending crawler user agents a different response; repeat the request with a normal browser user agent to tell the two apart. Then run the page through Google's Rich Results Test and the Schema Markup Validator to catch property and type errors.
Keep it consistent across pages and profiles
Organization markup is a claim, and machines check claims against everything else. Google's policies say structured data must be a true representation of the page content, and that you should not mark up content that is not visible to readers. In practice that means:
- The same name everywhere. Match the site header, footer, page titles, the About page and your public profiles. If you use a legal name and a trading name, put the trading name in
nameand the other inlegalNameoralternateName. - The same address and phone. The address and number in the markup should appear on the page, and should match what your business listings and directory profiles show. If you move, update all of them at once.
- Profiles that point back. Each
sameAsURL should be a profile you control that links to your site. AsameAslist with a defunct account or a namesake's page muddies identity instead of clarifying it. - One
@idfor one entity. Reuse the same@idon every page that mentions the organization, and reference it from Article, Product and WebSite markup. - The canonical URL.
urlshould match the canonical home page, including protocol andwww.
Common Organization schema errors
| Error | Symptom | Fix |
|---|---|---|
| Invalid JSON | Validator reports a parse error; the whole block is ignored | Remove trailing commas and curly quotes, escape quotes in text |
| Duplicate blocks | Two Organization items with different names or logos | Turn off the extra output in the theme or plugin |
| Logo not fetchable | Logo missing in tests, or a 403 or 404 on the image | Serve it from a crawlable path with a 200 status |
| Relative or wrong URLs | "url": "/" or a staging host in url or logo | Use absolute production URLs |
| Facts not on the page | Address or phone appear only in the markup | Show them on the page, or remove them from the markup |
| Wrong type | LocalBusiness for an online-only company, or plain Organization for a shop | Pick the most specific accurate subtype |
| Self-serving ratings | aggregateRating for reviews of your own business, on your own site | Remove it: Google's review snippet guidelines say pages where the reviewed entity controls its own reviews are ineligible for star review features |
| Injected by JavaScript only | Block appears in DevTools but not in curl output | Render it on the server or in the static HTML |
Our JSON-LD errors guide goes through parse failures and validator messages in more detail.
Frequently asked questions
Does Organization schema have required properties?
Not for Google's Organization feature: its documentation lists no required properties and recommends name, url, logo, sameAs, contactPoint, address and several identifiers. LocalBusiness is different: there name and address are required.
Should Organization markup be on every page?
It does not need to be. Google says the home page or one page that describes the organization, such as an About page, is enough. If your template outputs it on every page, make sure every copy is identical and uses the same @id.
Do ChatGPT, Claude or Perplexity read Organization schema?
None of them document it. Their crawler documentation covers access and robots.txt, not how they parse structured data. Keep the markup accurate and in the raw HTML so it is available to any system that does read it, but do not expect it to change AI answers on its own.
Should I use Organization or LocalBusiness?
Use a LocalBusiness subtype if customers visit you at a physical location, and mark up each location separately. Use Organization, or a more specific subtype such as OnlineBusiness or Corporation, for a company without a public premises.
What should go in sameAs?
Profiles on other sites that clearly belong to the organization, such as LinkedIn, GitHub, YouTube, Wikipedia or Wikidata, and review sites. Leave out personal accounts, dead profiles and anything you cannot confirm is yours.
Check your structured data in context
Organization markup is one of the easier fixes on a site: one block, written once, kept in step with the page. The hard part is noticing when a plugin adds a second block or the markup drifts from the footer, so run the script above after theme or plugin updates. As a next step, run the free check on your home page: it checks a single page and needs no account.
Filed under Structure and schema. Topics: structured-data, json-ld, google, audits