I added a RentalCarReservation schema markup to my email, which has passed all the tests for whitelisting by Google, except that it does not create the calendar event automatically. I do see the event card above my email in Google and the action button is also working, but whatever I do, the event is not shown in the calendar (despite having 'Smart features' enabled in all Google apps).
https://www.google.com/webmasters/markup-tester/ lists no issues. I thought it might have something to do with the formatting of the datetime and switched this up a few times, but the card above the email shows the correct day and time.
What might I be doing wrong? Any help is appreciated!
<script type="application/ld+json">
{
"#context": "http://schema.org",
"#type": "RentalCarReservation",
"reservationNumber": "11111",
"reservationStatus": "http://schema.org/ReservationConfirmed",
"url": "https://www.test.com/app/",
"underName": {
"#type": "Person",
"name": "FirstName",
"email": "firstname#email.com"
},
"programMembership": {
"#type": "ProgramMembership",
"memberNumber": "222222"
},
"bookingAgent": {
"#type": "Organization",
"name": "OrganizationName",
"url": "https://www.test.com/"
},
"bookingTime": "2022-02-22T06:25:07-01:00",
"modifyReservationUrl": "https://www.test.com/app/book?id=11111",
"potentialAction": [
{
"#type": "CancelAction",
"target": "https://www.test.com/app/edit?id=11111"
}
],
"reservationFor": {
"#type": "RentalCar",
"name": "Mini Cooper",
"model": "Mini Cooper",
"brand": {
"#type": "Brand",
"name": "Mini"
},
"description": "Ipsem Lorum.",
"rentalCompany": {
"#type": "Organization",
"name": "OrganizationName"
}
},
"pickupLocation": {
"#type": "Place",
"name": "Parkeerlocatie",
"address": {
"#type": "PostalAddress",
"streetAddress": "Nijmegenweg 2",
"addressLocality": "Almere",
"addressRegion": "Flevoland",
"postalCode": "1111AA",
"addressCountry": {
"#type": "Country",
"name": "NL"
}
},
"telephone": "+31000000000"
},
"pickupTime": "2022-03-11T07:00:00-01:00",
"dropoffLocation": {
"#type": "Place",
"name": "Parkeerlocatie",
"address": {
"#type": "PostalAddress",
"streetAddress": "Nijmegenweg 2",
"addressLocality": "Almere",
"addressRegion": "Flevoland",
"postalCode": "1111AA",
"addressCountry": {
"#type": "Country",
"name": "NL"
}
},
"telephone": "+31000000000"
},
"dropoffTime": "2022-03-11T10:00:00-01:00"
}
</script>
Related
I have the following JSON-LD and am trying to represent a pay monthly product such as a mobile phone contract which consists of an upfront fee and a monthly fee.
When I try to add the unitCode, I get the following warning:
The property priceSpecification is not recognized by Google for an object of type Product.
{
"#context": "https://schema.org/",
"#type": "Product",
"name": "Apple iPhone",
"image": [
"https://example.com/photos/1x1/photo.jpg",
"https://example.com/photos/4x3/photo.jpg",
"https://example.com/photos/16x9/photo.jpg"
],
"description": "Apple iPhone XS ...",
"sku": "0446310786",
"mpn": "925872",
"brand": {
"#type": "Thing",
"name": "ACME"
},
"review": {
"#type": "Review",
"reviewRating": {
"#type": "Rating",
"ratingValue": "4",
"bestRating": "5"
},
"author": {
"#type": "Person",
"name": "Fred Benson"
}
},
"aggregateRating": {
"#type": "AggregateRating",
"ratingValue": "4.4",
"reviewCount": "89"
},
"offers": {
"#type": "Offer",
"url": "https://example.com/anvil",
"priceCurrency": "GBP",
"price": "39.99",
"priceValidUntil": "2020-11-05",
"itemCondition": "https://schema.org/UsedCondition",
"availability": "https://schema.org/InStock",
"seller": {
"#type": "Organization",
"name": "Executive Objects"
}
},
"priceSpecification": {
"#type": "UnitPriceSpecification",
"price": "25",
"priceCurrency": "GBP",
"referenceQuantity": {
"unitCode": "MON"
}
}
}
You need to add the priceSpecification property to the Offer, not to the Product.
{
"#context": "https://schema.org/",
"#type": "Product",
"offers": {
"#type": "Offer",
"priceSpecification": {
"#type": "UnitPriceSpecification"
}
}
}
You can find the expected domain/range of a property on its page. For priceSpecification, it says:
Used on these types
Demand
Offer
TradeAction
So, it’s not expected on Product.
Let's say you have a profile page that features a mainEntity that's a Person. And you'd like to list that person's work and education history, similar to a resume.
Schema.org's Occupation example 4, illustrates how to use Role and hasOccupation to associate an array of work history, like so:
{
"#context": "http://schema.org",
"#type": "Person",
"name": "Jane Smith",
"sameAs": "http://en.wikipedia.org/wiki/Jane_Smith",
"worksFor": {
"#type": "Organization",
"name": "McKinsey & Company",
"url" : "http://www.mckinsey.com"
},
"hasOccupation": [ {
"#type": "Role",
"hasOccupation": {
"#type": "Occupation",
"name": "Management Consultant"
},
"startDate": "2016-04-21"
}, {
"#type": "Role",
"hasOccupation": {
"#type": "Occupation",
"name": "Chief Strategic Officer"
},
"startDate": "2013-11-14",
"endDate": "2016-03-22"
}, {
"#type": "Role",
"hasOccupation": {
"#type": "Occupation",
"name": "Vice President of Sales"
},
"startDate": "2009-09-20",
"endDate": "2013-10-14"
}
]
}
Only the occupation name is included. Not the Organization associated with that Occupation.
Is it possible to detail a resume more extensively this way with the Schema.org vocab? (Similar to Microformats hresume)
Side note: Education history isn't as difficult, because you can include an Organization object
"alumniOf": [ {
"#type": "OrganizationRole",
"alumniOf": {
"#type": "CollegeOrUniversity",
"name": "City University of New York",
"sameAs": "https://en.wikipedia.org/wiki/City_University_of_New_York"
},
"startDate": "1990",
"endDate": "1992",
"roleName": "MBA"
}, {
"#type": "OrganizationRole",
"alumniOf": {
"#type": "CollegeOrUniversity",
"name": "University of California, Berkeley",
"sameAs": "https://en.wikipedia.org/wiki/University_of_California,_Berkeley"
},
"startDate": "1983",
"endDate": "1987",
"roleName": "BSc Psychology"
}
]
Ok, I know this hasn't been responded to in a while, but I have been looking at this question a lot because I'm trying to 'JSONize' my resume data :)
Here is the approach that I took for work history. I made my person and all of its attributes, then I have an occupation (my current occupation) and then I have previous occupations (past-selves, if you will). So having said that much, I can tell you that I put my work history in my alumniOf property.
According to schema.org, the alumniOf property is used to illustrate a person-organization relationship that has ended; I don't work at those places anymore.
Then when I 'instantiate' the organization objects, they can have an employee. That employee is 'my past self', who then has an occupation at that time working at xyz corp. That 'past-person' is the same person as my present person, which I then link using a format similar example 5 from https://schema.org/Book.
Take a look at my code below to get some clarification.
I hope this helps - if nothing else someone else can come along and tweak my response so that we could have something that will work for people when they google it.
{
"#context": "http://schema.org",
"#type": "Person",
"#id": "#john",
"name": "John Smith",
"address": {
"#type": "PostalAddress",
"addressCountry": "US",
"addressLocality": "Austin",
"addressRegion": "Florida",
"postalCode": "12345",
"streetAddress": "123 breeze way"
},
"email": "john#example.org",
"telephone": "1234567890",
"image": "",
"jobTitle": "Software Developer",
"description": "Blip about me...",
"contactPoint": [{
"#type": "ContactPoint",
"contactType": "LinkedIn",
"identifier": "johnsmith",
"image": "imageurl",
"url": "profileurl"
},
{
"#type": "ContactPoint",
"contactType": "GitHub",
"identifier": "johnsmith",
"image": "imageurl",
"url": "profileurl"
}
],
"url": "example.org",
"hasCredential": [{
"#type": "EducationalOccupationalCredential",
"aggregateRating": {
"#type": "aggregateRating",
"ratingValue": "3.51",
"name": "GPA"
},
"credentialCategory": "degree",
"educationalLevel": "Bachelors of Science",
"dateCreated": "2015-05",
"about": {
"#type": "EducationalOccupationalProgram",
"name": "Computer Engineering"
},
"recognizedBy": {
"#type": "CollegeOrUniversity",
"name": "Some Awesome University",
"sameAs": "urlgoeshere"
}
}],
"hasOccupation": {
"#type": "EmployeeRole",
"roleName": "role title goes here",
"startDate": "2015-06"
},
"worksFor": {
"#type": "Organization",
"name": "big company",
"sameAs": "urlgoeshere"
},
"award": [
"Organizational Achievement Awards Q3'17, Q2'19, Q3'19",
"Divisional Recognition Award Q1'19",
"Dean's List: Spring '12,'14; Fall '13",
"President's List: Spring '13; Fall '14",
"Eagle Scout Leadership Service Award 2011"
],
"alumniOf": [{
"#type": "Organization",
"name": "old workplace",
"sameAs": "urlgoeshere",
"employee": {
"#type": "Person",
"hasOccupation": {
"#type": "EmployeeRole",
"roleName": "Computer Consultant",
"startDate": "2012-08",
"endDate": "2015-05"
},
"sameAs": "#john"
}
},
{
"#type": "Organization",
"name": "another company",
"sameAs": "urlgoeshere",
"employee": {
"#type": "Person",
"hasOccupation": {
"#type": "EmployeeRole",
"roleName": "internship",
"startDate": "2014-05",
"endDate": "2014-08"
},
"sameAs": "#john"
}
}
]
}
The below for is for the exact same goal. Here you can find a standard for creating resume with json-ld standards. You can use the lab-web to create a sample resume, get output and then compare the jsonld fields.
Here is the link to github
https://github.com/Jsonldresume/
Lab-web is for creating the resume and you can export it in jsonld format. You can run the app demo to see it in action.
Skill is the schema and context definition for a resume
Resume repository is for sharing your resume with others.
The page https://www.hello-yoga.co.uk describes two yoga classes, that run every week.
Is an Event with a potentialAction of type ExerciseAction the best way to represent the classes?
Note these are classes that take place in various locations (e.g. church halls) so HealthClub didn't seem an appropriate type.
<script type="application/ld+json">
{
"#context": "http://schema.org",
"#type": "Event",
"name": "hello YOGA",
"startDate": "2018-06-13T19:45",
"endDate": "2018-06-13T20:45",
"description":
"Yoga class at Friends Meeting House (Harrogate) every Thursday.",
"image": "https://www.hello-yoga.co.uk/yoga-people.svg",
"location": {
"#type": "Place",
"name": "Friends Meeting House",
"address": {
"#type": "PostalAddress",
"streetAddress": "12A Queens Parade",
"addressLocality": "Harrogate",
"addressRegion": "North Yorkshire",
"postalCode": "HG1 5PP",
"addressCountry": "GB"
}
},
"offers": {
"#type": "Offer",
"availability": "http://schema.org/LimitedAvailability",
"price": "7.00",
"priceCurrency": "GBP",
"validFrom": "2018-05-01T12:00",
"url": "https://www.hello-yoga.co.uk"
},
"potentialAction": {
"#type": "ExerciseAction",
"name": "hello YOGA",
"description": "Small, friendly yoga class. Suitable for all abilities.",
"exerciseType": "Yoga",
"startTime": "2018-06-13T19:45",
"endTime": "2018-06-13T20:45",
"location": {
"name": "Friends Meeting House",
"#type": "PostalAddress",
"streetAddress": "12A Queens Parade",
"addressLocality": "Harrogate",
"addressRegion": "North Yorkshire",
"postalCode": "HG1 5PP",
"addressCountry": "GB"
}
},
"performer": {
"#type": "LocalBusiness",
"description":
"Small, friendly yoga classes. Suitable for all abilities. Strengthen body, increase flexibility and calm the mind.",
"name": "hello YOGA",
"email": "clare#hello-yoga.co.uk",
"url": "https://www.hello-yoga.co.uk",
"priceRange": "£7",
"image": "https://www.hello-yoga.co.uk/yoga-people.svg",
"address": {
"#type": "PostalAddress",
"addressLocality": "Harrogate",
"addressRegion": "North Yorkshire",
"addressCountry": "GB"
}
}
}
</script>
<script type="application/ld+json">
{
"#context": "http://schema.org",
"#type": "Event",
"name": "hello YOGA",
"startDate": "2018-06-07T19:00",
"endDate": "2018-06-07T20:00",
"description":
"Yoga class at Beckwith Health Club (Harrogate) every Wednesday.",
"image": "https://www.hello-yoga.co.uk/yoga-people.svg",
"location": {
"#type": "Place",
"name": "Beckwith Health Club",
"address": {
"#type": "PostalAddress",
"streetAddress": "Beckwith Health Club",
"addressLocality": "Harrogate",
"addressRegion": "North Yorkshire",
"postalCode": "HG3 1UF",
"addressCountry": "GB"
}
},
"offers": {
"#type": "Offer",
"availability": "http://schema.org/LimitedAvailability",
"price": "7.00",
"priceCurrency": "GBP",
"validFrom": "2018-05-01T12:00",
"url": "https://www.hello-yoga.co.uk"
},
"potentialAction": {
"#type": "ExerciseAction",
"name": "hello YOGA",
"description": "Small, friendly yoga class. Suitable for all abilities.",
"exerciseType": "Yoga",
"startTime": "2018-06-07T19:00",
"endTime": "2018-06-07T20:00",
"location": {
"name": "Beckwith Health Club",
"#type": "PostalAddress",
"streetAddress": "Beckwith Health Club",
"addressLocality": "Harrogate",
"addressRegion": "North Yorkshire",
"postalCode": "HG3 1UF",
"addressCountry": "GB"
}
},
"performer": {
"#type": "LocalBusiness",
"description":
"Small, friendly yoga classes. Suitable for all abilities. Strengthen body, increase flexibility and calm the mind.",
"name": "hello YOGA",
"email": "clare#hello-yoga.co.uk",
"url": "https://www.hello-yoga.co.uk",
"priceRange": "£7",
"image": "https://www.hello-yoga.co.uk/yoga-people.svg",
"address": {
"#type": "PostalAddress",
"addressLocality": "Harrogate",
"addressRegion": "North Yorkshire",
"addressCountry": "GB"
}
}
}
</script>
We're trying to use the aggregateRating tag but we're getting this warning in the SDTT:
The aggregateRating property inside a Review object applies to the review itself, as a creative work. Did you mean to use reviewRating instead.
We want to aggregate the reviews from all users, not use reviewRating (we already use that one for our own reviews).
Does anyone know how to fix this error?
JSON-LD (example page):
<script type="application/ld+json">
{
"#context": "http://schema.org",
"#type": "Review",
"name": "It",
"datePublished": "2017-09-06",
"description": "Based on Stephen King's 1986 novel, […]",
"url": "https://dev.commonsensemedia.org/movie-reviews/it",
"reviewBody": "Based on Stephen King's 1986 novel, […]",
"author": {
"#type": "Person",
"name": "Jeffrey M. Anderson",
"sameAs": "https://dev.commonsensemedia.org/users/jeffrey-m-anderson"
},
"itemReviewed": {
"#type": "Movie",
"name": "It",
"sameAs": "http://www.imdb.com/title/tt1396484/",
"datePublished": "2017-09-08",
"image": {
"#type": "ImageObject",
"url": "image.jpg"
},
"director": {
"#type": "Person",
"name": "Andres Muschietti"
},
"actor": [
{
"#type": "Person",
"name": "Bill Skarsg\u00e5rd"
},
{
"#type": "Person",
"name": "Jaeden Lieberher"
},
{
"#type": "Person",
"name": "Finn Wolfhard"
}
]
},
"publisher": {
"#type": "Organization",
"name": "Common Sense Media",
"sameAs": "https://www.commonsensemedia.org"
},
"reviewRating": {
"#type": "Rating",
"ratingValue": "4"
},
"aggregateRating": {
"#type": "AggregateRating",
"ratingValue": "4.04651",
"bestRating": 5,
"worstRating": 1,
"reviewCount": "43",
"name": "Parents say",
"description": "All parent member reviews for It"
}
}
</script>
When you add the aggregateRating property to the Review item, the aggregated rating is for the review, not for the reviewed item.
If the aggregated rating is for the reviewed item, you have to add the aggregateRating to this item (e.g., Movie).
If that is what you want, you can move the aggregateRating under Movie, e.g.:
{
"#context": "http://schema.org",
"#type": "Review",
"itemReviewed": {
"#type": "Movie",
"aggregateRating": {
"#type": "AggregateRating"
}
}
}
I am able to see the event in email but not in Google Now app. I am triggering email from Google App Script. The markup has been verified by Google's markup tester and is valid. Below is JSON-LD format:
<script type="application/ld+json">
{
"#context": "http://schema.org",
"#type": "EventReservation",
"reservationNumber": "IO123456789",
"modifyReservationUrl": "http://www.searshomeservices.com",
"modifiedTime": "2015-03-04T02:30:00-06:00",
"underName": {
"#type": "Person",
"name": "John Smith"
},
"reservationStatus": "http://schema.org/Confirmed",
"reservationFor": {
"#type": "Event",
"name": "Event Confirmation",
"startDate": "2015-03-05T04:30:00-06:00",
"performer": {
"#type": "Person",
"name": "Jitendra",
"image": "https://lh3.googleusercontent.com/-qYfc01xZOSg/Uw46cceE_EI/AAAAAAAAABw/xNYxVibhDSs/s70-no/cara_verde.png"
},
"location": {
"#type": "Place",
"name": "Moscone Center",
"address": {
"#type": "PostalAddress",
"streetAddress": "800 W Howard St.",
"addressLocality": "Chicago",
"addressRegion": "IL",
"postalCode": "60626",
"addressCountry": "US"
}
}
}
}
</script>