docs
JobPosting
The JobPosting schema type describes an employment opportunity. With valid markup your roles become eligible for Google for Jobs — a dedicated job-search experience that drives high-intent traffic directly to your careers site.
About JobPosting
Google for Jobs requires title, description, datePosted, and hiringOrganization at a minimum. Always set validThrough when a closing date is known — Google removes expired listings automatically. Pair this type with Organization on your company page so search engines can connect the listing to your employer brand.
Fields
| Field | Type | Required | Description |
|---|---|---|---|
title | string | ✓ | The job title, e.g. "Senior Software Engineer". |
description | text | ✓ | Full job description — responsibilities, qualifications, benefits. |
datePosted | date | ✓ | Date the job was posted (ISO 8601). |
validThrough | datetime | — | The date after which the listing is no longer valid. |
employmentType | string | — | FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER, PER_DIEM, or OTHER. |
hiringOrganization | url | Organization | — | The organization offering the job. |
jobLocation.address | PostalAddress | — | Physical job location — street, city, region, country. |
Plugin Registration
sanity.config.ts
import { defineConfig } from 'sanity'
import { schemaOrgJobPostingPlugin } from 'sanity-plugin-seofields/schema'
export default defineConfig({
plugins: [
schemaOrgJobPostingPlugin(),
],
})Schema Usage
Add theschemaOrgJobPosting field to any document schema:
schemas/job.ts
import { defineField, defineType } from 'sanity'
export default defineType({
name: 'job',
title: 'Job',
type: 'document',
fields: [
defineField({
name: 'schemaOrgJobPosting',
title: 'JobPosting Schema',
type: 'schemaOrgJobPosting',
}),
],
})GROQ Query
GROQ query
*[_type == "job"][0]{
schemaOrgJobPosting {
title,
description,
datePosted,
validThrough,
employmentType,
hiringOrganization,
jobLocation
}
}Next.js Component
app/jobs/[slug]/page.tsx
import { JobPostingSchema } from 'sanity-plugin-seofields/schema/next'
export default function Page({ data }) {
return <JobPostingSchema data={data.schemaOrgJobPosting} />
}JSON-LD Output
Generated JSON-LD
{
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Senior Frontend Engineer",
"description": "We're hiring a senior engineer to build our design system in React and TypeScript.",
"datePosted": "2025-03-12",
"validThrough": "2025-05-12T23:59:00Z",
"employmentType": "FULL_TIME",
"hiringOrganization": {
"@type": "Organization",
"name": "Acme Corp",
"sameAs": "https://acme.example.com"
},
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"streetAddress": "1 Market Street",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94105",
"addressCountry": "US"
}
},
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "USD",
"value": {
"@type": "QuantitativeValue",
"minValue": 160000,
"maxValue": 210000,
"unitText": "YEAR"
}
}
}Was this page helpful?