Using JSON-LD and Schema.org to mark up different events on same site - schema.org

I'm currently in the middle of an test, where I am asked to design a site that can give visitors an overview of upcoming events. The sites events has to be marked up with metadata using the Schema.org vocabulary.
I've made the page with both events on it, however when I try to validate the code on Google's test tool, it only shows one event as found:
I can't get it to recognize the second event, it just seems like Google skips the entire markup for that seperate event.
Is it possible for me to have both events marked up as well as some general markup of the site later on and if so what do I need to change so Google can recoqnize it as two events and not just one?
Attached is the entire markup in JSON-LD:
<script type="application/ld+json">
{
"#context": "http://schema.org/",
"#type": "MusicEvent",
"name": "Nytårskoncert",
"image": "http://www.kultunaut.dk/perl/images/billetten/W855H481_imageseventadvanced515158c14de20a020large.jpg",
"startdate": "2017-01-10T20:00",
"enddate": "2017-01-10T22:30",
"performer": "Sønderjyllands Symfoniorkester",
"location": {
"#type": "Place",
"name": "Comwell Kolding Teater",
"address": {
"#type": "PostalAddress",
"addressCountry": "Denmark",
"addresslocality": "Kolding",
"postalcode": "6000",
"streetaddress": "Skovbrynet 1"
}
},
"description": "Til dette års nytårskoncert har vi engageret to vidunderlige og etablerede operasangere, sopranen Gitta Maria Sjöberg og tenor Eduardo Aladrén. Med disse to stemmer i front har vi plukket en buket af de skønneste arier og duetter fra operaens verden. Sønderjyllands Symfoniorkester dirigeret af Ola Rudner vil derudover bidrage med fejende wienervalse og festlige klassiske nytårstoner. En nytårskoncert, hvor vi byder 2018 velkommen med den skønneste nytårsmusik og sang."
},
{
"#context": "http://schema.org/",
"#type": "TheaterEvent",
"name": "De Stuerene",
"startDate": "2017-01-12T19:30",
"endDate": "2017-01-12T22:00",
"location": {
"#type": "Place",
"name": "Mungo Park Kolding",
"address": {
"#type": "PostalAddress",
"addressCountry": "Danmark",
"addressLocality": "Kolding",
"postalCode": "6000",
"streetAddress": "Fredericiagade 1"
}
},
"description": "Historien om Dansk Folkeparti er vel den væsentligste i dansk politik i de sidste 20 år. Siden partiet blev stiftet i 1995 har Pia Kjærsgaards parti, mere end nogen, sat dagsordenen for hvad vi debatterer i vores land - og hvordan vi gør det. DE STUERENE er en tour-de-force gennem 20 år med Dansk Folkeparti. 20 år som måske har forandret den danske folkesjæl."
}
}
</script>

This looks like a simple problem with your syntax. I added an array:
<script type="application/ld+json">
[{
"#context": "http://schema.org/",
"#type": "MusicEvent",
"name": "Nytårskoncert",
"image": "http://www.kultunaut.dk/perl/images/billetten/W855H481_imageseventadvanced515158c14de20a020large.jpg",
"startdate": "2017-01-10T20:00",
"enddate": "2017-01-10T22:30",
"performer": "Sønderjyllands Symfoniorkester",
"location": {
"#type": "Place",
"name": "Comwell Kolding Teater",
"address": {
"#type": "PostalAddress",
"addressCountry": "Denmark",
"addresslocality": "Kolding",
"postalcode": "6000",
"streetaddress": "Skovbrynet 1"
}
},
"description": "Til dette års nytårskoncert har vi engageret to vidunderlige og etablerede operasangere, sopranen Gitta Maria Sjöberg og tenor Eduardo Aladrén. Med disse to stemmer i front har vi plukket en buket af de skønneste arier og duetter fra operaens verden. Sønderjyllands Symfoniorkester dirigeret af Ola Rudner vil derudover bidrage med fejende wienervalse og festlige klassiske nytårstoner. En nytårskoncert, hvor vi byder 2018 velkommen med den skønneste nytårsmusik og sang."
},
{
"#context": "http://schema.org/",
"#type": "TheaterEvent",
"name": "De Stuerene",
"startDate": "2017-01-12T19:30",
"endDate": "2017-01-12T22:00",
"location": {
"#type": "Place",
"name": "Mungo Park Kolding",
"address": {
"#type": "PostalAddress",
"addressCountry": "Danmark",
"addressLocality": "Kolding",
"postalCode": "6000",
"streetAddress": "Fredericiagade 1"
}
},
"description": "Historien om Dansk Folkeparti er vel den væsentligste i dansk politik i de sidste 20 år. Siden partiet blev stiftet i 1995 har Pia Kjærsgaards parti, mere end nogen, sat dagsordenen for hvad vi debatterer i vores land - og hvordan vi gør det. DE STUERENE er en tour-de-force gennem 20 år med Dansk Folkeparti. 20 år som måske har forandret den danske folkesjæl."
}
]
</script>

Related

Adding Schema.org 'Brand' in JSON-LD

I have been adding rich snippets to my ecommerce store, and for the most part I have had no problems. For some reason when I go to add in the "brand" that is recommeneded by Google and Google Merchant services I have problems.
I have added this under: http://schema.org/Offer. And by adding it in the script in my header also with no luck.
<script type="application/ld+json" data-resource-group="head_tag" data-resource-code="organization_schema">{
"#context": "http://schema.org",
"#type": "Organization",
"address": {
"#type": "PostalAddress",
"addressLocality": "",
"addressRegion": "",
"addressCountry": "",
"postalCode": "",
"streetAddress": ""
},
"email": "customerservice#domain.com",
"name": "Comany namee",
"telephone": "company number"
},
"brand":{
"#type":"Thing",
"name":"[manufacture_name]"
},
</script>
<meta itemprop="brand" content="[manufacturer_name]" />
"brand":{
"#type":"Thing",
"name":"[manufacture_name]"
},
The second one just simply isn't detected for some reason.
I have code similar to the meta tag throughout the documnet so I would prefer to keep with that format if possible.
Your JSON-LD has syntax errors:
The Organization is closed with },, but the brand property appears after it.
A closing } is missing.
There should be no , after the last }.
So it would be:
{
"#context": "http://schema.org",
"#type": "Organization",
"address": {
"#type": "PostalAddress"
},
"name": "company name",
"brand": {
"#type": "Brand",
"name": "manufacturer name"
}
}
(Note that I used Brand instead of Thing.)

How to add an 'Offer' for a 'House' (which is not a 'Product' sub-type)?

My idea is put a House definition and then a Product with a Offer. But I do not sell other product, I sell a house.
The Product scheme has a Offer schema inside, but House scheme do not have it. How can I do to put a schema Offer inside my House schema definition?
For now I have this code:
<script type='application/ld+json'>
{
"#context": "http://schema.org/",
"#type": "House",
"numberOfRooms": "4",
"floorSize": {
"#type": "QuantitativeValue",
"unitCode": "metros cuadrados",
"value": "120",
"description": "En Venta piso amplio, exterior, salón, cocina, 4 dormitorios, 1 cuarto de despensa/lavadora, 2 baños (con ventanas), 1 terraza, 5 armarios empotrados, plaza de garaje y 2 rochos (1 bajo cubierta y otro al lado plaza garaje). 120 m2 en planta. 4ª planta "
},
"address": {
"#type": "PostalAddress",
"addressCountry": "España",
"addressLocality": "Burela",
"addressRegion": "A Mariña",
"postalCode": "27880",
"streetAddress": "Lamestra 9",
"description": "A 130 metros de la playa "
},
"geo": [
"-7.360289",
"43.662696"
],
"hasMap": "http://www.softgalia.com/mapapisoburela",
"photos": "http://dechado11.softgalia.com/galerias/index",
"telephone": "677524729"
}
}
</script>
The itemOffered property expects a Product or Service value, but House is neither. And for the other direction: The offers property can’t be specified on House, but on Product, Service, CreativeWork etc.
If you offer to sell a house, this house becomes a product. So you should provide an entity that has two types: House and Product.
{
"#context": "http://schema.org",
"#type": "Offer",
"itemOffered":
{
"#type": ["House", "Product"]
}
}
{
"#context": "http://schema.org",
"#type": ["House", "Product"],
"offers":
{
"#type": "Offer"
}
}
Thanks Jay Gray for your help. This is my code now.
<script type="application/ld+json">
{
"#context": "http://schema.org",
"#type": "Offer",
"price": "155.000 €",
"priceCurrency": "EUR",
"availableAtOrFrom":
{
"#type": "Place",
"address": {
"#type": "PostalAddress",
"addressCountry": "España",
"addressLocality": "Lugo",
"addressRegion": "Lugo",
"postalCode": "27002",
"streetAddress": "Primavera 40"
},
"telephone": "+34 677524729",
"geo":
{
"#type": "GeoCoordinates",
"latitude": "-7.360232",
"longitude": "43.662330",
"postalCode": "27002"
}
},
"itemOffered":
{
"#type": "House",
"numberOfRooms": "4",
"floorSize": {
"#type": "QuantitativeValue",
"unitCode": "metros cuadrados",
"value": "120",
"description": "En Venta piso amplio, exterior, salón, cocina, 4 dormitorios, 1 cuarto de despensa/lavadora, 2 baños (con ventanas), 1 terraza, 5 armarios empotrados, plaza de garaje y 2 rochos (1 bajo cubierta y otro al lado plaza garaje). 120 m2 en planta. 4ª planta "
},
"amenityFeature": "Al 130 metros de la playa O Cantiño, y en pleno centro de Burela. Supermercado a 150 metros y a 70 metros del parque Rosalía de castro y al mismo tiempo es una zona tranquila. Su situación es inmejorable.",
"address": {
"#type": "PostalAddress",
"addressCountry": "España",
"addressLocality": "Burela",
"addressRegion": "A Mariña",
"postalCode": "27880",
"streetAddress": "Lamestra 9",
"description": "A 130 metros de la playa "
},
"geo": [
"-7.360232",
"43.662330"
],
"hasMap": "https://www.google.es/maps/place/43%C2%B039'44.4%22N+7%C2%B021'36.8%22W/#43.6623443,-7.3690083,3324m/data=!3m2!1e3!4b1!4m8!1m2!2m1!1sR%C3%BAa+da+Lamestra,+Burela!3m4!1s0x0:0x0!8m2!3d43.6623297!4d-7.3602321",
"photos": [ "http://dechado11.softgalia.com/galerias_imagenes/foto-de-la-entrada-vista-hacia-el-despacho",
"http://dechado11.softgalia.com/galerias_imagenes/bano-piso-venta-burela"
],
"telephone": "677524729"
}
}
}

Google Rich Card product JSON-LD no detected

I was using structured data on on the products and I had not any error when I used it. More or less a month ago I changed structured data for JSON-LD. These change on the Goole Search console does not appear but it detect I stoped use structured data.
Here there is a real JSON-LD (is not proof) of one product:
<script type="application/ld+json">
{
"#context": "http://schema.org/",
"#type": "Product",
"name": "Cumlaude Sunlaude Cover Ip-30 10 G.",
"image": "https://farmaciaribera.es/media/catalog/product/p/l/pl_1_1_9743.jpg",
"description": "Cumlaude Sunlaude Compacto SPF 30 está indicado para la protección solar del rostro, ayuda a corregir las imperfecciones cutáneas actuando como un compacto maquillaje de alta protección solar. Está especialmente indicado para pieles con manchas (cloasma,",
"sku": "200089",
"brand": {
"#type": "Thing",
"name": "Dermofarm"
},
"aggregateRating": {
"#type": "AggregateRating",
"bestRating": 10,
"worstRating": 9,
"ratingValue": 10,
"reviewCount": 352
},
"offers": {
"#type": "Offer",
"priceCurrency": "EUR",
"availability": "http://schema.org/InStock",
"price": "21.22"
}
}
And here you can see how Tensting tool data structured detect the product without any problem.
Also I have looking for information on Stack Overflow, in this post is confirmed Google detect product rich cards.

Cannot update Google Now card using email

I am trying to test the triggering of a Google Now card from email and then updating the time using the modifiedTime property. Here is my markup of the initial email to trigger the initial Google Now card (It's working):
<html>
<body>
<script type="application/ld+json">
{
"#context": "http://schema.org",
"#type": "EventReservation",
"reservationNumber": "E123456789",
"reservationStatus": "http://schema.org/Confirmed",
"underName": {
"#type": "Person",
"name": "Test Person"
},
"reservationFor": {
"#type": "Event",
"name": "Test Event",
"startDate": "2015-05-19T16:00:00-05:00",
"location": {
"#type": "Place",
"name": "Your Home",
"address": {
"#type": "PostalAddress",
"streetAddress": "111 Main Street",
"addressLocality": "Columbus",
"addressRegion": "OH",
"postalCode": "43215",
"addressCountry": "US"
}
}
},
"modifyReservationUrl": "http://www.test.com/testing"
}
</script>
<div>Test Appointment</div>
</body>
</html>
Here is the followup email I'm using to try to update the Google Now card to reflect changes in time (It has no effect):
<html>
<body>
<script type="application/ld+json">
{
"#context": "http://schema.org",
"#type": "EventReservation",
"reservationNumber": "E123456789",
"reservationStatus": "http://schema.org/Confirmed",
"underName": {
"#type": "Person",
"name": "Test Person"
},
"reservationFor": {
"#type": "Event",
"name": "Test Event",
"startDate": "2015-05-19T16:00:00-05:00",
"location": {
"#type": "Place",
"name": "Your Home",
"address": {
"#type": "PostalAddress",
"streetAddress": "111 Main Street",
"addressLocality": "Columbus",
"addressRegion": "OH",
"postalCode": "43215",
"addressCountry": "US"
}
}
},
"modifyReservationUrl": "http://www.test.com/testing",
"modifiedTime": "2015-05-19T18:00:00-05:00"
}
</script>
<div>Test Appointment Changed</div>
</body>
</html>
Per the documentation here: https://developers.google.com/gmail/markup/reference/event-reservation#update_a_event I am reading that "You may update a event reservation simply by sending the updated event reservation and setting modifiedTime to the time of the update.", The ONLY difference between the 2 emails is the body of the email and the fact that I am including modifiedTime in the second.
Some extra background info:
1. I have validated my markup here prior to sending: https://www.google.com/webmasters/markup-tester
2. I am using the Gmail Actions sample app to send my test emails: http://gmail-actions.appspot.com/
After looking at the markup in your first email and the followup email, it looks like your startDate properties are identical (2015-05-19T16:00:00-05:00). Your follow up email should have the updated time (2015-05-19T18:00:00-05:00) in the startDate property.
If you check out the description on the documentaiton, the modifiedTime property is where you input when the reservation was last modified and not the actual updated time.

How to test the Google Schemas

I am trying to implement the ParcelDelivery feature for my webshop as shown here:
https://developers.google.com/gmail/markup/reference/parcel-delivery
The markup i use validates using this tool:
https://www.google.com/webmasters/markup-tester/
On the help pages it shows that you can test this markup by sending an email from yourself, to yourself. So i am sending myself an email using the GMail web interface, but no matter what i use for the formatting (plain text or html) the "package delivery status" does not show up in my inbox.
Instead, when i click to open the email; the entire code below is shown as the email, just if GMail does not pick it up.
p.s. is this schema also supported in the NOW cards? does anybody know?
Am i doing something wrong?
This is my source used:
<html>
<body>
<script type="application/ld+json">
{
"#context": "http://schema.org",
"#type": "ParcelDelivery",
"deliveryAddress": {
"#type": "PostalAddress",
"name": "John Frank",
"streetAddress": "24 Willie Mays Plaza",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"addressCountry": "US",
"postalCode": "94107"
},
"originAddress": {
"#type": "PostalAddress",
"name": "John Frank",
"streetAddress": "25 Willie Mays Plaza",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"addressCountry": "US",
"postalCode": "94107"
},
"expectedArrivalFrom": "2013-03-10T12:00:00-08:00",
"expectedArrivalUntil": "2013-03-12T12:00:00-08:00",
"carrier": {
"#type": "Organization",
"name": "FedEx",
"url": "http://fedex.com/"
},
"itemShipped": {
"#type": "Product",
"name": "iPod Mini",
"url": "http://apple.com/ipad32gb",
"image": "http://apple.com/images/ipad32gb.jpg",
"sku": "B00DR0PDNE",
"description": "iPod Mini 32Gb White",
"brand": {
"#type": "Brand",
"name": "Apple"
},
"color": "white"
},
"trackingNumber": "3453291231",
"trackingUrl": "http://fedex.com/track/3453291231",
"hasDeliveryMethod": "http://schema.org/ParcelService",
"partOfOrder": {
"#type": "Order",
"orderNumber": "176057",
"merchant": {
"#type": "Organization",
"name": "Bob Dole",
"sameAs": "http://www.freebase.com/m/0fhkx"
},
"orderStatus": "http://schema.org/OrderInTransit"
}
}
</script>
<p>
Dear John, thanks for booking your Google I/O ticket with us.
</p>
<p>
BOOKING DETAILS<br/>
Reservation number: IO12345<br/>
Order for: John Smith<br/>
Event: Google I/O 2013<br/>
Start time: May 15th 2013 8:00am PST<br/>
Venue: Moscone Center, 800 Howard St., San Francisco, CA 94103<br/>
</p>
</body>
</html>