How to Use Schema Markup (Structured Data / JSON-LD) for SEO: A Guide

Imagine you’re in a supermarket, all the shelves have fallen down, the products are on the floor, and there’s no way to navigate the aisles to grab your groceries. You’re scrambling around to find something, anything that matches your criteria for dinner. One by one, you’re picking up single items trying to figure out where they’ve come from, what their price is, and where they were originally displayed. Eventually, you’ll find what you’re looking for, but you’ll have been in there double, maybe triple the time you expected to be, and you leave feeling dishevelled and stressed. That’s if you make it that far, you may just leave altogether and get take-out on the way home. 

That’s exactly the same as having unstructured data on your website. Google doesn’t know what you’re trying to say, who you’re serving the information to, and why. So it simply can’t serve the right information for the right search term. That leaves the user having to find the relevant information to their search themselves, making the process longer, harder, and more stressful. It could mean that they leave the search engine results pages (SERP) and go elsewhere. As the website owner, you lose out on this real-estate opportunity, and traffic in the process. 

What is Schema Markup?

Schema Markup or Structured Data is a form of data that is placed within your website code to essentially tell Google what the most important aspects of your pages are based on the information on the pages for various search terms. There are various different encodings which can be applied to schema including RDFa, Microdata and JSON-LD. 

Predominantly, we work with JSON-LD. But, we’re not shy to the formers either. JSON stands for JavaScript Object Notation which is used to structure data between a server and web application – essentially between the servers of search engine crawlers and the content pages of your website, to put it in a readable format for the end-user. It’s usually displayed in snippets at the top and side of the search engine results page (SERP), the best spot, and exactly where you’d want to be!  

Schema markup is made up of properties and types, the type refers to what kind of information you’re trying to structure. This could vary from services, products, recipes, how-to guides, FAQs, job listings, the list could go on and on. The property refers to an indication of attributes and relationships of some Thing. A Thing is the most generic type of site.  

There’s a phenomenal amount of schema data that doesn’t need to all be used at once, or even at all, for every single website. Every project is unique, therefore, deciding how and what to display should be an authentic process, unique to the website and content available to the user. If your business doesn’t have content that isn’t currently ‘available’ online, then create it. What’s SEO if not for creating meaningful content for a purpose? 

Types of Schema Markup 

jobPosting

With the introduction of one of Google’s latest features, Google Jobs, recruitment websites or careers sections of sites can take advantage of this (in my earlier article, I talk about how to do wider SEO for recruitment). It’s really simple and allows you to display your job advert in the enriched search results.  

For example, if we were to post one of our digital marketing job openings to our site, we could mark it up like this: 

<script type="application/ld+json">
{
    "@context" : "http://schema.org/",
    "@type" : "JobPosting",
    "title" : "Digital Marketing Manager",
    "description" : "Design and oversee all aspects of our digital marketing department including our marketing database, email, and display advertising campaigns. Develop and monitor campaign budgets. Plan and manage our social media platforms. Prepare accurate reports on our marketing campaign’s overall performance.",
    "datePosted" : "2019-10-09",
    "validThrough" : "2019-11-09",
    "employmentType" : "FULL_TIME",
    "hiringOrganization" : {
        "@type" : "Organization",
        "name" : "HeadRed",
        "sameAs" : "https://www.headred.net",
        "logo" : "https://www.headred.net/img/aboutus-1.jpg"
    },
    "jobLocation" : {
        "@type" : "Place",
        "address" : {
            "@type" : "PostalAddress",
            "addressLocality" : "Coventry",
            "addressCountry": "UK"
        }
    },
    "baseSalary": {
        "@type": "MonetaryAmount",
        "currency": "GBP",
        "value": {
            "@type": "QuantitativeValue",
            "value": "£20000 - £40000",
            "unitText": "YEAR"
        }
    }
}
</script>


This piece of code signals to Google that there is a job listing on this specific webpage and therefore sorts the data as relevant to the keywords in the search just like this: 

LocalBusiness

LocalBusiness markup is potentially one of the most common forms of markup. It signals to Google that there is a relevant business local to the area searched within. A chain of businesses, for example, would have all of its outlets listed for each area within a certain distance. As with all markup, LocalBusiness has the opportunity to be extremely personalised. Depending on the service offering, businesses can mark up each individual service, its description, the location, the price, contact details, or just keep to the contact and address. The markup can be expanded or condensed to suit.     

<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "LocalBusiness",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Coventry",
    "addressRegion": "West Midlands",
    "streetAddress": "Unit 5, Cobalt Centre, Siskin Parkway East",
    "postalCode": "CV3 4PE"
  },
  "description": "A fully integrated web design and digital marketing agency based in Coventry. Our experienced team comes skilled in everything from design and web development to SEO, Social Media and Paid advertising.",
  "name": "HeadRed",
  "image": "https://www.headred.net/img/aboutus-1.jpg",
  "telephone": "02476 303 685"
}
</script>

Organization

Similar to LocalBusiness, Organization markup provides information for all types of companies, businesses, NGOs, charities, institutions etc., that may not necessarily provide a tangible product or an extended number of services. It’s meta and will only be selected by Google when used to describe the business itself. 

Reviews

Arguably one of the most important areas of marketing in the modern age of consumerism is reviews. Users, shoppers and consumers alike are opting for user-generated content, following influencers, and seeking out reviews as their first port of call to validify a product or service.

Google recently made an announcement to make reviews more ‘helpful and meaningful’. This essentially means that businesses can’t make the rules for how good their service is. With an already ‘no self-serving’ policy in place, Google only plans to expand on this. Now, LocalBusiness and Organization schema with review markup in place will no longer be shown in the SERPs. Google is simply knocking them out from the most generic reviewing system. This means that businesses will now have to achieve more authentic reviews which are relevant to the business or author but represent the product more than the business itself such as: Books, Episodes, Events, HowTo, LocalBusiness (in some circumstances), Movie, Product, Recipe. 

So now, more than ever, it’s important to get authentic reviews from legitimate customers on the Google reviews platform

HowTo & FAQs

Increasingly, with the emergence of voice search such as Amazon Alexa, Google Home, Siri and so on, people are using search to find out how to do things, find out quick recipes whilst in their kitchen, and to ask very generic questions pertaining to lifestyle and everyday tasks. Just look at the search volume for ‘how to boil an egg’.😲

Most websites have an FAQ guide on their website, whether that relates to their delivery charges, delivery lengths, how to get in touch, how to buy their products or whatever else. This is a prime bit of content to markup with FAQ schema. Personally I think it’s the easiest bit of schema you can have, the content is usually detailed and rich as it is, so all you need to do is wrap it up in a bit of JSON and you’re pretty much done. 

 <script type="application/ld+json">
 {
  "@type": "FAQPage",
  "mainEntity": [{
    "@type": "Question",
    "name": "Once I’ve submitted an enquiry, when should I expect to hear back from [business name]?",
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "Our policy is to reply to enquiries within 24 hours"
    }
  },{
    "@type": "Question",
    "name": "What are the delivery options available?",
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "1st class mail, this is an uninsured and untraceable service so, should only be used for very low value orders. RMSD (Royal Mail Special Delivery) guaranteed before 1.00pm next working day service, this is an insured and part traceable service for parcels weighing up to 1.75kg and lastly, we offer UPS next day, again a guaranteed next working day service that is insured and fully traceable for parcels weighing up to 29kg"
    }
  },{
    "@type": "Question",
    "name": "Where do you ship to?",
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "We ship to the UK only. Please contact us for special shipping options."
    }
  },{
    "@type": "Question",
    "name": "How quickly is my order shipped?",
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "Our aim is to ship orders on the day of purchase."
    }
  },{
    "@type": "Question",
    "name": "What to do if my order hasn't arrived yet?",
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "Please send us an email with your order number and we'll look into your order status."
    }
  },{
    "@type": "Question",
    "name": "My order is incomplete or damaged.",
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "Please send us an email with your order number and the problem with your order (a contact telephone number would be extra handy) and we will contact you as soon as possible to correct the problem."
    }
  }]
}
</script>

Products 

Product is useful to mark up any offered product or service by a business or organization. It doesn’t have to be a tangible product either. It could be a coat, trainers, an event ticket, an episode available for streaming on Netflix or Amazon, a mortgage, an investment plan, conveyancing. You get the idea. 

This helps Google to fish out your products from your page to serve it up to the user. Think back to the supermarket aisles, if you’re looking to buy milk, you’d go straight down the dairy aisle where the supermarket had previously stacked them. The same with search,  Google will serve up products as relevant to your search term in a snazzy shopping carousel. 

<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "Product",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "3.5",
    "reviewCount": "15"
  },
  "description": "Black and white rubber soled vans classic lace up skate trainers",
  "name": "Vans Classic Trainers",
  "image": "vans-classic-image.jpg",
  "brand": "Vans",
  "offers": {
    "@type": "Offer",
    "availability": "http://schema.org/InStock",
    "price": "60.00",
    "priceCurrency": "GBP"
  },
  "review": [
    {
      "@type": "Review",
      "author": "John",
      "datePublished": "2019-10-09",
      "description": "Great shoes. Stylish & comfortable!",
      "name": "Does the job!",
      "reviewRating": {
        "@type": "Rating",
        "bestRating": "5",
        "ratingValue": "5",
        "worstRating": "1"
      }
    },
    {
      "@type": "Review",
      "author": "Lucy",
      "datePublished": "2019-10-09",
      "description": "Item was okay for what they are, not impressed with the price",
      "name": "Mediocre",
      "reviewRating": {
        "@type": "Rating",
        "bestRating": "5",
        "ratingValue": "3",
        "worstRating": "1"
      }
    }
  ]
}
</script>

Events 

A search query with the word such as ‘events’, ‘things on’ and ‘what’s on’ in (amongst others) triggers Google events to appear in search and maps results. Marking up an event allows you the ability to specify the date, time, price, description, special guests, so your event will appear handily in the pop-up carousel for events near to the date the user is searching for. Dates and times can be personalised along with location as below:  

Note that this list really isn’t exhaustive, there are many, many types of schema vocabulary that can be written or adapted for specific purposes. 

Does Schema Markup reduce click-through?

Particularly with quick, need-to-know style queries such as HowTo, FAQs and recipes, your click-through-rate for these queries may not be as high as your historical data may suggest. That’s because the answers are being served directly to the user in search. However, these snippets of information will appear in the ‘rich snippet’ at the top of the SERP, for the rest of the information, users will need to click on the article to find out more information. This is why in competitive SERPs for questions, where users want an answer immediately, it’s crucial to your strategy to optimise for these.  It’s also a great strategy for brand awareness, in its simplest form. If your brand is showing up in the top of the SERPs, users will often remember that, and you could become the go-to for that particular product or service.

How to implement Schema Markup 

Implementing schema markup is relatively easy. All you’ll need is a text editor to write the code into. Using a text editor is much better than the likes of Word or Google docs as it will paste in exactly the right format into your pages. Using word processors can automatically insert characters into your code which can break if not picked up. 

Then, once you’ve written your code relevant to the types of information you want to order, you can test it using Google’s handy structured data testing tool to make sure that there are no errors or unrecognised values. Sometimes it will pick up a missing section and highlight it as a warning, but this isn’t anything to be worried about. Particularly for those properties for FinancialProduct schema as you can be a business ‘selling’ financial products without having individual prices listed on the webpage.  

Once the data testing tool shows there are no errors, you’re good to go. Send the code to your developer and ask them to upload into the header or the body of the designated page. For different types of schema, you’ll need to outline each individual type for each page’s destination. 

Don’t have a developer? We do. Give us a call, who knows,  we could end up being your digital partner!