Key takeaways:
- A homepage is a webpage that serves as a gateway to other pages in the website
- Schema can be used to explain the main topic of a homepage is
- The best way to do this is to use the mainEntity property and link it to an Organization schema type ID
- Other elements on the homepage such as images or videos can be linked to the homepage using the isPartOf property
- While you can have multiple schema types per page, it is best to make each of these types of schemas connected to each other so that Google can understand their context with each other.
What is the purpose of a website’s homepage?
A website’s homepage is often the first page that people see when they visit a website. It serves as a kind of gateway to the rest of the website and usually contains links to the other pages on the site.
The purpose of a homepage is to give visitors a general overview of what the website is about and possibly some information about the organisation or person who runs the website.
You can do this using structured data, specifically JSON-LD.
What schema is best for a homepage?
Every homepage is a webpage and this is why I like to start with the WebPage schema.
This is because WebPage schema is used to describe the main content of a webpage. It can also include information about the page’s relationship to other pages, such as links to other pages or to other websites.
In this article, I will use WebPage schema as the foundation, then add Website, Person and Organization schemas nested as part of the WebPage schema type.
What is WebPage schema?
WebPage schema is used to describe the content and structure of a webpage. It is a type of schema that search engines understand.
To do this, you will be using:
"@type":"WebPage"
Then you can start describing important elements of the webpage, such as:
- the URL of the webpage: this is the full address of your website homepage
- it’s unique id: every entity should have its own ID and this is typically a URL that can be used to identify and access more information about the referenced entity – in this instance, appending #webpage to the URL will make the URL uniquely identifying
- it’s name: this is page title
- it’s description: this is the meta description
- the primary language of the webpage
For example, for my own homepage, I start with the following properties and their values:
<script type="application/ld+json">
{
"@context":"https://schema.org",
"@type":"WebPage",
"url":"https://www.danielkcheung.com",
"@id":"https://www.danielkcheung.com/#webpage",
"name":"SEO Consultant and Organic Growth Educator: Daniel K Cheung",
"description":"Based in Sydney, Australia, I help in-house SEO managers, product owners and marketing managers cut through the noise so that they can hire the right SEO partner.",
"inLanguage":"en-AU"
}
</script>
Technically, you could stop right here as you’ve defined what the webpage is about using JSON-LD. If you were to copy and paste the above output into Schema Markup Validator, you’ll see that the code validates.
But this is just the beginning. Next, we are going to use the mainEntity property to tell Google what the homepage is about.
How to use mainEntity item property (and when to use it)
The mainEntity property is used to describe the main content or focus of the page and it should be used once per webpage.
This property should be present on every WebPage schema type and will this is where you will define your first relationship that exists between your homepage and the overall website.
"mainEntity":{
"@type":"WebSite"
}
Notice how the there is a new set of curly brackets?
This is how you nest item properties of one schema type to item properties of another schema type.
For example, I want to tell a search engine that my homepage is a webpage where the main focus of my homepage is about my website.
The properties I will use are:
- @type: this tells Google what type of schema is being described – in this instance, the schema type is mainEntity
- name: this is the homepage’s title tag
- url: since the main focus of the homepage is my website, the homepage’s full URL is added as the value
- @id: this is simply the URL of my homepage plus #website
I would write this:
"mainEntity":{
"@type":"WebSite",
"name":"Daniel K Cheung: SEO Consultant and Organic Growth Educator",
"url":"https://www.danielkcheung.com",
"@id":"https://www.danielkcheung.com/#website"
}
So to recap, here is the JSON-LD output so far:
<script type="application/ld+json">
{
"@context":"https://schema.org",
"@type":"WebPage",
"url":"https://www.danielkcheung.com",
"@id":"https://www.danielkcheung.com/#webpage",
"name":"SEO Consultant and Organic Growth Educator: Daniel K Cheung",
"description":"Based in Sydney, Australia, I help in-house SEO managers, product owners and marketing managers cut through the noise so that they can hire the right SEO partner.",
"inLanguage":"en-AU",
"mainEntity":{
"@type":"WebSite",
"name":"Daniel K Cheung: SEO Consultant and Organic Growth Educator",
"url":"https://www.danielkcheung.com",
"@id":"https://www.danielkcheung.com/#website"
}
}
</script>
This tells the search engine the following:
- It has come across a webpage
- The webpage has a URL of https://www.danielkcheung.com
- It has an URI = https://www.danielkcheung.com/#webpage
- The webpage has a name and description and the contents of the page are in Australian English
- The webpage is primarily about a thing called a website
- The website has a name, can be found at a particular URL and has its own unique ID as well
Now I’m going to use JSON-LD to tell the search engine what my website is about search engine optimisation and I’m going to use the about property and reference a knowledge graph URL via WikiData.
How use the about property with WikiData
Similar to the mainEntity property, the about property should be used once per entity. As its name suggests, I am using this property to tell a search engine what my website is about. And to make sure Google understands that my website is about SEO, I am going to reference a known entity from a knowledge graph.
FYI, a knowledge graph is a collection of data that is interconnected and used to represent and understand real-world entities and their relationships.
One example of a knowledge graph is WikiData and this is why I’m going to reference WikiData in my schema markup.
Since my website is all about SEO, I’m going to find the URL of the “search engine optimization” entity on WikiData and tell this to Google:
"mainEntity":{
"@type":"WebSite",
"name":"Daniel K Cheung: SEO Consultant and Organic Growth Educator",
"url":"https://www.danielkcheung.com",
"@id":"https://www.danielkcheung.com/#website",
"about":{"@id":"https://www.wikidata.org/wiki/Q180711"}
Alternatively, this could be expressed as:
"mainEntity":{
"@type":"WebSite",
"name":"Daniel K Cheung: SEO Consultant and Organic Growth Educator",
"url":"https://www.danielkcheung.com",
"@id":"https://www.danielkcheung.com/#website",
"about":{
"@type":"Thing",
"url":"https://www.wikidata.org/wiki/Q180711",
"name":"search engine optimization"
}
}
Now Google knows that my website is about a thing called search engine optimisation and that my homepage, which is a webpage, is about my website.
Can you start seeing how we’re making connections between everything?
How to use the publisher property to tell Google who is behind a website
Now I want to tell Google that my website is published by my consulting business where I am the founder.
Again, I am using curly brackets to create a relationship between one schema type to another.
To do this, I will need to reference the following types of schema:
- Person
- Thing
- Organization
- DefinedTerm
This is what the JSON-LD looks like:
"publisher":{
"@type":"OnlineBusiness",
"name":"Daniel K Cheung: SEO Consultant and Organic Growth Advisor",
"description":"Hi, I’m Daniel K Cheung and I am a freelance SEO consultant based in Sydney, Australia. I empower others to think critically about organic SERPs so that they can develop and execute effective SEO strategies. Unlike other SEO freelancers, I offer consulting-only services. That is, I don't execute SEO strategy but work with you to define and fine-tune what your long-term SEO strategy should be. I can assist you with hiring a suitable SEO partner (agency or individual freelancer) as well as helping you build out your own in-house team. What separates me from other SEO service providers is that I have no desire to sell you a long-term retainer. My goal is to give you honest advice that is aligned with your business goals and constraints",
"url":"https://g.page/r/CWCmrxul7e8jEBM/",
"founder":{
"@type":"person",
"name":"Daniel K Cheung",
"@id":"https://www.danielkcheung.com/about/#person",
"knowsAbout":[
{
"@type":"thing",
"name":"search engine optimisation",
"@id":"https://www.wikidata.org/wiki/Q180711"
},
{
"@type":"thing",
"name":"digital marketing",
"@id":"https://www.wikidata.org/wiki/Q1323528"
}
],
"sameAs":[
"https://twitter.com/danielkcheung",
"https://www.linkedin.com/in/danielkcheung/"
],
"worksFor":{
"@type":"organization",
"@name":"Optus Smart Spaces",
"parentOrganization":{
"@type":"organization",
"name":"Optus",
"url":"https://www.optus.com.au",
"@id":"https://www.wikidata.org/wiki/Q865038"
}
},
"jobTitle":{
"@type":"DefinedTerm",
"name":"SEO Manager"
}
}
The JSON-LD specifies the following:
- The publisher of this website is an organisation – specifically an online business
- The name of this online business is “Daniel K Cheung: SEO Consultant and Organic Growth Advisor”
- This online business can be found at https://g.page/r/CWCmrxul7e8jEBM/
- And the founder of this organisation is a person called Daniel K Cheung who has social profiles on Twitter and LinkedIn
- This person works at an organisation called “Optus Smart Spaces” with the role as a SEO Manager and knows about digital marketing and search engine optimization.
Where did I pull this information from?
Well, it’s from my Google Business Profile and I have copied across its exact name and description. I have also added the URL that is assigned to my GBP.
By now, you may be wondering why I have added properties such as worksFor, knowsAbout and jobTitle.
Well, this is because I don’t have a knowledge panel on Google search.
This means that I am not noteworthy enough and by using structured data, I can convey who I am and what I do in the context of the business I run and the website I have to offset this.
So if you’re working on a website that does not have its own knowledge panel, JSON-LD is a great way to explicitly tell Google:
- what the website is about
- who is behind the website
- and what their credentials are.
Essentially, JSON-LD mark up is one way to execute entity-based SEO.
So putting this all together, the JSON-LD for my homepage looks like this:
<script type="application/ld+json">
{
"@context":"https://schema.org",
"@type":"WebPage",
"url":"https://www.danielkcheung.com",
"@id":"https://www.danielkcheung.com/#webpage",
"name":"SEO Consultant and Organic Growth Educator: Daniel K Cheung",
"description":"Based in Sydney, Australia, I help in-house SEO managers, product owners and marketing managers cut through the noise so that they can hire the right SEO partner.",
"inLanguage":"en-AU",
"mainEntity":{
"@type":"WebSite",
"name":"Daniel K Cheung: SEO Consultant and Organic Growth Educator",
"url":"https://www.danielkcheung.com",
"@id":"https://www.danielkcheung.com/#website",
"about":{
"@type":"Thing",
"url":"https://www.wikidata.org/wiki/Q180711",
"name":"search engine optimization"
},
"publisher":{
"@type":"OnlineBusiness",
"name":"Daniel K Cheung: SEO Consultant and Organic Growth Advisor",
"description":"Hi, I’m Daniel K Cheung and I am a freelance SEO consultant based in Sydney, Australia. I empower others to think critically about organic SERPs so that they can develop and execute effective SEO strategies. Unlike other SEO freelancers, I offer consulting-only services. That is, I don't execute SEO strategy but work with you to define and fine-tune what your long-term SEO strategy should be. I can assist you with hiring a suitable SEO partner (agency or individual freelancer) as well as helping you build out your own in-house team. What separates me from other SEO service providers is that I have no desire to sell you a long-term retainer. My goal is to give you honest advice that is aligned with your business goals and constraints",
"url":"https://g.page/r/CWCmrxul7e8jEBM/",
"founder":{
"@type":"person",
"name":"Daniel K Cheung",
"@id":"https://www.danielkcheung.com/about/#person",
"knowsAbout":[
{
"@type":"thing",
"name":"search engine optimisation",
"@id":"https://www.wikidata.org/wiki/Q180711"
},
{
"@type":"thing",
"name":"digital marketing",
"@id":"https://www.wikidata.org/wiki/Q1323528"
}
],
"sameAs":[
"https://twitter.com/danielkcheung",
"https://www.linkedin.com/in/danielkcheung/"
],
"worksFor":{
"@type":"organization",
"@name":"Optus Smart Spaces",
"parentOrganization":{
"@type":"organization",
"name":"Optus",
"url":"https://www.optus.com.au",
"@id":"https://www.wikidata.org/wiki/Q865038"
}
},
"jobTitle":{
"@type":"DefinedTerm",
"name":"SEO Manager"
}
}
}
}
}
</script>
And Googlebot, this is what it would comprehend (if it could talk):
As I crawled this webpage, I found some structured data in the form of JSON-LD. This data gave me information about the webpage itself, including its URL, name, and description. It also told me that the language of the webpage is English as used in Australia.
The JSON-LD data also identified the main entity associated with the webpage as a website. This website is described as being about search engine optimization and is published by an online business called “Daniel K Cheung: SEO Consultant and Organic Growth Advisor.”
The data also included information about the founder of the online business, who is identified as a person named “Daniel K Cheung.” This person is described as having knowledge about search engine optimization and digital marketing, and as working for a company called Optus Smart Spaces. The data also included links to social media profiles and other online information about this person.
And this is what the same JSON-LD looks like visualised:

Let me provide a few more real-world JSON-LD markup for different types of websites and business.
How to write homepage schema for a brick and mortar bridal store with multiple locations across the world
For this demonstration, I am going to write description JSON-LD for the Australian business Grace Loves Lace.
I have chosen this entity because:
- Grace Loves Lace does not have a knowledge panel but it does have a GBP (source)
- according to similarweb, this website gets at least 30,000 monthly visitors (source)
- the homepage has no structured data present
- the brand has accounts on multiple social media networks
- it has a founder (source)
- they have multiple physical locations in Australia, North America, UK and Canada that people can visit, each with their own telephone number, opening hours, landing page and contact email address (source).
The job to be done is to tell Google how all these different stores relate to the overall business called Grace Loves Lace and how it is all connected and accessible from a single webpage.
FYI, you can watch me build out the JSON-LD in this video.
Since Grace Loves Lace has physical locations in Boston, Atlanta, Sydney, Melbourne, Perth, London, Houston and Los Angeles, each showroom becomes a localBusiness schema type and I will use the department item property to link them to the main organization schema.
"department":[
{
"@type":"localBusiness",
"@id":"https://graceloveslace.com.au/pages/chicago-showroom/#localbusiness"
},
{
"@type":"localBusiness",
"@id":"https://graceloveslace.com.au/pages/sydney-showroom/#localbusiness"
},
{
"@type":"localBusiness",
"@id":"https://graceloveslace.com.au/pages/london-showroom/#localbusiness"
}
]
And because there are multiple locations, I have used the square brackets to wrap individual pairs of curly brackets.
Here it is in full:
<script type="application/ld+json">
{
"@context":"https://schema.org",
"@type":"WebPage",
"headline":"Grace Loves Lace AU | Australian Wedding Dresses | Bridal Boutique",
"url":"https://graceloveslace.com.au/",
"@id":"https://graceloveslace.com.au/#webpage",
"mainEntity":{"@id":"https://graceloveslace.com.au/#website/#organization"},
"description":"For the women of style, substance & passion. Grace Loves Lace specialise in unique, luxurious & comfortable wedding dresses. Handmade in Australia.",
"inLanguage":"en-AU",
"isPartOf":{
"@type":"WebSite",
"url":"https://graceloveslace.com.au/",
"@id":"https://graceloveslace.com.au/#website",
"name":"Grace Loves Lace AU | Australian Wedding Dresses | Bridal Boutique",
"about":{
"@type":"Thing",
"name":"wedding dress",
"@id":"https://www.wikidata.org/wiki/Q170063"
}
},
"publisher":{
"@type":"organization",
"name":"Grace Loves Lace",
"@id":"https://graceloveslace.com.au/#website/#organization",
"founder":{
"@type":"person",
"name":"Megan Ziems",
"sameAs":"https://www.linkedin.com/in/megan-ziems/"
},
"email":"[email protected]",
"telephone":"+6175 520 0024",
"sameAs":[
"https://www.instagram.com/grace_loves_lace/",
"https://www.tiktok.com/@grace_loves_lace",
"https://www.pinterest.com.au/graceloveslace/",
"https://www.youtube.com/channel/UCpfq7h7oHCuGIPmwbb39buA",
"https://www.facebook.com/Graceloveslace/"
],
"department":[
{
"@type":"localBusiness",
"name":"Wedding Dresses Gold Coast | Bridal Showroom - Grace Loves Lace AU",
"description":"For a unique & unforgettable bridal shopping experience, book your complimentary wedding dress appointment at Grace Loves Lace Gold Coast today.",
"url":"https://graceloveslace.com.au/pages/gold-coast-showroom",
"@id":"https://graceloveslace.com.au/pages/gold-coast-showroom/#localbusiness",
"telephone":"+61755203880",
"email":"[email protected]",
"address":{
"@type":"PostalAddress",
"streetAddress":"2 Hibiscus Haven",
"addressRegion":"Burleigh Heads",
"postalCode":"4220",
"addressCountry":"Australia"
},
"location":{
"@type":"place",
"geo":{
"@type":"geoCoordinates",
"latitude":"-28.07736",
"longitude":"153.44462"
}
},
"openingHoursSpecification":[
{
"@type":"openingHoursSpecification",
"dayofWeek":[
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"sunday"
],
"opens":"08:30",
"closes":"17:00"
}
]
},
{
"@type":"localBusiness",
"name":"Wedding Dresses Melbourne | Bridal Showroom - Grace Loves Lace AU",
"description":"For a unique & unforgettable bridal shopping experience, book your complimentary wedding dress appointment at Grace Loves Lace Melbourne today.",
"url":"https://graceloveslace.com.au/pages/melbourne-showroom",
"@id":"https://graceloveslace.com.au/pages/melbourne-showroom/#localbusiness",
"telephone":"+61396860024",
"email":"[email protected]",
"address":{
"@type":"PostalAddress",
"streetAddress":"232 Bank Street",
"addressRegion":"South Melbourne",
"postalCode":"3205",
"addressCountry":"Australia"
},
"location":{
"@type":"place",
"geo":{
"@type":"geoCoordinates",
"latitude":"-37.83439",
"longitude":"144.95884"
}
},
"openingHoursSpecification":[
{
"@type":"openingHoursSpecification",
"dayofWeek":[
"Monday",
"Tuesday",
"Wednesday",
"Friday",
"Saturday",
"sunday"
],
"opens":"08:30",
"closes":"17:00"
},
{
"@type":"openingHoursSpecification",
"dayofWeek":"Thursday",
"opens":"10:00",
"closes":"20:00"
}
]
},
{
"@type":"localBusiness",
"name":"Wedding Dresses Perth | Bridal Showroom - Grace Loves Lace AU",
"description":"For a unique & unforgettable bridal shopping experience, book your complimentary wedding dress appointment at Grace Loves Lace Perth today.",
"url":"https://graceloveslace.com.au/pages/perth-showroom",
"@id":"https://graceloveslace.com.au/pages/perth-showroom/#localbusiness",
"telephone":"+61862195030",
"email":"pe[email protected]",
"address":{
"@type":"PostalAddress",
"streetAddress":"222 Queen Victoria Street",
"addressRegion":"North Fremantle",
"postalCode":"6159",
"addressCountry":"Australia"
},
"location":{
"@type":"place",
"geo":{
"@type":"geoCoordinates",
"latitude":"-30.34333",
"longitude":"155.40203"
}
},
"openingHoursSpecification":[
{
"@type":"openingHoursSpecification",
"dayofWeek":[
"Monday",
"Tuesday",
"Wednesday",
"Friday",
"Saturday",
"sunday"
],
"opens":"08:30",
"closes":"17:00"
},
{
"@type":"openingHoursSpecification",
"dayofWeek":"Thursday",
"opens":"08:30",
"closes":"20:00"
}
]
},
{
"@type":"localBusiness",
"name":"Wedding Dresses Sydney | Bridal Showroom - Grace Loves Lace AU",
"description":"For a unique & unforgettable bridal shopping experience, book your complimentary wedding dress appointment at Grace Loves Lace Sydney today.",
"url":"https://graceloveslace.com.au/pages/sydney-showroom",
"@id":"https://graceloveslace.com.au/pages/sydney-showroom/#localbusiness",
"telephone":"+61293102127",
"email":"[email protected]",
"address":{
"@type":"PostalAddress",
"streetAddress":"7C/41-43 Bourke Road",
"addressRegion":"Alexandria",
"postalCode":"2015",
"addressCountry":"Australia"
},
"location":{
"@type":"place",
"geo":{
"@type":"geoCoordinates",
"latitude":"-33.87325",
"longitude":"151.18585"
}
},
"openingHoursSpecification":[
{
"@type":"openingHoursSpecification",
"dayofWeek":[
"Monday",
"Tuesday",
"Wednesday",
"Friday",
"sunday"
],
"opens":"09:30",
"closes":"18:00"
},
{
"@type":"openingHoursSpecification",
"dayofWeek":"Thursday",
"opens":"10:00",
"closes":"20:00"
},
{
"@type":"openingHoursSpecification",
"dayofWeek":"Saturday",
"opens":"09:00",
"closes":"19:00"
}
]
},
{
"@type":"localBusiness",
"name":"Atlanta Showroom - Grace Loves Lace AU",
"description":"For a unique & unforgettable bridal shopping experience, book your complimentary wedding dress appointment at Grace Loves Lace Atlanta today.",
"url":"https://graceloveslace.com.au/pages/atlanta-showroom",
"@id":"https://graceloveslace.com.au/pages/atlanta-showroom/#localbusiness",
"telephone":"404-600-3621",
"email":"[email protected]",
"address":{
"@type":"PostalAddress",
"streetAddress":"1000 Marietta Street, Unit 118",
"addressRegion":"Alanta",
"postalCode":"30318",
"addressCountry":"USA"
},
"location":{
"@type":"place",
"geo":{
"@type":"geoCoordinates",
"latitude":"35.59794",
"longitude":"-84.86232"
}
},
"openingHoursSpecification":[
{
"@type":"openingHoursSpecification",
"dayofWeek":[
"Monday",
"Tuesday",
"Wednesday",
"Friday",
"sunday"
],
"opens":"09:00",
"closes":"17:30"
},
{
"@type":"openingHoursSpecification",
"dayofWeek":"Thursday",
"opens":"10:00",
"closes":"19:00"
},
{
"@type":"openingHoursSpecification",
"dayofWeek":"Saturday",
"opens":"09:00",
"closes":"17:30"
}
]
},
{
"@type":"localBusiness",
"name":"Boston Bridal Showroom | Unique Wedding Dresses - Grace Loves Lace AU",
"description":"Visit our Boston bridal showroom for a bridal shopping experience you'll never forget! Unique wedding dresses, private suites & champagne!",
"url":"https://graceloveslace.com.au/pages/boston-showroom",
"@id":"https://graceloveslace.com.au/pages/boston-showroom/#localbusiness",
"telephone":"+18572334644",
"email":"[email protected]",
"address":{
"@type":"PostalAddress",
"streetAddress":"25 Thomson Place, Suite 102",
"addressRegion":"Boston",
"postalCode":"02210",
"addressCountry":"USA"
},
"location":{
"@type":"place",
"geo":{
"@type":"geoCoordinates",
"latitude":"44.71046",
"longitude":"-70.09670"
}
},
"openingHoursSpecification":[
{
"@type":"openingHoursSpecification",
"dayofWeek":[
"Monday",
"Tuesday",
"Wednesday",
"Friday",
"sunday"
],
"opens":"09:00",
"closes":"17:30"
},
{
"@type":"openingHoursSpecification",
"dayofWeek":"Thursday",
"opens":"10:00",
"closes":"19:00"
},
{
"@type":"openingHoursSpecification",
"dayofWeek":"Saturday",
"opens":"09:00",
"closes":"19:00"
}
]
},
{
"@type":"localBusiness",
"name":"Chicago Wedding Dress Showroom - Grace Loves Lace AU",
"description":"For a unique & unforgettable bridal shopping experience, book your complimentary wedding dress appointment at Grace Loves Lace Chicago today.",
"url":"https://graceloveslace.com.au/pages/chicago-showroom",
"@id":"https://graceloveslace.com.au/pages/chicago-showroom/#localbusiness",
"telephone":"+13128466484",
"email":"[email protected]",
"address":{
"@type":"PostalAddress",
"streetAddress":"853-855 W. Randolph, 2nd Floor",
"addressRegion":"Chicago",
"postalCode":"60607",
"addressCountry":"USA"
},
"location":{
"@type":"place",
"geo":{
"@type":"geoCoordinates",
"latitude":"43.70245",
"longitude":"-87.85061"
}
},
"openingHoursSpecification":[
{
"@type":"openingHoursSpecification",
"dayofWeek":[
"Monday",
"Tuesday",
"Wednesday",
"Friday",
"sunday"
],
"opens":"09:00",
"closes":"17:30"
},
{
"@type":"openingHoursSpecification",
"dayofWeek":"Thursday",
"opens":"09:00",
"closes":"17:30"
},
{
"@type":"openingHoursSpecification",
"dayofWeek":"Saturday",
"opens":"09:00",
"closes":"19:00"
}
]
}
]
}
}
</script>
This may seen like a lot of work and it is. But the good news is that every schema type for each location can be reused for their corresponding location landing pages.
And here are the relationships between each showroom to the main organization entity and how they are related to the homepage in visual format:

Furthermore, each location is understood by Google using the Rich Results Test:

How to write homepage schema for a new business line for an existing company that sits on a subdomain
From time to time, a business will launch a business line that is significantly different to what it is known for. And they may do so as a subdomain of the main website.
JSON-LD can be an effective way to help Google understand the subtle difference between the parent organisation and the new entity. In fact, this is exactly what I have done at my day job.
An example of this is Smart Spaces, a website that sits on a subdomain of optus.com.au.
Unlike the root domain www.optus.com.au, Smart Spaces does not offer telecommunication products or services. Instead, Smart Spaces is a separate entity that sells smart products and offers expert installation.
This is how I would use JSON-LD to describe how Smart Spaces is different to Optus but yet connect the two organisations together.
<script type="application/ld+json">
{
"@context":"https://schema.org",
"@type":"WebPage",
"url":"https://www.smartspaces.com.au",
"@id":"https://www.smartspaces.com.au/#webpage",
"inLanguage":"en-AU",
"mainEntity":{
"@type":"organization",
"@id":"https://www.smartspaces.com.au/#organization",
"name":"Optus Smart Spaces",
"url":"https://www.smartspaces.com.au"
},
"isPartOf":{
"@type":"WebSite",
"url":"https://www.smartspaces.optus.com.au",
"@id":"https://www.smartspaces.optus.com.au/#website",
"name":"Smart Spaces",
"description":"It's never been easier to create the smart home you need with our smart device collections and the O-Team."
},
"publisher":{
"@type":"Organization",
"name":"Optus Smart Spaces",
"id":"https://www.smartspaces.optus.com.au/#organization",
"legalName":"Optus Smart Spaces Pty Limited",
"hasMerchantReturnPolicy":{
"applicableCountry":"AU",
"url":"https://www.smartspaces.optus.com.au/returns-and-warranty"
},
"parentOrganization":{
"@type":"Organization",
"name":"Optus",
"@id":"https://www.wikidata.org/wiki/Q865038",
"legalName":"Singtel Optus Pty Limited",
"address":{
"@type":"PostalAddress",
"addressLocality":"Sydney, Australia",
"postalCode":"2113",
"streetAddress":"1 Lyonpark Road"
},
"url":"https://www.optus.com.au",
"parentOrganization":{
"@type":"Organization",
"name":"Singtel",
"legalName":"Singapore Telecommunications Limited",
"@id":"https://www.wikidata.org/wiki/Q864923",
"url":"https://www.singtel.com/",
"address":{
"@type":"PostalAddress",
"addressLocality":"Singapore",
"postalCode":"239732",
"streetAddress":"31 Exeter Road"
},
"parentOrganization":{
"@type":"Organization",
"legalName":"Temasak Holdings",
"@id":"https://www.wikidata.org/wiki/Q762479"
}
}
}
}
}
</script>
This is what a search engine would understand from the markup:
This script is a piece of JavaScript Object Notation for Linking Data that is used to provide structured data about a web page or website. The structured data is defined using the schema.org vocabulary, which is a standardised set of properties and types that can be used to describe a wide variety of entities and their attributes.
In this particular script, the main entity being described is an organization called “Optus Smart Spaces,” which has a name, URL, and ID.
The organization is also part of a larger website called “Smart Spaces,” which has its own URL, ID, name, and description.
The website also has an “about” property that describes a “thing” with a name of “smart device” and an ID.
The publisher of the website is also identified as an organization called “Optus Smart Spaces,” which has a legal name, return policy, and address.
The parent organization of this publisher is identified as “Optus,” which has its own legal name, address, URL, and parent organization (which is identified as “Singtel”).
The parent organization of Singtel is identified as “Temasak Holdings.”
How I would write better homepage schema for Swyftx (a cryptocurrency exchange)
When you head over to https://swyftx.com/au/, you will find there is structured data markup on the homepage.
You will find two schema types have been defined: WebPage and FAQPage.
Dig a little further in the HTML source and you’ll find that the schema markup has been generated by Yoast. That is, the page itself has dynamically generated JSON-LD and the accordion block that houses the FAQ content generates its own script.
While this is fine, an opportunity to link these two schemas together has been missed.
So instead of having two disconnected schema types, this is how I would inform Google that the FAQPage schema is related to the homepage WebPage entity:
<script type="application/ld+json">
{
"@context":"https://schema.org",
"@graph":[
{
"@type":"WebPage",
"headline":"Swyftx: Australian Crypto Exchange | Buy Cryptocurrency",
"description":"Trade over 310+ coins with low fees with Swyftx Cryptocurrency Exchange Australia. Trial our Australian Crypto Exchange app using demo mode.",
"url":"https://swyftx.com/au/",
"@id":"https://swyftx.com/au/#website",
"inLanguage":"en-AU",
"mainEntity":{"@id":"https://swyftx.com/au/#organization"},
"isPartOf":{
"@type":"WebSite",
"url":"https://swyftx.com/au/",
"@id":"https://swyftx.com/au/",
"name":"Swyftx: Australian Crypto Exchange | Buy Cryptocurrency",
"publisher":{
"@type":"organization",
"name":"Swyftx Pty Ltd",
"legalName":"Swyftx Pty Ltd",
"alternateName":"Swyftx",
"@id":"https://swyftx.com/au/#organization",
"founder":[
{
"@type":"person",
"name":"Alex Harper",
"sameAs":"https://www.linkedin.com/in/alex-harper-52640151/"
},
{
"@type":"person",
"name":"Angus Goldman",
"sameAs":"https://www.linkedin.com/in/angus-goldman/"
}
],
"sameAs":[
"https://facebook.com/swyftx",
"https://twitter.com/swyftxau",
"http://instagram.com/swyftx",
"http://linkedin.com/company/swyftx",
"http://vm.tiktok.com/ZSeAXBC6A/",
"http://youtube.com/channel/UCwY1JU3769E6flCHj1KpwbQ"
]
}
}
},
{
"@type":"FAQPage",
"isPartOf":{"@id":"https://swyftx.com/au/#website"},
"mainEntity":[
{
"@type":"Question",
"name":"Is Swyftx a secure exchange?",
"acceptedAnswer":{
"@type":"Answer",
"text":"Being able to trust the Australian exchange that you use is incredibly important. Swyftx is an AUSTRAC registered exchange that complies with anti-money laundering laws stated in the Counter-Terrorism Financing Act 2006. We treat account security with the highest priority and our dedicated security team have decades of experience in building robust security frameworks and investigating consumer data breaches.
Since launching in 2017, Swyftx has had 0 security breaches which reflects our strong commitment to security."
}
},
{
"@type":"Question",
"name":"What are the Swyftx fees?",
"acceptedAnswer":{
"@type":"Answer",
"text":"Both our crypto trading fees and spreads are lower than the industry averages, meaning we are one of the most affordable crypto exchanges in Australia. Swyftx has a trading fee of 0.6% for all buy and sell crypto orders. Our market spreads average out to 1.7% with spreads on Bitcoin as low as 0.45%. The market spread is the difference between the buy and sell prices of an asset listed on an exchange.
All Australian cryptocurrency exchanges have a market spread, however, the size of the spread will differ depending on the exchange. Swyftx is able to offer razor-sharp spreads, competitive fees and our large pools of trading volume thanks to our network of global liquidity partners and banking partners.
"
}
},
{
"@type":"Question",
"name":"How do I buy crypto with Swyftx",
"acceptedAnswer":{
"@type":"Answer",
"text":"It’s our goal at Swyftx to make buying cryptocurrency as simple as possible. You can buy over 300+ assets on the Swyftx crypto trading platform and app. Simply sign up and verify your account, deposit AUD, and choose from our extensive list of digital assets. From there, select the quantity of the cryptocurrency you’d like to buy, or the AUD equivalent and confirm your order. Your crypto will then be immediately stored in your own personal Swyftx wallet."
}
},
{
"@type":"Question",
"name":"How do I verify my account?",
"acceptedAnswer":{
"@type":"Answer",
"text":"Swyftx complies with regulations set by AUSTRAC and therefore we must apply customer identification procedures to all our customers.
To activate your account after you've signed up, you'll be required to complete our account verification process. You'll need to verify your email address, phone number and identity. You won’t have to submit any documents. Using our inbuilt ID scanner, scan your photo Identification. This process typically takes no longer than 3 minutes to complete, meaning you won’t have to wait for lengthy approvals."
}
},
{
"@type":"Question",
"name":"Does Swyftx have Australian-based customer support?",
"acceptedAnswer":{
"@type":"Answer",
"text":"Yes, Swyftx has a team of over 50 Australian-based customer support staff. Understanding cryptocurrency and blockchain technology can be difficult when first starting out. That’s why we have dedicated plenty of time and resources to provide the best quality personalised customer support possible.
In addition to this, we also have offshore customer support staff based in New Zealand, the UK and Europe to assist with customer queries outside of business hours."
}
},
{
"@type":"Question",
"name":"Does Swyftx have SMSF and company accounts?",
"acceptedAnswer":{
"@type":"Answer",
"text":"Yes, Swyftx does support self-managed super fund (SMSF) and company accounts. The process for setting up one of these accounts is different to setting up a personal trading account. For more information on entity and SMSF accounts, visit the Swyftx help centre."
}
} ]
}
]
}
</script>
What you’ll notice when you copy and paste this JSON-LD into a schema validator is that the main schema type is now set to FAQPage.
This is because I have described FAQPage as a part of WebPage, where the WebPage is primarily about an Organization and the same WebPage is a part of a WebSite that is published by the same Organization.
This is what a search engine would see when coming across the code:
As a search engine, I am seeing a script written in JSON-LD format that appears to provide structured data about a webpage and a FAQ page for a company called Swyftx, an Australian cryptocurrency exchange.
The script includes information about the webpage and the company, including the company’s name, legal name, and founders, as well as links to the company’s social media profiles.
The script also includes a list of frequently asked questions and answers about the company, including information about its security measures, fees, and process for buying and selling cryptocurrency.
The script specifies that the language of the webpage and the company is English and that the webpage is a part of a larger website for the company.
FAQs
1. I’ve seen the @id property have a trailing slash and also not have a trailing slash before the fragment identifier (#) – does this matter?
The @id property is used to identify a specific entity or concept within the context of the JSON-LD data. The value of this property is typically a URL and it is common to include a trailing slash before the hashtag (#) to indicate the start of the fragment identifier.
The fragment identifier is used to identify a specific part or section of a webpage, and it is separated from the rest of the URL by a hashtag.
Adding a trailing slash before the fragment identifier can help to clearly distinguish the fragment identifier from the rest of the URL and make it easier to parse and interpret. However, whether or not to include a trailing slash before the fragment identifier in the @id property is a matter of style and personal preference.
2. Can I use mainEntity and about properties interchangeably?
While it is possible to use these two properties interchangeably, you shouldn’t. This is because the mainEntity property is used to identify the primary entity that the webpage is about and the about property is used to identify the general topic or subject matter that the webpage is about.
I recommend using the mainEntity property when the webpage is focused on a single, specific entity, such as a product, event, or person.
On the other hand, use the about property is used when the webpage covers a more general or broad topic, rather than a specific entity.
For example, consider a webpage about a specific product. In this case, it would be appropriate to use the mainEntity property to identify the product and provide more information about it using properties such as name, description, and image.
However, if the webpage is also providing information about the general topic of the product category that the product belongs to, use the about property to identify this topic and provide more information about it using other relevant item properties.
3. Will FAQpage schema markup on the homepage work?
Yes and no.
You can incorporate the FAQpage schema type into your homepage schema markup. This will tell a search engine what each question and corresponding answer is. This is what Swftx has done. However, homepages cannot show FAQpage rich results on Google search.
Therefore, while the markup is valid, you cannot get a homepage to show FAQPage rich results on Google search which is one of the biggest reasons why this markup is done.