Getting started with Schema markups

04/10/2017 - - Nettrafikk / 8,5 minutes lesetid (1717 words)

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 do we?

SO HOW DOES SCHEMA MARKUPS HELP SEARCH ENGINES?

Simply put, Schema markups talks the “robot language.” Put more clearly, it helps with the understanding of what content actually is about and helps robots place content in “buckets” they have prior understanding 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 is 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 numbers to employees on your website as well. Which number should the robot 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 – and often they will also see the href=”tel:xx” in the sourcecode to help them understand that it is a phonenumber they are looking at.

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 something about besides the words on their own?
  • → Which of several prices to list alongside your products?
  • → How should you connect or even understand ratings or reviews?
  • → Steps you need to follow when making a dinner recipe?
  • → If content is about an event, a course or perhaps just a recap of some event?
  • → If you want to be listed with search action possibility?
  • → If you are talking about a person, a place, an employee or a public figure?
  • → 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 the search engines) 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.

HOW DO YOU ADD SCHEMA TO YOUR SITE?

Schema markups refer to the Schema.org library of entities that Google, Bing, Yahoo, Yandex and Baidu 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 or implement without the help of a developer and lots of back and forth.

When this article was first written, Bing had yet to teach their robots to understand JSON-LD, but at the turn of the year (2017-2018) they announced that they too will be supporting JSON-LD. So right now there really aren’t any good reasons you should opt for microdata or RDFa unless a lot of the legwork has already been put in. This is also the format Google has been recommending for some time now, and Google does support most of the big Voice Assistants out there now with their data so why not just play nice?

SO WHAT IS JSON-LD?

JSON-LD stands for JavaScript Object Notation for Linked Data. Basically, it is a scripting-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 also 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 even 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. But if you opt for static scripts, then you might as well place them within the “<head> … </head> ” tags.

GETTING STARTED WITH SCHEMA MARKUPS

Scribble down the information on a website you deem the most important to tell people about your business (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 and 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 – you made these for a reason..
  • → 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 the above named ones should be fairly common on a business website. And all of the types of information listed above will also have the possibility to reward your site with more “real estate” within Google’s SERP if your markup validates.

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 also confirms the information you are structuring.

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 if you ever markup information that isn’t confirmed within the content on the site that hosts the structured data. This way the robots will also have an easier time trusting your markups to be accurate and give you the rewards you so want for them.

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

Choose the type of information you want to markup, 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": "$$$",
    "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!

Ved å melde deg på, godtar og bekrefter du vår personvernerklæring

Ring oss
Send en e-post