Error: Missing '}' or object member name. For Schema Job Posting - schema

When I test the code I keep seeing an error. even though I copied the code from Google WebDev website.
I tried removing some extra comma but the error keeps appearing on the test page
Here is my code. I am not able to find the issue.
{
"#context": "http://schema.org",
"#type": "JobPosting",
"title": "Varsity Squash Coach at Léman Manhattan Preparatory School",
"description": "The responsibilities of the Head Coach include:
Organizing daily sessions taking attendance, communication with players and parents.
Proven ability to exemplify the highest standards of leadership, sportsmanship, and respect
Excellent organizational skills and the ability to communicate effectively with all constituents
Willingness and ability to work evenings as dictated by game schedule
",
"identifier": {
"#type": "PropertyValue",
"name": "Léman Manhattan Preparatory School",
"value": "SG183"
},
"datePosted": "2022-09-12",
"validThrough": "2022-11-11",
"employmentType": "TEMPORARY",
"hiringOrganization": {
"#type": "Organization",
"name": "Léman Manhattan Preparatory School",
"sameAs": "https://www.lemanmanhattan.org/",
"logo" : "https://v5.airtableusercontent.com/v1/7/7/1663804800000/NP8X2ipIaw46UWmRKjo34Q/f6dZOI2Z0GjagfFsHhf7KT28qq7EBvzKwvoSLV7XczwvLpCAjzo3yYYWQSJpeS8fx6jK89TlrnYRuJDBiHOv4g/l1QsKwP2dRMo_vZ_zqRZq8fUwCKJmHXDzgBTXkr5Iao"
},
"jobLocation": {
“#type": "Place",
"address": {
"#type": "PostalAddress",
"streetAddress": "41 Broad St",
"addressLocality": "New York",
"addressRegion": "NY",
"postalCode": "10004",
"addressCountry": "USA"
}
}
}

There is a “typographic” quotation mark instead of a regular "typewriter" mark in jobLocation.#type. With syntax highlighting you can see that something is off starting at that line.
"jobLocation": {
"#type": "Place",
...

Related

How to correctly set up multiple product offer schema per page

For some reason I am having great difficulty finding this out. I have had a look here:
https://developers.google.com/search/docs/data-types/product
And here:
https://schema.org/Product
But none of the examples given show me how to add multiple product offers on a page. To illustrate what I am talking about, here is an example on our site:
https://reclaimdesign.org/vases-reclaimed-wood-stands.html
I have been having a to and fro with RankMath support about this and they tell me this is not possible. I don't believe they are right in saying that but I cannot find 100% irrefutable evidence to illustrate otherwise.
I am currently working to set up the schema myself (as the to and fro is now feeling like a waste of time). My schema code for the above page validates in the Structured Data Testing Tool:
`<script type="application/ld+json">
{
"#context": "http://schema.org",
"#type": "Product",
"brand": "Reclaim Design",
"logo": "https://reclaimdesign.org/wp-content/uploads/reclaim-design-logo.jpg",
"name": "4 Glamorous Sustainable Vases – Home Decor | Reclaim Design",
"image": [ "https://reclaimdesign.org/wp-content/uploads/1x1/test-tube-vases-sustainable-reclaimed-wood-stand1.jpg",
"https://reclaimdesign.org/wp-content/uploads/4x3/test-tube-vases-sustainable-reclaimed-wood-stand1.jpg",
"https://reclaimdesign.org/wp-content/uploads/16x9/test-tube-vases-sustainable-reclaimed-wood-stand1.jpg","https://reclaimdesign.org/wp-content/uploads/1x1/test-tube-vases-sustainable-reclaimed-wood-stand5.jpg",
"https://reclaimdesign.org/wp-content/uploads/4x3/test-tube-vases-sustainable-reclaimed-wood-stand5.jpg",
"https://reclaimdesign.org/wp-content/uploads/16x9/test-tube-vases-sustainable-reclaimed-wood-stand5.jpg","https://reclaimdesign.org/wp-content/uploads/1x1/bottle-vases-sustainable-reclaimed-wood-stand1.jpg",
"https://reclaimdesign.org/wp-content/uploads/4x3/bottle-vases-sustainable-reclaimed-wood-stand1.jpg",
"https://reclaimdesign.org/wp-content/uploads/16x9/bottle-vases-sustainable-reclaimed-wood-stand1.jpg","https://reclaimdesign.org/wp-content/uploads/1x1/recycled-gin-bottle-vase-sustainable-reclaimed-wood-stand.jpg",
"https://reclaimdesign.org/wp-content/uploads/4x3/recycled-gin-bottle-vase-sustainable-reclaimed-wood-stand.jpg",
"https://reclaimdesign.org/wp-content/uploads/16x9/recycled-gin-bottle-vase-sustainable-reclaimed-wood-stand.jpg"
],
"url": "https://reclaimdesign.org/vases-reclaimed-wood-stands.html",
"#id": "https://reclaimdesign.org/vases-reclaimed-wood-stands.html",
"potentialAction": {
"#type": "SearchAction",
"target": "https://reclaimdesign.org/search?q={search_term_string}",
"query-input": "required name=search_term_string"
},
"sameAs":
["https://www.facebook.com/reclaimdesignza",
"https://twitter.com/ReclaimDesignZA",
"https://www.instagram.com/reclaimdesign/",
"https://za.pinterest.com/reclaimdesignza/",
"https://www.google.com/maps/place/Reclaim+Design/#-34.03081,18.4517513,17z/data=!3m1!4b1!4m5!3m4!1s0x1dcc4242e6ad5367:0xcf5844aec51f1a43!8m2!3d-34.03081!4d18.45394"
],
"description": "Click here to find out more about our sustainable vases and vase sets with reclaimed wood stands | Reclaim Design",
"offers": [{
"#type": "Offer",
"availability": "http://schema.org/InStock",
"price": "390",
"priceCurrency": "ZAR",
"url": "https://reclaimdesign.org/home-decor-shop.html/Test-Tube-Vases-With-Stand-p134947241"
},{
"#type": "Offer",
"availability": "http://schema.org/InStock",
"price": "290",
"priceCurrency": "ZAR",
"url": "https://reclaimdesign.org/home-decor-shop.html/Test-Tube-Vases-With-Stand-p134947241"
},{
"#type": "Offer",
"availability": "http://schema.org/InStock",
"price": "370",
"priceCurrency": "ZAR",
"url": "https://reclaimdesign.org/home-decor-shop.html/Bottle-Vases-with-Stand-p65343612"
},{
"#type": "Offer",
"availability": "http://schema.org/InStock",
"price": "250",
"priceCurrency": "ZAR",
"url": "https://reclaimdesign.org/vases-reclaimed-wood-stands.html"
},{
"#type": "Offer",
"availability": "http://schema.org/InStock",
"price": "300",
"priceCurrency": "ZAR",
"url": "https://reclaimdesign.org/home-decor-shop.html/Floating-Globe-Vase-With-Stand-p65346003"
}]
}
</script>`
The RankMath support tell me "you should not use more than one product Schema per page. It does not make much sense and would only confuse Google." If they are right, why then would the code validate in Google's own testing tool?
Please can somebody with experience in this arena explain which is the correct way of doing this? TIA
You can markup your services as a product.
Two reasons to do this
Google doesn’t support “service” markup
Services are included in Product’s definition in schema.org
If you have multiple different services on a single page, then markup them one by one - individually.
If you have same services but with vivid options and price packages then use aggregate product markup.
Read about Google’s structured data product markup. You will get the sample code, which you can modify as per the requirements.

Schema.org PriceSpecification with a sale price

I'm currently building a Schema.org template for an ecommerce website, for the purposes of generating a Google Shopping Feed.
I'm struggling to understand the correct way to define a sale price - i.e. a product which has a temporary reduced price.
The options I've considered areL
a single "Offer" with multiple "PriceSpecification" items
multiple "Offer" items with a single "PriceSpecification"
or maybe something else completely?
Single "Offer" with multiple "PriceSpecification" items
"offers": {
"#type": "Offer",
"url": "https://kx.com/url",
"itemCondition": "http://schema.org/UsedCondition",
"availability": "http://schema.org/InStock",
"PriceSpecification": [
{
"#type": "PriceSpecification",
"price": 15.00,
"priceCurrency": "USD"
},
{
"#type": "PriceSpecification",
"price": 15.00,
"priceCurrency": "USD",
"validFrom": "2020-01-01",
"validThrough": "2020-02-01",
}
],
},
Multiple "Offer" items with a single "PriceSpecification"
"offers": [
{
"#type": "Offer",
"url": "https://kx.com/url",
"itemCondition": "http://schema.org/UsedCondition",
"availability": "http://schema.org/InStock",
"PriceSpecification": [
{
"#type": "PriceSpecification",
"price": 15.00,
"priceCurrency": "USD"
}
],
},
{
"#type": "Offer",
"url": "https://kx.com/url",
"itemCondition": "http://schema.org/UsedCondition",
"availability": "http://schema.org/InStock",
"PriceSpecification": [
{
"#type": "PriceSpecification",
"price": 15.00,
"priceCurrency": "USD",
"validFrom": "2020-01-01",
"validThrough": "2020-02-01",
}
],
}
]
},
Or is it something completely different? I'm struggling to find any conclusive documentation around this.
I'd note that Google strongly recommends the priceValidUntil value on Offer. I also usually use the rule of thumb that your Structured Data should match what's in your markup, so I think the starting point of the sale is likely unnecessary, especially for a Google shopping feed.
If I were approaching this, I feel the safe route would be updating your Product structured data along with the content on the day of the sale, using the priceValidUntil field to note when that sale ends, then removing the attribute and updating the price once that date hits. You'd end up with something like:
"offers": {
"#type": "Offer",
"url": "https://kx.com/url",
"itemCondition": "http://schema.org/UsedCondition",
"availability": "http://schema.org/InStock",
"price": 15.00,
"priceCurrency": "USD",
"priceValidUntil": "2/1/2020"
}
In this example, on 2/1/2020 the priceValidUntil attribute would be removed and the price attribute would update, along with the content on the page.
Your first example does validate in the Structured Data Testing Tool, but I don't think it will do you any good. I can see where you might want to advertise a sale ahead of time, but as far as I know a Google Shopping Feed/Carousel does not announce sales that are going to happen - just prices that are happening.
A final note that while priceSpecification does validate on the testing tool and is applicable to a product, details around it seem a bit vague and I'd be hesitant in expecting it to provide much value. priceSpecification on schema.org has no example of it being used in a product (although again, not to say that means it is wrong).

Structured Data Testing Tools following #id references for JSON-LD – Will this work as expected?

I'm working on marking up a site with schema data using JSON-LD. After doing my homework, I learned that #id could be used to reference other snippets of schema. Such as writing WebPage schema that isPartOf my WebSite schema.
Following this, I created the basic schemas for my website; Organization, WebSite, and WebPage where WebSite links to WebPage and Organization.
When I plug my markup into Google's Structured Data Testing tool, it all gets rolled up into the WebSite schema. However, when I remove the #id references, then it is shown as three different types of schema.
With #id
Without #id
Of course, I want my schema data to be interpreted as a series of relationships, that's the whole point. But I also want to make sure each individual schema is being parsed.
So what do you think, will this be okay?
Organization
{
"#context": "http://schema.org",
"#type": "Organization",
"#id": "https://example.com/#organization",
"name": "Organization",
"legalName": "Organization, Inc",
"description": "We rock",
"logo": "https://www.example.com/images/logo.jpg",
"url": "https://www.example.com",
"telephone": "+1-111-111-1111",
"sameAs": ["https://twitter.com/example", "https://www.linkedin.com/company/example/", "https://plus.google.com/u/0/+example", "https://www.facebook.com/example", "https://www.youtube.com/user/example", "https://www.instagram.com/example/", "https://en.wikipedia.org/wiki/example", "https://www.wikidata.org/wiki/Q1", "https://www.crunchbase.com/organization/example"],
"address":
{
"#type": "PostalAddress",
"streetAddress": "111 Street",
"addressLocality": "Nowhere",
"postalCode": "11111",
"addressCountry": "United States"
}
}
WebSite
{
"#context": "http://schema.org",
"#type": "WebSite",
"#id": "https://example.com/#website",
"name": "Website",
"alternateName": "Web",
"url": "https://www.example.com",
"hasPart":
{
"#type": "WebPage",
"#id": "https://www.example.com/#webpage"
}
}
WebPage
{
"#context": "http://schema.org",
"#type": "WebPage",
"#id": "https://www.example.com/#webpage",
"name": "Webpage",
"description": "Told you, we rock",
"url": "https://www.example.com/",
"isPartOf":
{
"#id": "https://www.example.com/#website"
},
"potentialAction":
{
"#type": "SubscribeAction",
"agent":
{
"#type": "Organization",
"#id": "https://example.com/#organization"
},
"object":
{
"#type": "Product",
"name": "Mailing List"
}
}
}
Of course, I want my schema data to be interpreted as a series of relationships, that's the whole point.
Exactly. Making use of #id references is one way to achieve this, nesting the full items is the other way. The result will be the same, i.e., they are equivalent.
But I also want to make sure each individual schema is being parsed.
If you know a consumer that only recognizes top-level items, you might want to adapt. It’s often possible to have one item of your choice on the top-level (by making use #reverse or inverse properties, if existing), but tools like Google’s SDTT might of course display the parsed result in a different way.
But unless you know such a consumer, I don’t think it would be advisable to omit using properties with item values. You would miss out on the most important semantic signal: relations.
In theory, providing the mainEntity/mainEntityOfPage property should be sufficient for page-oriented consumers to learn what the primary entity on that page is. In practice, consumers might not recognize/support this property, of course. But I don’t see how it should be easier for consumers to handle several top-level items, where it’s unclear in which relation they stand to each other (because the relations aren’t specified), so consumers should have an interest to support the common way how Schema.org structured data is provided on the Web.

HERE Places API: not all items have PVID

I'm using HERE Places API.
Firstly I'm doing a search.
For Example this query :
https://places.cit.api.here.com/places/v1/discover/search?q=Test&at=35.6111,-97.5467&r=500&size=1&app_id=DemoAppId01082013GAL&app_code=AJKnXv84fjrb0KIHawS0Tg&show_refs=pvid&pretty
According to this documentation (Link) If I add show_refs=pvid to query string, in result I will get external id which I can use to query lookup endpoint.
But in result I get next response :
{
"results": {
"next": "https://places.cit.api.here.com/places/v1/discover/search;context=Zmxvdy1pZD1hY2ExNzk3NC0zYzg3LTU5NzQtYmZkMC04YjAzMDZlYWIzMWJfMTUwNjA3NjMzMTYyMl83NDY3XzM4NTAmb2Zmc2V0PTEmc2l6ZT0x?at=35.6111%2C-97.5467&q=Test&app_id=DemoAppId01082013GAL&app_code=AJKnXv84fjrb0KIHawS0Tg",
"items": [
{
"position": [
35.60369,
-97.51761
],
"distance": 2756,
"title": "Southwest Test & Balance",
"averageRating": 0,
"category": {
"id": "business-services",
"title": "Business & Services",
"href": "https://places.cit.api.here.com/places/v1/categories/places/business-services?app_id=DemoAppId01082013GAL&app_code=AJKnXv84fjrb0KIHawS0Tg",
"type": "urn:nlp-types:category",
"system": "places"
},
"icon": "https://download.vcdn.cit.data.here.com/p/d/places2_stg/icons/categories/02.icon",
"vicinity": "200 NW 132nd St<br/>Oklahoma City, OK 73114",
"having": [],
"type": "urn:nlp-types:place",
"href": "https://places.cit.api.here.com/places/v1/places/8403fv6k-d1b2fde0616e0326e321a54b88cd9f53;context=Zmxvdy1pZD1hY2ExNzk3NC0zYzg3LTU5NzQtYmZkMC04YjAzMDZlYWIzMWJfMTUwNjA3NjMzMTYyMl83NDY3XzM4NTAmcmFuaz0w?app_id=DemoAppId01082013GAL&app_code=AJKnXv84fjrb0KIHawS0Tg",
"id": "8403fv6k-d1b2fde0616e0326e321a54b88cd9f53",
"authoritative": true
}
]
},
"search": {
"context": {
"location": {
"position": [
35.6111,
-97.5467
],
"address": {
"text": "Oklahoma City, OK 73134<br/>USA",
"postalCode": "73134",
"city": "Oklahoma City",
"county": "Oklahoma",
"stateCode": "OK",
"country": "United States",
"countryCode": "USA"
}
},
"type": "urn:nlp-types:place",
"href": "https://places.cit.api.here.com/places/v1/places/loc-dmVyc2lvbj0xO3RpdGxlPU9rbGFob21hK0NpdHk7bGF0PTM1LjYxMTE7bG9uPS05Ny41NDY3O2NpdHk9T2tsYWhvbWErQ2l0eTtwb3N0YWxDb2RlPTczMTM0O2NvdW50cnk9VVNBO3N0YXRlQ29kZT1PSztjb3VudHk9T2tsYWhvbWE7Y2F0ZWdvcnlJZD1jaXR5LXRvd24tdmlsbGFnZTtzb3VyY2VTeXN0ZW09aW50ZXJuYWw;context=c2VhcmNoQ29udGV4dD0x?app_id=DemoAppId01082013GAL&app_code=AJKnXv84fjrb0KIHawS0Tg"
}
}
}
In response no object references
Is it a bug or not every place has this external id?
I am responding as member of the team around HERE Places API.
Yes, not every place has a pvid. That is why I would suggest using the Sharing Id instead. I realize that the documentation should be improved to clarify that.
The Sharing Ids can be obtained by adding show_refs=sharing to either your search query or a place details request. It can be found in the field references. Once you have the sharing id you can you the lookup endpoint as you intended.
Take a look at:
https://places.cit.api.here.com/places/v1/places/8403fv6k-d1b2fde0616e0326e321a54b88cd9f53;context=Zmxvdy1pZD00YWU2ZWZjNi01ZjgzLTUwYTQtOTI4OS0xZjliMGMwNWY3NjBfMTUwNzA0NDE0OTc3NV84MTI5XzU1NDcmcmFuaz0w?app_id=DemoAppId01082013GAL&app_code=AJKnXv84fjrb0KIHawS0Tg&show_refs=pvid
and
https://places.cit.api.here.com/places/v1/places/8409q8yy-6af3c3e50bcb4f859686797b2be5773d;context=Zmxvdy1pZD00YWU2ZWZjNi01ZjgzLTUwYTQtOTI4OS0xZjliMGMwNWY3NjBfMTUwNzA0NDE0OTc3NV84MTI5XzU1NDcmcmFuaz0w?app_id=DemoAppId01082013GAL&app_code=AJKnXv84fjrb0KIHawS0Tg&show_refs=pvid
On those two examples, the only difference is the placeId.
In the docs, there's not a single reference saying that the external identifier is required or existant for every place.
Since it represents an external identifier, I believe we could assume that it's not required.
And it's what we just saw with your place (8403fv6k-d1b2fde0616e0326e321a54b88cd9f53): this one don't have any external identifier.
Based on your comments, what you need is the information about a place.
So, after you run your first query, you should get something like:
{
title: "Southwest Test & Balance",
position: [],
id: "8403fv6k-d1b2fde0616e0326e321a54b88cd9f53",
href: "https://[...]"
}
With this ID, you could access it:
places.cit.api.here.com/places/v1/places/8403fv6k-d1b2fde0616e0326e321a54b88cd9f53;context=Zmxvdy1pZD0zYTFlZjg5ZS02ZTY5LTUxYmEtYWFkYS1kY2UwZWMyNDdkMDBfMTUwNzEzNjUxNjI5N182NjExXzc2OTgmcmFuaz0w?app_id=DemoAppId01082013GAL&app_code=AJKnXv84fjrb0KIHawS0Tg
Or directly using the href information.
This response already is giving you the ID and URL to access all the info of a single place.
You don't need any other external ID or reference.

Schema.org: what schema is best suited for covering pages of word definitions?

I am looking into Schema.org as a means of improving SEO for our product. It's pretty clear to me why it makes sense to use it, but I'm struggling to choose an appropriate schema which fits my needs.
Our product can be described approximately as a kind of dictionary, where word has its own page, which is composed of a brief definition, followed by a more extensive elaboration on the meaning. Like so:
WORD
definition paragraph
extended description paragraph
list of used sources
So my question would be: what schema is best suited for my needs, and if no of the existing options suffices, would you recommend me to create my own scheme? I can imagine using existing schemes benefits SEO better, but I'm a layman on the subject.
So far the best option seems to be the Article scheme, which has an articleSection property which can be used to distinguish between definition as description, however not semantically, so I wonder if there's a better option I'm overlooking. Also, a decent property covering listed sources seems to be lacking, since I don't consider citations and mentions to quite respect the actual semantic meaning.
Thanks!
Here is a JSON-LD array that may be appropriate for you.
When spoken it says: "I have a data catalog named Product Dictionary. The Product Dictionary is composed of individual data sets. Words from our Product Dictionary are defined in data-sets. Two data-sets are featured here. Each data-set has parts that provide additional information about the Word. The name of the parts is data-feed. Each data-feed includes additional information. etc."
Here is that structure:
<script type="application/ld+json" id="">
{
"#context": {
"#vocab": "http://schema.org/"
},
"#type": "DataCatalog",
"#id": "http://example.com/identifier/20000",
"name": "Product Dictionary",
"hasPart": [{
"#type": "Dataset",
"#id": "http://example.com/identifier/21000",
"name": "word-1",
"description": "meaning of word-1",
"hasPart": {
"#type": "DataFeed",
"#id": "http://example.com/identifier/21100",
"name": "name of DataFeed-1",
"dataFeedElement": {
"#type": "DataFeedItem",
"#id": "http://example.com/identifier/21110",
"name": "name of DataFeedItem-1",
"item": {
"#type": "Thing",
"#id": "http://example.com/identifier/21111",
"name": "name of Thing-1",
"description": "description of Thing-1"
}
}
}
},
{
"#type": "Dataset",
"#id": "http://example.com/identifier/22000",
"name": "word-2",
"description": "meaning of word-2",
"hasPart": {
"#type": "DataFeed",
"#id": "http://example.com/identifier/22100",
"name": "name of DataFeed-2",
"dataFeedElement": {
"#type": "DataFeedItem",
"#id": "http://example.com/identifier/22110",
"name": "name of DataFeedItem-2",
"item": {
"#type": "Thing",
"#id": "http://example.com/identifier/22111",
"name": "name of Thing-2",
"description": "description of Thing-2"
}
}
}
}]
}
</script>
If you adapt this approach, include the <script> (also known as a JSON-LD island) in your HTML page.
You can test the structure here:
https://search.google.com/structured-data/testing-tool