Skip to content

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

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:

html
<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:

PropertyWhat to put thereCommon slip
nameThe name people see on the site and use for youA different spelling from the header or footer
urlThe canonical home page, absolute, with the right protocol and hosthttp:// or a non-canonical www variant
logoAn image URL at least 112x112px that crawlers can fetchA logo under a path blocked in robots.txt
sameAsProfiles that are definitely yours: social, GitHub, Wikipedia, Wikidata, review sitesOld, dead or someone else's accounts
contactPointEvery support channel a customer can actually use, with contactTypePhone numbers without the country code
addressA full PostalAddress with addressCountryAn address that does not appear anywhere on the site
@idA stable identifier such as https://www.example.com/#organizationChanging 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 businessPick a type like
Restaurant, café, barRestaurant, CafeOrCoffeeShop, BarOrPub (under FoodEstablishment)
ShopA Store subtype such as BookStore or HardwareStore
Dentist, clinicDentist, or a MedicalBusiness subtype
Law firm, accountantLegalService, AccountingService
Hotel, guest houseA LodgingBusiness subtype such as Hotel
Gym, sports clubExerciseGym or another SportsActivityLocation
Plumber, electricianA 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 says additionalType is not supported.
  • geo needs a latitude and longitude with at least five decimal places.
  • url should be the fully qualified, working URL of that specific business location.
  • Define each location as its own LocalBusiness item. Giving each location its own page, with its own markup, is our suggestion rather than a Google rule, but it keeps each url and address unambiguous.
  • Opening hours use openingHoursSpecification with dayOfWeek, opens and closes. For hours past midnight, use a single OpeningHoursSpecification whose closing time is earlier than its opening time. To show a business as open 24 hours, set opens to 00:00 and closes to 23:59.

A short example for one location:

json
{
  "@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:

  1. 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.
  2. 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:

bash
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 name and the other in legalName or alternateName.
  • 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 sameAs URL should be a profile you control that links to your site. A sameAs list with a defunct account or a namesake's page muddies identity instead of clarifying it.
  • One @id for one entity. Reuse the same @id on every page that mentions the organization, and reference it from Article, Product and WebSite markup.
  • The canonical URL. url should match the canonical home page, including protocol and www.

Common Organization schema errors

ErrorSymptomFix
Invalid JSONValidator reports a parse error; the whole block is ignoredRemove trailing commas and curly quotes, escape quotes in text
Duplicate blocksTwo Organization items with different names or logosTurn off the extra output in the theme or plugin
Logo not fetchableLogo missing in tests, or a 403 or 404 on the imageServe it from a crawlable path with a 200 status
Relative or wrong URLs"url": "/" or a staging host in url or logoUse absolute production URLs
Facts not on the pageAddress or phone appear only in the markupShow them on the page, or remove them from the markup
Wrong typeLocalBusiness for an online-only company, or plain Organization for a shopPick the most specific accurate subtype
Self-serving ratingsaggregateRating for reviews of your own business, on your own siteRemove 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 onlyBlock appears in DevTools but not in curl outputRender 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