Jason Barnard

How to Write Great Schema Markup for Your Company

This post is in English

If you have read the great introduction on Schema Markup from Luke Harsel, then you know that Schema Structured Markup is vital for any company, but that over 50% of Fortune 500 companies do not yet use it!

In this article, I will take you through the steps and best practices when adding structured Schema.org markup for your company to your website... including which format to use, what information you should provide (and why), how to choose a category, how to push your markup further, how to test your markup ... and several little-known tips and tricks that will lift your markup above the competition's :)

All Companies Should Add Schema.org Organization Markup on Their Websites

It is vital to add schema structured markup to your company “About” or Home page. With this markup, you are confirming to a machine what it has almost certainly correctly understood concerning who you are and what you do. Here is Google's official stance.

Is it really necessary?

Adding a simple confirmation of who you are may seem marginal. But remember, Google and Microsoft are machines. If there is one thing that machines love it is confirmation of information in structured language (their mother-tongue, if you like).

Far from being marginal, Schema Structured Markup on your “About” or "Home" page is vital. If you are in any doubt, please re-read Luke's article (mentioned above).

In search engine's structured language they want you to:

  1. Confirm your name, your address, your social media accounts, your official website

  2. Identify what image, logo, description you want them to show when they mention you (and more often than not, they will use what you provide).

  3. Provide proof of who you are, and create credibility through third party confirmation in the “sameAs” field (Crunchbase, Wikipedia, etc.).

There is no reason not to help them, especially as they specifically ask you to!

What format should I use?

Use JSON-LD rather than embedding the markup into your HTML. It is much easier to maintain. Plus Google recommends it!

Google's recommendation is JSON-LD

You can place the JSON-LD markup anywhere in the page. Most websites put it in the <head> section. This is a logical place to put it, but if your CMS isn't able to do that, you can put the markup in the body of the content or the footer...or even in an external file. 

Interestingly, Google (and Microsoft) can also read your markup if it is in an external file that loads after the page has loaded. For very large sites and for sites that make extensive use of Schema markup, this is a solution that can potentially make managing the structured data much easier. 

Here's the Nitty-Gritty: The Markup for a Company

To start with, a simple example for a Corporation:

The JSON-LD code.

Here we state  (and this is the very least you should include)

  1. The type of company
  2. The company name
  3. Official website
  4. Address
  5. The official logo
  6. The preferred description
  7. The social accounts
  8. The unique identifying URL

Are there other values for : "@type": "Corporation"?

Yes. Quite a few. The most general is "Organization". Many companies use this value, for example, Mailjet has used "Corporation". Here are the top-level options to choose from:

You should choose the most specific value possible. Companies should use Corporation and not the more general Organization. Most Local Businesses will find a category that suits. Ideally, you should choose the same category you have in Google My Business. However, as My Business and Schema.org do not use the same categorization, that is not always possible. Choose the closest match. There are well over 100, so you can get pretty close. Here are a few examples:

LocalBusiness Schema Categories Examples

If you do not find the right category for your business, you can actually create it. Just find the Wikipedia page that represents your business category, add that to this URL http://www.productontology.org/doc/ and add an "additonalType" to your markup.

For example, if I run a beer shop, and I want to be really specific, LiquorStore isn't QUITE right. I would get the page for Beer Shop on Wikipedia (https://en.wikipedia.org/wiki/Beer_shop), take the part after /wiki/ to do this.

What is this : "@id": "https://corporation.mailjet.com"?

This is the unique URL that identifies the company, and it is up to you to choose what that URL will be. It can be a URL that returns a page, a URL that returns detailed information in various formats, or (as in this case) a URL that returns nothing. The aim here is to have a unique identifier for the entity.

Once you have provided this, it becomes the explicit, unambiguous reference for your company. Forever (so choose carefully!).

You may be tempted to use your homepage as the unique identifier for your company. However, the homepage (http://www.example.com/) typically "stands for" three things:

  • The home page
  • The whole website
  • The organization

Some people use imaginary (or real) anchors:

  • The home page: http://www.example.com/

  • The whole website: http://www.example.com/#site

  • The organization: http://www.example.com/#organization

I recommend using a unique subdomain of the company domain (remember they do not need to exist or give access to a page to be valid as a unique identifier).

How This System Will Scale

Dedicated subdomains, and URI for each entity - product / person / company / place / office with Schema-compatible anchors for "explaining" the details is the only system that will work over time. 

A unique, never-changing subdomain with hashtags / anchors: 

  1. Allows you to have the truly never changing id (which is what these machines are looking for)
  2. Allows you to keep UE and machine understanding apart (anyone who has tried pleasing both users and machines at the same time knows this can get complicated)
  3. Allows you to add anchors for detail without worrying about effects on UE navigation
  4. Most importantly - allows you to add data to the URL. The subdomain (URL) CAN return data in Schema format - including product details and very IMPORTANTLY the current active URL for the UE. Meaning that machines would always come to this URL to find current (reliable) information about any given entity. Using this system, you can inform / educate the machines without impacting UE. As long as you always refer explicitly to the URL intended for users that provides the same information, and that the information on both is coherent, the machines will thank you. 

Extending Schema Markup for a Company

Here we have added

  1. Several reliable references to the company,
  2. Some investors 
  3. The product the company offers (an emailing platform) 

Here is what Google "sees". It is very, very clear.

Taking It Even Further

We could also have added information such as the founders, the management team, sub-organisations, area served, client rating, etc. The list is pretty extensive.
The more ACCURATE and pertinent information you can provide, the better. 
Here is the list of possibilities on Schema.org/Corporation.

Local Businesses can add opening hours, geo-coordinates, prices, telephone, fax...
Here is the list of possibilities on Schema.org/LocalBusiness.

Which element of the markup is the most important?

sameAs”  - this property is the key.
These links provide 1) third party confirmation  2) credibility  3) context  4) additional information

Typical examples of great sameAs links:

  1. Wikipedia
  2. Wikidata
  3. Crunchbase
  4. Official company listing (for example Companieshouse.gov.uk)
  5. Business organizations of which the company is a member
  6. Your company profile pages on review sites

Creating the Markup Easily

Here is a great tool from Kalicube.pro that automatically generates structured markup need is JSON-LD format. One of the few tools out there that allows multiple sameAs links.

Create Schema Structured Markup for your company.

Checking Your Markup is Error-Free

ALWAYS double check you structured markup once implemented on your site. Here is Google's super-cool tool that does that for you.

Structured Markup for Your Company Makes Sense From Every Perspective

Far from being marginal, Schema Structured Markup on your website is vital. Start today.

The article was full of knowledge. But hey read my article too. If you guys are working on Blogger website than I have posted so many Tips Tricks to make a blogger website cool as Wordpress. Also, I have written microdata schema markup codes for enhancing the post visibility.

Read Here: https://www.shankystuffzmedia.com/2018/12/Samples-examples-Of-Schema-org-Microdata-Markups.html
Hey Jason, this was a great article - thanks for posting! I heard somewhere that anything you put in your schema data should also appear on that webpage in the content. For example, if you put opening hours in the schema you should also have it somewhere on the actual page for visitors to see. Is this true? Can it hurt if I add founders even though that info isn't found on the actual page?
very useful article,
i know about this and by using this user increse their ofganic traffic.
Hi Jason,
Thank you for helping advance my understanding.
We are a UK based tour operator specialising in ski, eBike and walking vacations in Italy. We sell globally.

There is no schema category for tour operator but I note your advice on how to deal with this. Very useful.

However, how to categorise the package (product)?

We have two types of vacations, a) guided scheduled departure dates. b) self guided with any available start date.

Advice I have seen so far suggests defining these as 'events'. While I am more inclined to go the 'product' route.

Your thoughts would be appreciated. Tim
john hudson
Hi John

Interesting question.
Event would seem best for the scheduled ones
And product or service for the other (choose the one that offers the properties you need to express)

Trip might be good if you offer tours too :)


Jason Barnard
Thank you! I'll dig deeper. Your insight is greatly appreciated.
Hi You said its possible to markup 'management team' using the Schema.org Corporation - using which property?
I had a look and cant figure out how this is possible.
Hi Jason, Great article, thanks!
I am wondering your opinion on organization Schema for a website that is really a single product rather than a company selling a product. For example, a specific drug website for a pharmaceutical company. Generally each drug as it's own website separate than the parent company. The drug is essentially a product, not an organization. Would you still use organization along with product and drug schema or would you just use the product and drug schema? My initial thought is to add minimal organization schema that specifies the parent corporation but what organization type would I use, if any?
Thanks, Eric!
Eric Mandell
Is this a 1-page website? If so, what is the "main entity" of the page? Is it the drug, which is a product? If so, then use https://schema.org/Product schema. You could then use the https://schema.org/manufacturer property to call out the company that makes the drug.
Eric Mandell
Hi Eric
Thanks !
Assuming each drug is not an official company, then I suppose the markup would be Product being sure to indicate manufacturer (which would be the corporation.
Then on the official manufacturer site add the element "owns" and indicate the drugs websites.
Unless each site / drug IS an official legal entity.

Any advice on ideal description length of local business schema?
Shovon Joarder
Hi Shovon
There is no ideal length. But don't overload.
Mark Twain "if I had had more time I would have written less" - if you are saying it in 500 words, you are probably repeating yourself a lot or you are trying to give too much detail.
I'd start with 400 wrods and then cut out the repetition and non-critical and end up with 150 to 200.
Hi Jason, I have a big website that sells homes to different locations. What I did is put LocalBusiness schema on location pages then Organization schema (Corporation) in the homepage. Question is, should I still add the Organization schema to all location pages or do I just keep it in the homepage. This is Microdata, by the way. I'd appreciate your help.
Jamie Nielsen
Just keep the Organization schema on the homepage. You could also connect the LocalBusiness schema using the https://schema.org/subOrganization property. Also you should consider using JSON-LD as it is recommended by Google.
Hi Jason, I have one question for you. I have one location page with 50 locations listed on it. I don't have separate location pages for these locations. Can you suggest me the Local Business Schema markup for this type of page?
Hi Jason, I was wondering if it's okay to add text (letters) in the telephone field for json-ld localbusiness schema. E.g.
"telephone": "Colorado (123) 456-789"
The reason is the business has two phone numbers, servicing 2 different states, but only has 1 physical business location. The structured data testing tool didn't flag it as an error but I'm not entirely sure. Thank you!
Christine B.
Sorry for the late reply. Telephone numbers need to be just digits.
Try using ContactPoint with areaServed. The example here doesn't show telephoine, but as you can see in the accepted fields, you can add it :)
Hi Jason, I have one question. How to markup the content from an external file?
Hi Jason, thank you very much for this in-depth article about structured data. I have one question. How is additional information inserted on Apple's website? https://prnt.sc/kasqra

In google testing tool I can see basic information for website, webpage and organisation but for example founders are not specified anywhere.

Thank you in advance.
Toni Bodonji
This is Google showing information about Apple from its Knowledge Graph. Schema alone is not enough to get this - being in th Knowledge Graph requires much, much more :)
Apple is so big, the information is confirmed in many many places and they do not necessercerily need markup to get info into Google's Knowledge Graph. Much of this comes from their WIkipedia page
Hi Jason...great article...thanks for posting. One question, the Contact Type requirement...what should be put here? I've included Main but when I do a test it comes up with an Error and says "The value main must be a valid contact type." So what should I include? Thanks in advance. Daniel
Daniel B
Interesting question

That is their validation tool - I suppose it is looking at the Schema from the point of view "can Google use this for Rich Snippets", and not from the point of view "is this correct"

These are the values Google uses for rich snippets (not sure this list is complete)
"customer service","customer support", "technical support", "billing support", "bill payment", "sales", "reservations", "credit card support", "emergency", "baggage tracking", "roadside assistance", "package tracking"

The most generic (perhaps one you should use) is customer service
Jason Barnard
OK...thanks. Not sure if Customer Service works for my client as he's a one man operation. Does this matter? I've made no mention to these words throughout his site. Should this be a deciding factor?
Daniel B
In fact, the list I gave is inccomplete
Supported phone numbers

customer service
technical support
billing support
bill payment
credit card support
baggage tracking
roadside assistance
package tracking

For each number, you can also indicate the following attributes:

Serves the hearing-impaired
Specific to a country or countries
am a one man operation, I would go with "sales".
Once you get the information into the database, it will be easy to change later when they expand the options...

HOWEVER, in the short term, if your client would be annoyed at seeing markup like this,
Sales : 098753422343

Then I would simplify and not put contact
Jason Barnard
Great...thank you. This is really helpful. So if client's not happy, then it's not a problem excluding contact? It won't impact too much on the data? I'm totally new to this, so getting my head round what it all means!! Your article certainly helped.
Daniel B
As a general rule, make sure the information is accurate.
If that means putting less detail, then do that
it is really bad to feed these machines with explicit information that is false
Jason Barnard
Thanks Jason. Really appreciate your help.
Hello, Please check my website for schema markups :
[link removed by moderator] ...Please reply back soon..
vishal sharma
You have not mentioned the Product name in the 'product schema' and that is why it is giving an error on all the products. Also, I would recommend using JSON instead of HTML.
Hey Jason,
Quick question, i am getting "The telephone field is recommended. Please provide a value if available."
I was using (213) 749-xxxx but i believe this is wrong now, or maybe i was doing it wrong all along? Any suggestions on what i should be using?
Barry Rudin
a itemprop= "telephone" href="tel:+1213749xxxx"> (xxx) xxx-xxx sorry, it didnt come out above.
Barry Rudin
I would advise you to separate the markup and the code byt wrapping a span around it like this
open bracket - span itemprop="telephone" - close bracket open bracket - a href="tel:1234567">(425) 123-4567

Even if what you are trying to do were correct, the schema would show your telephone as tel:123-4567

The Schema.org page actually gives an similar example using emails, that renders this as the email...
Another great post Jason! I always like to add Aggregate Rating schema also if the client has enough reviews from recognised sources. Do you have any insights as to any free to use review sites that Google recognises or prefers?
White Rabbit

Thanks for the feedback :)
Have you thought about Google Customer Reviews
Free, and obviously very Google friendly :D
Jason Barnard
Thanks for the reply Jason
Good article. For those of you who want to test your schema knowledge, take my SEO quiz [link removed by moderator].
Hy Jason,

Great article!!

I implemented a Corporation schema markup today on my homepage [link removed by moderator] but Google is still not showing the information I provided in the schema like description, name, social links, founders, address, contacts and so on in the search results when searching for "busymachines" or "busy machines".

I tried Kalicube and for "busymachines" it says that is not present and "busy machines" that is a book with no info...

Do you know how long it usually takes for Google to add the data, or maybe I'm doing something wrong?

Thank you so much!
Hi Jason,

Just wanted to ask if I am using organization schema tags can I still mention the additionalType? e.g. [link removed by moderator]
Riaz Ahmad
Hi Riaz

Yes - aim there is to be more specific / explicit
The beer shop example above says @type = store... which is quite general
Then additionalType = beer shop which is a specific kind of store

However, http://www.productontology.org/doc/Aerial_work_platform is a product or service, and so should be used to be specific about the product (if you manufacture or seel these things) or service (if you rent them)
So this specific example doesn't help with your Organization markup - keep it for your product or services pages.
Jason Barnard
Thanks a lot, Jason, will add it to the products and services pages!
Great article - thank you Jason!

We just implemented Organization schema markup a few days ago on our homepage [link removed by moderator] but Google is still showing our headquarter as being in the United Kingdom in search results when searching for "Ashley Stewart".

Would you know how long it usually takes for Google to crawl and index the organization data markup?

Thank you so much for your help!

Sylvain Bailly
Hi Sylvain

There is no one answer to that question !

How quickly Google will start showing the correct address depends on many things including
- how important it thinks the company is (ie is this a priority for Google or not ?)
- how confused it is about the address (how much conflicting information is out there ?)

I had a quick look at the site, the information on the web easily accessible and the results Google returns for the brand search....
I am afraid changing this information is likely going to be a bigger job than simply changing your Schema markup. The brand is very well ensconced in the Knowledge Graph...
Your Schema on its own is unlikely to change Google's misunderstanding.
I would start by adding more details to your Schema markup - for the moment is is minimal and not very explicit.
I would also find where it got this idea from in the first place and correct that :)
Beyond that - my gut feeling is that you have quite a bit of work and will need some patience to get this right.
Jason Barnard
Thank you Jason for replying so quickly. Google probably got the wrong information from a totally different website unrelated to our business: [link removed by moderator]

I just don't know what else to add to our Schema Markup to let Google know our headquarter is in the US, not in the UK!
Sylvain Bailly
Hi Sylvain
Start here http://schema.org/Corporation
Add subOrganizations...
But the biggest part will be wikidata, crunchbase, wikipedia, and other third party confirmations / clarifications
Good luck !
When I check the markup data I get the following errors and warnings:
A value for the author field is required.
A value for the datePublished field is required.
A value for the headline field is required.
A value for the publisher field is required.
The dateModified field is recommended. Please provide a value if available.
The mainEntityOfPage field is recommended. Please provide a value if available."

Are these really necessary? Will they keep from getting the data to show up in the search engines?

Also, is it okay to list each h1/h2 tags as an articleSection and the content below it as articleBody to where I have multiples of each?

Rick Byrd
Hi Rick
If Google says it is required, then it is required :)
Remember Google does not have to show to data from your schema.... so it chooses. Sometimes it will, sometimes it won't. If you don't follow its guidelines it almost certainly won't

If you have an article with several distinct sections with Headings, then just stick to HTML5 - the schema with multiple articleBody in a page is likely to be misleading
Jason Barnard

Thanks for answering. I have read so much conflicting information about schema. So much information suggests that all the information is not necessary but if Google says it is then you are right I better include it all.
Rick Byrd
Hi Rick
Bad / incomplete / wrong Schema is worse than none at all
So - follow Google's guidelines. if in doubt, be very careful
Hey Jason, Your post really made me to relax about Json-ld Implementation Good write!. And i have to mention one thing very proudly and heart fully, it looks good and great that you reply to most of the comments here it gains more respect for you. Keep it up!!
Kalaiselvan Veeramani
Thanks a million Kalaiselvan :)
Should also add ratings & reviews schema part
Lalit Sharma
Yes, when you have a reliable source to cite
Good point. Thanks !
as for the organization mark up, where should I place it? Contact US or homepage? I see there is some post about placing the organization mark up on the home page, however my home page lack some information like contact email. In this case, should I simply to add the organization mark up on the "Contact Us" page?
Yip Leung
The homepage represents the website, the page and the organization.
I suggest putting the markup there. And only there
Jason Barnard
Hey Jason,
Is it OK to put mark up code in header section which is being applied to the entire website ? If not, then please provide other solution. Thanks.
Vinita M
If it is on every page, that is not a problem. But experience tells me it is better just on the homepage. You can put the markup anywhere in the page, so that might provide a workaround for you
Say you have multiple different domains for the same company, is it safe to say that adding them as "sameAs" would be beneficial?
A huge thanks from me, this is hands-down the best guide on Schema I have read until today, great work Jason. I just wanted to touch on your comment here 'I recommend using a unique subdomain of the company domain (remember they do not need to exist or give access to a page to be valid as a unique identifier).' So, you suggest that we use subdomains as unique identifies, for example: product.example.com, secondproduct.example.com, etc.? I guess I could use an example to fully grasp what you suggest.

Thank you again for the excellent guide!
George Karmpoulonis
Hi George

Thanks for the incredible feedback. I am very pleased this is informative and clear.

Interesting you ask about that id question. I had a nap earlier and was thinking about it.
I may well have given the "wrong" advice.
The idea that a homepage represents a page, a site and a company is actually quite interesting. Using hashtags is quite a nice way to make that subtle difference very explicit.
And leverage Schema into the bargain.
I have never seen this. But citing the Schema entities as anchors may be the way to go, after all.
Looking at the example below, that would seem 100% logical.

Using Schema :
The page: http://www.example.com/#WebPage
The whole website: http://www.example.com/#WebSite
The company: http://www.example.com/#Corporation

That "feels" right to me. Perhaps subdomains are NOT the way to go !!!! I am VERY open to discuss this point
It seems to me to be fundemental since, once the id is "set" it will be VERY difficult and slow to change.
Thoughts ?
Anyone ?

All exchanges on this topic are welcome since we will all learn :)
Jason Barnard
And thinking about this a little more... I may be coming back to my original idea with subdomains, and just integrate hashtags / anchors :)

When looking at your products example, the unique subdomain with hashtags may well be the most easily manageable and a system that will never become redundant.

To be honest I am not convinced anyone has really thought all this through (which is reasonable as we don't yet know where all this will lead !)

My gut feeling is that unique subdomains for each entity - product / person / company / place / Office ...
with Schema-compatible anchors for "explaining" the details is the only system that will work over time.

A unique, never-changing subdomain with hashtags / anchors
- allows you to have the truly never changing id (which is what these machines are looking for)
- allows you to keep UE and machine understanding apart (anyone who has tried pleasing both users and machines at the same time knows this is a nice idea)
- allows you to add anchors for detail
- allows you to add data to the url. The subdomain (URL) CAN return data in Schema format - including product details and very IMPORTANTLY the current active URL. Meaning that machines would always come to your subdomain to find current (reliable) information about that product. If that subdomain is not the same as the actual product page, that means you can inform / educate the machines without impacting UE. As long as you always include the current active product URL, and that the information on both is coherent, I can only imagine that the machines will thank you :)

I suspect that is the way forward
Jason Barnard
Any concern that this goes against Google's guidelines of only applying schema to the pages that the content is located on? Google gives the following example: "For example, if the JSON-LD markup describes a performer, the HTML body should describe that same performer."
john smith
Hi John
Good point. I have forgotten one thing - use a 303 code.
DBpedia uses this technique.
Here is a post describing it.
Another way is using HTTP status code 303. The code 200 gives the representation of the page about the thing, the code 303 See Other gives an additional URI identifying the thing. This method is used by DBpedia:

http://dbpedia.org/resource/The_Lord_of_the_Rings represents the novel
http://dbpedia.org/page/The_Lord_of_the_Rings represents the page about the novel

(resp. http://dbpedia.org/data/The_Lord_of_the_Rings for machines)

ref : https://stackoverflow.com/questions/16000064/best-practices-for-adding-semantics-to-a-website/16017139#16017139

I have not yet implemented this idea - it came from Georges comment that made me thing about the flexibility of and @id system you want to put in place.
Thanks to you I found the DBpedia example. And that seems to me to be about perfect.
One of the best and well thought out articles on schema. Thank you! The additional type really helped and going to implement this. Had no idea what it really was or how to use it.
Kris Fannin
Hi Chris
Thanks for the (very) positive comment.
I am very pleased it is good - SEMrush asked me for 3 rewrites to get it to this stage :)
additionalType is, indeed, very useful for "explaining" more granular concepts and entities to Google and Bing.
I haven't done much work seeing how far that can be "pushed".
Great post Jason ;)
For developers it is very useful to test and validate Schema codes with Google official tools. Check out my new post describing a solution to test localhost with Google Structured Data Testing Tool : http://www.aymen-loukil.com/en/blog-en/how-to-test-localhost-website-with-google-seo-tools/
Aymen Loukil
Thanks Aymen
Interesting post - great stuff for developers.
Add a comment