auditmysitev2.0.2

Job Posting: missing required properties

seo.schema.schema_rule_missing_job_posting

Outcome class
Automatic. An automated check that can report a confirmed violation.
Area
SEO, structured data

What the rule checks

Scope. Applies to JSON-LD nodes of type JobPosting in the audited document (top level, top-level arrays, @graph entries; full schema.org IRIs count as the short type). Microdata and RDFa are outside this method.

Expectation. Fails when a required property is missing (applicantLocationRequirements for a TELECOMMUTE job instead of jobLocation). Required present but recommended missing: needs_review (Google's Rich Results Test reports missing recommended properties as non-critical issues (eligible, but a human should decide whether the data exists)). All present passes. Nested property values (an author Person, a provider Organization) are not nodes of their own and are not assessed; a page without a node of the type is not applicable. A page whose structured-data collection fails is not run for every feature, never clean.

Source. https://developers.google.com/search/docs/appearance/structured-data/job-posting (required: title, datePosted, description, hiringOrganization, jobLocation or remote-job properties; recommended: baseSalary, employmentType, identifier, validThrough)

Detection: detect_structured_data; needs dom.

Failing example

The check reports a violation here. Corpus case schema_rules_incomplete. The page may contain further findings for other rules.

schema_rules_incomplete.htmlHTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Schema rules corpus — incomplete JSON-LD missing required properties</title>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"Product","name":"Bare product"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Only"}]}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"LocalBusiness"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"Event"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"Recipe"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"VideoObject"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"JobPosting"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"SoftwareApplication"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"ProfilePage"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"ItemList","itemListElement":[{"@type":"ListItem","position":1}]}
</script>

</head>
<body>
  <h1>Schema rules corpus fixture (incomplete/missing required JSON-LD)</h1>
</body>
</html>

Passing example

The check passes here and reports nothing. Corpus case schema_rules_complete. The page may contain further findings for other rules.

schema_rules_complete.htmlHTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Schema rules corpus — complete/valid JSON-LD for all 17 features</title>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"Article","headline":"Example headline","author":{"@type":"Person","name":"Ada"},"datePublished":"2026-01-01","dateModified":"2026-01-02","image":"https://example.com/article.jpg"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"Product","name":"Complete product","image":"https://example.com/product.jpg","review":{"@type":"Review","author":{"@type":"Person","name":"Ada"}},"aggregateRating":{"@type":"AggregateRating","ratingValue":4.5,"reviewCount":10},"offers":{"@type":"Offer","price":"19.99","priceCurrency":"USD"}}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://example.com"},{"@type":"ListItem","position":2,"name":"Current"}]}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"Organization","name":"Example Inc","url":"https://example.com","logo":"https://example.com/logo.png","address":{"@type":"PostalAddress","streetAddress":"Main Street 1"},"telephone":"+1-555-0100","sameAs":["https://social.example/example"]}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"LocalBusiness","name":"Example Shop","address":{"@type":"PostalAddress","streetAddress":"Main Street 1"},"telephone":"+1-555-0100","url":"https://example.com","openingHoursSpecification":{"@type":"OpeningHoursSpecification","dayOfWeek":"Monday","opens":"09:00","closes":"18:00"},"image":"https://example.com/shop.jpg","priceRange":"$$","geo":{"@type":"GeoCoordinates","latitude":52.5,"longitude":13.4}}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Question 1","acceptedAnswer":{"@type":"Answer","text":"Answer 1"}}]}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"Event","name":"Conference","startDate":"2026-09-01","endDate":"2026-09-02","location":{"@type":"Place","name":"Hall","address":"Main Street 1"},"description":"Annual conference","eventStatus":"https://schema.org/EventScheduled","image":"https://example.com/event.jpg","offers":{"@type":"Offer","price":0},"organizer":{"@type":"Organization","name":"Example"},"performer":{"@type":"Person","name":"Speaker"}}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"Recipe","name":"Soup","image":"https://example.com/soup.jpg","author":{"@type":"Person","name":"Cook"},"datePublished":"2026-01-01","description":"A soup","recipeIngredient":["water"],"recipeInstructions":["Cook"],"recipeYield":"2 servings","totalTime":"PT30M"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"VideoObject","name":"Demo","thumbnailUrl":"https://example.com/thumb.jpg","uploadDate":"2026-01-01","contentUrl":"https://example.com/video.mp4","description":"Demo video","duration":"PT1M","interactionStatistic":{"userInteractionCount":1},"regionsAllowed":"DE"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"JobPosting","title":"Engineer","datePosted":"2026-01-01","description":"<p>Role</p>","hiringOrganization":{"@type":"Organization","name":"Example"},"jobLocation":{"@type":"Place","address":{"addressCountry":"DE"}},"baseSalary":{"value":50000},"employmentType":"FULL_TIME","identifier":"job-1","validThrough":"2026-12-31"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"SoftwareApplication","name":"App","offers":{"price":0},"review":{"reviewRating":{"ratingValue":5}},"applicationCategory":"BusinessApplication","operatingSystem":"Web"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"ProfilePage","mainEntity":{"@type":"Person","name":"Ada"},"dateCreated":"2026-01-01","dateModified":"2026-02-01"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"ItemList","name":"Items","numberOfItems":2,"itemListElement":[{"@type":"ListItem","position":1,"url":"https://example.com/1"},{"@type":"ListItem","position":2,"url":"https://example.com/2"}]}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"WebPage","name":"About","url":"https://example.com/about","description":"About Example","inLanguage":"en","isPartOf":{"@type":"WebSite","name":"Example"},"author":{"@type":"Organization","name":"Example"},"publisher":{"@type":"Organization","name":"Example"},"image":"https://example.com/about.jpg"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"WebSite","name":"Example","url":"https://example.com","inLanguage":"en","publisher":{"@type":"Organization","name":"Example"},"potentialAction":{"@type":"SearchAction"}}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"Person","name":"Ada Example","url":"https://example.com/team/ada","image":"https://example.com/ada.jpg","jobTitle":"Engineer","worksFor":{"@type":"Organization","name":"Example"},"sameAs":["https://social.example/ada"]}
</script>

</head>
<body>
  <h1>Schema rules corpus fixture (complete/valid JSON-LD)</h1>
</body>
</html>

This page is generated from the rule catalogue and the rule contracts; see therule overview for how the outcome classes are derived.