Getting started with Schema markups

04/10/2017 - - Nettrafikk / 8,5 minutes lesetid (1717 words)
Share on LinkedInShare on FacebookShare on Google+Tweet about this on Twitter

Schema markups helps Googlebot and other crawlers understand more, and to put it into the context you want them to use this understanding for.

SEO has become increasingly complex the last few years, and even for those who work with SEO daily, it can be difficult to stay on top of changing algorithms, new features, and to maintain the best practices. In this article we’ll deal with Schema.org – with a focus on JSON-LD as the delivery mechanism for these markups, and by the end we’ll show you a tool to help you get started with the most common markups.

We’ve tested the effects of marking up websites with Schema, and so far we found that:

  • → CTR increased when they award a rich card (and Google does)
  • → Visibility is positively affected in Google
  • → Google picks up on these quite fast (especially JSON-LD markups)
  • →You get more control of what is displayed when someone searches for your business/client’s business

In case you already know a little bit about Structured Data, just use the links below to navigate:

A SHORT RECAP OF HOW GOOGLE SIFTS THROUGH AND UNDERSTANDS INFORMATION

Search engine robots does not have a human understanding of information - and treats everything the same. By adding Schema markups, you are helping them interpret what is important to know, and what is less important.Google’s understanding of queries, the intention behind them, and what information they should show, derives from gathering insane amounts of user data, in combination with understanding what content gets the best user-metrics.

With sufficient data, they can extrapolate a better understanding of what is what, and their data is derived from x amounts of queries. In big digital countries like the US, Google will naturally understand quite a lot of information on its own, or in other words, “connect the dots.” But Google is only able to connect some of these dots, especially if there are big variations in content types and quality. But there are few countries that have those amounts of queries to help Google out.

It’s important to remember that search engines like Google are based on robots trying to make sense of information on webpages in combination with analyzing user-metrics. Things will get lost in that translation, and Google might just misinterpret that data as well. When looking at related queries while doing keyword analysis, we hardly ever find that all related subjects actually have some kind of natural connection.

SO HOW DO SCHEMA MARKUPS HELP SEARCH ENGINES?

Simply put, Schema markups talk the “robot language.” But more clearly, it helps with the semantic understanding of what content actually is. It helps robots place content in buckets they have prior knowledge of.

A few examples:
Illustration on how robots might interpret your site with and without Schema markups in place.Search engine robots will know what a company is, and they will connect your company name 99,99% of the time to your business, but if you markup your company information, you remove any doubt they might have.

Company names, however, are easy. How about what phone number to display alongside your company listing? You might have it in your footer, but then again you might also have different numbers for service, orders, or direct-to-employee on your website as well. Which number to pick? And what if you use similar numbers on your site to explain statistics? Phone numbers though, are still fairly easy for Google to figure out, since they can confirm which number to use in business listings in the yellow pages and such.

But hang on! We are getting to the stuff that is harder for Google to understand immediately unless they have tons of data to back up their assumptions.

  • → How to properly identify if something is considered a service or a product?
  • → Is this a blog post or an article?
  • → What is this content really telling you?
  • → Which of several prices to list alongside your products?
  • → Understand ratings or reviews?
  • → Steps you need to follow when making a dinner recipe?
  • → If content is about an event?
  • → If you want to be listed with search action possibility?
  • → If you are talking about a person, a place, an employee etc.?
  • → What area you cater to?

There are so many things about a business, its employees, and its website content you would really like for Google (and the rest of them) to properly understand. The reason is simple: the more search engines understand about your business and your website, the more likely they are to let you appear as a top result when someone performs a query. Easy peasy, and nothing is new under the sun here where SEO is considered.

THINGS TO CONSIDER WHEN YOU CHOOSE WHAT LANGUAGE TO ADD MARKUPS WITH

Schema markups refer to the Schema.org library of entities that Google, Bing, Yahoo, and Yandex understands and uses to deliver relevant results when someone performs a query. With voice search growing, you really need to focus on getting this in because then you will be catering to the way AI understands and uses information.

Right now there are 3 viable ways of adding Schema markups to a website:

  1. Microdata markups
  2. RDFa markups (very similar to microdata)
  3. Or JSON-LD

Note that we won’t delve into Microdata or RDFa in this article, which are inline markups and hard for most SEOs and digital marketers to get correct. If Bing is important to you, (It should be if your business relies heavily on voice search since Cortana, Alexa and Bixby use Bing at the time this article was written. Siri only recently swapped for Google) then you should consider Microdata or RDFa. Bing is way behind when it comes to having a proper understanding of JavaScript, and at the time of writing this article, they don’t even consider Schema markups at all when they are added within JSON-LD.

Or you can take our approach and show Bing the finger by going for JSON-LD like so many other businesses are doing. If Bing won’t bother to understand JSON-LD soon, they will lose the traffic they get from Voice Assistants to Google at some point. Not to mention, the benefits of JSON-LD is very clear as far as Google is concerned: it is the format they recommend you to use.

SO WHAT IS JSON-LD?

JSON-LD stands for JavaScript Object Notation for Linked Data. Basically, it is a language that is set up to link data together with no other purpose. While microdata and RDFa historically have had other uses, JSON-LD has but that one function: link information to entities bots use and understand.

This format is by far the tidiest language for you to use when linking content to Schema.org entities. It gathers all the information you want marked up within one easy to understand script. It is also very easy to understand for robots once they are configured to look for them.

And it doesn’t stop there, it is also easy to learn:
You probably won’t need any prior knowledge of JavaScript to get up and running on how to markup information in JSON-LD. Once you get a hang of the basics, you’ll be able to sort all the markups you want, and get it validated really fast. The setup is all logic, and the language is fair, simple, and straightforward. Just remember those commas and brackets!

Searchmetrics studies the search results for tonnes of queries all around the world - and found that while 2/3rds of the first page in Google SERP included sites with Schema markups in place - only 0,3% of all websites around the world has implemented some sort of Schema markup.

Where to place this in your HTML:
JSON-LD is a JavaScript. While the general advice is to add such markups within the header of your website, search engines will understand it if it’s placed after your footer. If you want to work with dynamic scripts that automatically update if a product price changes, the picture is swapped, or the markups are added automatically to new products/articles etc., then you should consider the footer as your go-to place since that will eliminate any loading time the script might add that will slow the perceived pageload for users.

GETTING STARTED WITH SCHEMA MARKUPS

Scribble down the information on a website you deem the most important to tell people about (and thereby also search engines), and consider what type of markup that will cover it best. There are a few markups you should always consider:

  • → Business markup (Local Business, Organization or several others)
  • → Articles / blog posts or similar content
  • → Products
  • → Recipes
  • → Services
  • → Employees and their contact information if applicable
  • → Courses, events and seminars
  • → Lists and breadcrumbs if applicable
  • → Search action (especially if search is a much used function on your site)
  • → Preferred site name (i.e. company name vs. that websites name?)
  • → Social profile links
  • → Reviews
  • → Ratings
  • → Videos and podcasts

There are probably other markups that might apply for your business as well, but these should be fairly common on a business website. And all of the above mentioned types of information to markup will give you more “real estate” within Google’s SERP if your markup validates (once you are listed at the front page).

As a general rule, all markups added within your JSON-LD script should be confirmed in visible content. Meta-information is considered visible, but if it’s hidden behind AJAX or similar, you are beginning to push the boundaries of what is considered visible. The key takeaway is to place the markups on the site that confirm the information.

But if you decide you want to markup employee information within your ‘local business’ script, but the employee information is located on a separate page, you should be adding sameAs links towards pages where search engines can confirm your markups. The same ‘local business’ markup should be added to the page where this information is available as well, with a sameAs pointing back towards the front page. The general rule is to help search engines take notice of the markups to confirm the information within visible content on your website. This way they will have an easier time trusting your markups to be accurate.

AND HERE YOU CAN FIND SOME SCRIPTS YOU CAN DEVELOP FURTHER FOR YOUR SITE

Choose the type of information you want to mark up, and copy the example scripts. Note that MS Word has a tendency to add formatting that does not validate afterwards, so you should use text editors that add no formats (i.e., Sublime or Notepad), when editing the code.

If you have any questions concerning Schema markups, feel free to send an email to post@nettrafikk.no, or you can also call us at +47 21 39 94 11.

Business
Articles
Products
Courses
Events
Places
Person
Recipes
Jobpostings
Services
<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "LocalBusiness",
    "name": "Company name",
    "url": "htts://website.com",
    "sameAs":[
      "Facebook url?",
      "Instagram url?",
      "Twitter url?",
      "LinkedIn url?",
      "Yelp or Tripadvisor urls?",
      "Other profiles?"
    ],
    "logo": "https://website.com/logofile.jpg",
    "priceRange": "Ie. USD 500 - 5000",
    "description": "150-250 letters long description of your company - normally you copy meta description to this field",
    "image": {
      "@type": "ImageObject",
      "url": " https://website.com/employees.jpg (or venue picture?)" 
      },
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "Street adress",
      "addressRegion": "State",
      "addressLocality": "Municipality/place/city",
          "postalCode": "Numeric postal code",
      "addressCountry": "US",
      "telephone": "+prefix + phonenumber",
      "email": "post@website.com"
      },
    "geo":{
      "@type": "GeoCoordinates",
      "latitude": "GPS coordinates Ie. 59.919880",
      "longitude": "GPS coordinates Ie. 10.754260" },
    "openingHours": "Mo, Tu, We 08:00-18:00 Th, Fr 07:00-17:00"
  }
</script>

<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "LocalBusiness",
    "name": "Company name",
    "url": "htts://website.com",
    "sameAs":[
      "Facebook url?",
      "Instagram url?",
      "Twitter url?",
      "LinkedIn url?",
      "Yelp or Tripadvisor urls?",
      "Other profiles?"
    ],
    "logo": " https://website.com/logofile.jpg ",
    "priceRange": "Ie. USD 500 - 5000",
    "description": "150-250 letters long description of your company - normally you copy meta description to this field",
    "image": {
      "@type": "ImageObject",
      "url": " https://website.com/employees.jpg (or venue picture?)" 
      },
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "Street adress",
      "addressRegion": "State",
      "addressLocality": "Municipality/place/city",
          "postalCode": "Numeric postal code",
      "addressCountry": "US",
      "telephone": "+prefix + phonenumber",
      "email": "post@website.com"
      },
    "geo":{
      "@type": "GeoCoordinates",
      "latitude": "GPS coordinates Ie. 59.919880",
      "longitude": "GPS coordinates Ie. 10.754260" },
    "openingHours": "Mo, Tu, We 08:00-18:00 Th, Fr 07:00-17:00"
  }
</script>
<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "Article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "http://website.com/articleurl"
    },
    "headline": "Article H1",
    "image":{
      "@type": "ImageObject",
      "url": " http://website.com/articleimageurl.jpg ",
      "height": Ie. 1125 (numeric only),
      "width": Ie. 697 (must be more than 697 - numeric only)
    },
    "datePublished": "Ie. 2016-12-24 (date only)",
    "dateModified": "Ie. 2017-02-16 (date only)",
    "author": {
      "@type": "Person",
      "name": "Authors name or company name"
    },
    "publisher": {
      "@type": "Organization",
      "name": "Company name",
      "logo":{
         "@type": "ImageObject",
         "url": " http://website.com/logoimage.jpg ",
         "width": Max 300 (numeric only), 
         "height": Max 60 (numeric only)
      }
    },
    "description": "Usually you copy the articles metadescription to this field."
  }
</script>
<script type="application/ld+json">
  {
    "@context": "http://www.schema.org",
    "@type": "Product",
    "name": "Name of the product",
    "image": " http://website.com/productimage.jpg ",
    "description": "150-190 letter description of the product (ie. meta description)",
    "offers": {
      "@type": "Offer",
      "price": "55.90",
      "priceCurrency": "USD"
    },
    "aggregateRating": {
      "@type": "aggregateRating",
      "ratingValue": "4.8",
      "reviewCount": "35"
    }
  }
</script>
<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "Course",
    "name": "The course name",
    "url": "https://website.com/courseurl",
    "description": "150-180 letter long description of the course content.",
    "provider": {
      "@type": "Organization",
      "name": "Company that provides course",
      "sameAs": "https://companyurl.com/"
    },
    "hasCourseInstance": {
      "@type": "CourseInstance",
      "name": "Venue name",
      "courseMode": "Description of venue (ie. within our venues - conference room 3 etc.)",
      "location": "Company name that owns venue",
      "endDate ": "2017-05-27T21:00:00",
      "startDate": "2017-05-28T08:00:00",
      "performer": "Name of person(s) in charge of the course",
      "description": "Here you can input the time",
      "image": " https://website.com/courseimage.jpg ",
      "offers": {
         "@type": "Offer",
         "price": "500",
         "priceCurrency": "USD",
         "availability": "3 (ammount of spots left)",
         "url": "https://website.com/order-course-url",
         "validFrom": "2017-05-01T08:00:00"
      },
      "location": {
         "@type": "Place",
         "name": "Venue name",
         "address": "Streetadress, number, zipcode, place"
        }
    }
  }
</script>
<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "Event",
    "name": "Name of the event",
    "url": "https://website.com/eventurl",
    "startDate": "2017-11-24T19:30:00",
    "endDate": "2017-11-24T22:30:00",
    "eventStatus": "EventScheduled",
    "description": "Description of the event (normally you copy metadescription).",
    "performer": "Company, artist, group o.s.",
    "location": {
      "@type": "Place",
      "name": "Name for the venue",
      "address": {
         "@type": "PostalAddress",
         "streetAddress": "Streetadress",
         "addressLocality": "State/municipality",
         "addressRegion": "Place/city",
         "addressCountry": "US"
      }
    },
    "offers": {
      "@type": "Offer",
      "price": "100",
      "priceCurrency": "USD",
      "url": "https://website.com/url-for-buying-tickets",
      "availability": "InStock",
      "availabilityStarts": "2017-10-01T08:00:00",
      "inventoryLevel": "500 tickets",
      "validFrom": "2017-11-24T19:30:00"
    },
    "image":{
      "@type": "ImageObject",
      "url": " https://website.com/eventpicture.jpg "
    }
  }
</script>
<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "Place",
    "name": "Name of hotel, motel o.s.",
    "description": "Usually you copy the metadescription used on the page URL",
    "url": "https://website.com/placeurl",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "Streetadress",
      "addressRegion": "State/municipality",
      "addressLocality": "City/place",
      "postalCode": "Postal code",
      "addressCountry": "Country"
    },
    "amenityFeature":[
      {
         "@type": "LocationFeatureSpecification",
         "name": "Ie. Accommodation",
         "value": "True"
      },
      {
         "@type": "LocationFeatureSpecification",
         "name": "Ie. petsAllowed",
         "value": "True"
      },
      {
         "@type":"LocationFeatureSpecification",
         "name": "Ie. Meal",
         "value": "False"
      }
    ],
    "smokingAllowed": "False"
  }
</script>
<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "Person",
    "name": "John Doe",
    "jobTitle": "Job title of that person",
    "telephone": "+prefix phonenumber",
    "email": "person@website.com",
    "image": " https://website.com/picture-of-person.jpg ",
    "description": "Description of person (meta description or perhaps job description)",
    "url": "https://website.com/employees/john-doe/",
    "sameAs":[
      "LinkedIn url?",
      "Facebook url?",
      "Twitter url?",
      "Other urls?"
    ]
  }
</script>
<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "Recipe",
    "url": "https://website.com/recipeurl",
    "author": {
      "@type": "Person",
      "name": "Name of cook/author/company/website"
    },
    "prepTime": "PT5M",
    "cookTime": "PT1H20M",
    "datePublished": "2017-01-01",
    "publisher": {
      "@type": "Organization",
      "name": "Company/website name",
      "logo": {
         "@type": "ImageObject",
         "url": "https://website.com",
         "width": Max 300 (numeric only),
         "height": Max 60 (numeric only)
      }
    },
    "description": "150-180 letters long description (usually copy meta description for this)",
    "image": " http://website.com/food-image.jpg ",
    "recipeIngredient": [
      "ingredient 100 gram",
      "ingredient 3 tablespoons",
      "ingredient 2 deciliters"
    ],
    "nutrition": {
      "@type": "NutritionInformation",
      "servingSize": "1 portion",
      "calories": "250 cal",
      "fatContent": "12 g"
    },
    "aggregateRating": {
      "@type": "AggregateRating",
      "ratingValue": "4.5",
      "reviewCount": "24"
    },
    "name": "Name of the dish (50-60 letters max)",
    "recipeInstructions": "1. First do this.\n 2. Follow with this step.\n 3. Etc. - Remember to use '\n' if you want each step to start on a new line in case you are lucky enough to get an answerbox.",
    "recipeYield": "4 dinner portions"
  }
</script>
<script type="application/ld+json">
  {
    "@context" : "http://schema.org/",
    "@type" : "JobPosting",
    "title" : "Jobtitle for vacant position",
    "description" : "A description of the vacant positions role. Recommend keeping to a bulletinlist or similar to get to the point fast.",
    "url": "https://website.com/vacant-position-url",
    "identifier": {
      "@type": "PropertyValue",
      "name": "Company name",
      "value": "Unique value ie. jobtitle-vacancy-companyname-2017"
    },
    "datePosted" : "2017-04-01",
    "validThrough" : "2017-06-30",
    "employmentType" : "Fulltime",
    "industry": [
      "Media agency", 
      "Digital agency", 
      "SEO agency"
      ],
    "educationRequirements": "Bachelor or higher",
    "experienceRequirements": "2 years or more within the field",
    "responsibilities": "Ie. SEO performance for 5 of our biggest clients and a few more small clients",
    "workHours": "Ie. 08:00 - 16:00 Monday to friday",
    "qualifications": [
      "Ie. Analytical",
      "Ie. Former experience",
      "Ie. Strategic mindset",
      "Ie. Fluent in english",
      "Ie. Basic JavaScripting"
      ],
    "baseSalary": "USD 80.000 Annually + bonus (or perhaps say it depends on qualifications and experience)",
    "hiringOrganization" : {
      "@type" : "Organization",
      "name" : "Employer company name",
      "sameAs" : "https://website.com/"
    },
    "jobLocation" : {
      "@type" : "Place",
      "address" : {
        "@type" : "PostalAddress",
        "streetAddress" : "Streetadress and streetnumber",
        "addressRegion" : "State/municipality",
        "addressLocality" : "City/place",
        "postalCode" : "Postal number",
        "addressCountry": "Country"
        }
     }
  }
</script>
<script type="application/ld+json">
  {
    "@context":"http://schema.org",
    "@type": "Service",
    "url": "https://website.com/url-to-service",
    "description": "Usually just copy meta description from that page into this bracket",
    "serviceType": [
      "Name of service",
      "Alternate name or synonym?"
      ],
    "provider": {
      "@type": "ProfessionalService (can use LocalBusiness or other variations here)",
      "name": "Company name",
      "priceRange": "Ie. USD 500 - 1500",
      "image": " https://website.com/image-of-service.jpg ",
      "logo": " https://website.com/logoimage.jpg ",
      "address": "Streetadress, streetnumber, postalnumber and place",
      "telephone": "+prefix and phonenumber",
      "email": "post@website.com"
      },
    "areaServed": {
      "@type": "City",
      "name": [
        "New York",
        "Chicago",
        "Boston"
        ]
      }
  }
</script>
Was this article helpful?
Kontakt oss
Nettrafikk AS
Nedre gate 5, 0551 Oslo
post@nettrafikk.no
Tlf: +47 21 39 94 11
Meld deg på vårt nyhetsbrev!