It has been quite a few years since this little developer first bumped into Schema, and to be quite honest it blew my mind. Their mission is "…to create, maintain, and promote schemas for structured data on the Internet, on web pages, in email messages, and beyond". With featured snippets, enhanced listings and more up for grabs it is no surprise many are now chasing the pretty things.
Yet that's slightly missing the point, what Schema gives us is a language we can use to communicate information at a deeper level, that a webpage is made up of more than simply words, files, and links; it gives us the chance to add context, to tell the story as it were. What a search engine decides to do with this information is outside of our control, some are highly visible by-products like a featured snippet, others are more subtle, but in most cases you can clearly see the data influence.
So, I would like, if I may, to take you on a strange journey with an example of a project that has been running local business search results combined with geo structured data. All I can do is explain what I did, my thinking behind it, and illustrate the positive side effects. Hopefully it might spark some ideas and experiments of your own.
Before we begin, a few notes…
It has been hard to work out how to write this due to not being able to disclose the project, essentially an 'X near / in location' website, a pretty common concept. The only way I could think of to share is to adapt the data set to ensure anonymity. I've opted for one of my favourite pastimes (drinking), in my old stomping ground (Reading), so that would be 'Pubs in Reading'.
As with the real project the demo just uses Microdata, and it's not targeted for any particular search engines 'we would rather if…' quirks, I simply used the Schema documentation 'as is' at the time. Make it with JSON-LD, whatever your flavour, the logic is simply that, logic. With my demo search results the address and geo data are correct, however the pubs are actually from a notorious night out where the ultimate destination is pretty fitting for 2020.
So you can play along and see what's being picked up yourself grab the Ryte Structured Data Helper plugin for Chrome, or you can use the classic Structured Data Testing Tool by Google until it retires. You could use Googles new Rich Results Test, however you will miss out on some of the juicy bits.
Breaking it down to basics
Deep down, if we’re being honest, we simply have a search results page for pubs that are in / near Reading. As with most sites like this I took a central point in Reading (51.456467,-0.970005), worked out how far away each pub is using their geo-cooordinates, and then display the results in distance order, paginating 10 per page. Each listed pub would then link through to their own page with more information for the visitor.
So to summarise that makes 2 search results pages and 12 profile pages, 14 pages in total which contain information about some things that are in some way connected to each other. We can either hope the search engines can figure it out, or we could try and give them a helping hand with what we know, I'm going for option 2 else this would be short lived.
Creating the Pubs
At the moment each of our 12 listings are currenty just a bunch of text, links, html and images. The beauty of Schema is the deeper you go the clearer the message, with our results they are more than just local businesses, each is a pub and as usual there is a Schema for that, see 'BarOrPub'.
Now we can define what each 'Thing' is the rest of the data can be structured inside, so I added properties like the pub 'name', 'address', 'image', 'url' to their profile etc from the 'BarOrPub' Schema. The geo-coordinates were added to the source as this information could be useful for search engines to understand but I think might be of little relevance to the visitor.
Each details page was set up as a 'ItemPage', as it's described as
A page devoted to a single item, such as a particular product or hotel. I've added some of the important bits in the demo to show how it's data was used, however item pages themselves are another topic.
Creating the List
My next step was the list, after all the Pubs are in order of distance which makes sense. The best bit about Schema is it lets us create a list out of pretty much any html tag with the aptly named 'ItemList', defined as
A list of items of any sort - for example, Top 10 Movies About Weathermen, or Top 100 Party Songs., or maybe a list of '12 Pubs in Reading'?
At this point I cannot stress enough that you do not need to use html lists or tables to get featured snippets. Also you do not need to prefix your headings with '#1 The First Post', '#2 The Old Familiar' etc (often seen). Schema even adds to their 'ItemList' description;
Not to be confused with HTML lists, which are often used only for formatting. As I said earlier what a search engine chooses to do with your structured data is up to them; and if say Google decides to use an html list for their snippet it's because they are
… only for formatting, use the right html tags for your website.
With the list itself I kept it minimal, only using the properties 'itemListOrder' as Ascending, that the total 'numberOfItems' is 12, and '1 - 10 of 12 Results' as the description. Now I just needed to connect the 12 pubs to the list, and thanks to Schema an 'itemListElement' can be a 'Thing', perfect for our 'BarOrPub' listings.
Creating the Page
Finally we end up with the page itself. As with 'BarOrPub' being a more precise version of a 'LocalBusiness', that's the same for 'SearchResultsPage' instead of 'WebPage'. In some way I can't help think this validates our list more than trying to masquerade as a 'Best places to drink in Reading' article, there is no shame in search results. I then added the usual properties to the search results page, breadcrumbs (list), name, text etc.
One thing still niggled me, my page is all based around where the pubs are, and so I decided to look into 'contentLocation' which is defined as
The location depicted or described in the content. For example, the location in a photograph or painting., which might be a loose connection but at the time there wasn't anything more fitting. So I set the place to Reading, and that the geo was a 'GeoShape', essentially drawing a circle around the results from the central coordinates, and then used the distance from the last of the 12 results as the radius in meters.
The last step was to connect the list to the 'SearchResultsPage'. To do this I opted for 'mainEntity', as described by Schema
Indicates the primary entity described in some page or other CreativeWork., and at the end of the day this results list is the very reason the page exists, it's what the visitor was looking for.
Structured Data in the Wild
Now we have a structure let's see what the search engines decided to do with this information. Based on the similar search of 'Pubs in Reading' I've collated a series of screen grabs to illustrate the different ways that the structured data has been used by Google and Bing. For anonymity the illustrations have been updated to use the data from the demo.
I am not one to jump to conclusions, however it's pretty clear to see that each search engine has understood and used the data in their own way. With both Google and Bing, they seem to love a list, Google enhancing the serp with number of results whilst Bing always keeps to their order. And we can see that by nesting they can understand that each item page represents one of the pubs in the list, Bing especially so homing in with their navigation style display.
As to whether the search engines are using the pub geo or the geo-shape, I've no hard evidence either way. There are plenty of coincidences to go on when I have been testing a sample group, say 'Pubs in Reading' and 'Pubs near me' with the MobileMoxie SERPerator or when I am there in person. All were interesting but not conclusive, something to chat over with a pint for sure.
Look to the Future
What might surprise you is this structured data has been circulating live on this project since 2015, from the early days when it first produced breadcrumbs on Google, to today in 2020 with examples where we can clearly see the search engines adopting it more and more.
Although when it comes to geo I'm inconclusive, we need to think back to before featured snippets when it was all just fields, what Schema set out to do has not changed, only what the search engines choose to do with our structured data has evolved. The way I see it is get creative, just because it's not in a search engines 'official things that make serp features' doesn't make it wrong, it's simply they might not use it … yet.