JobPosting Schema Markup
JobPosting markup enables your job listings to appear in Google's dedicated job search experience. Job seekers can filter by location, salary, employment type, and more — and your listings appear alongside major job boards.
Eligible Rich Results
When to Use JobPosting
Properties
| Property | Type | Status | Description |
|---|---|---|---|
| title | Text | required | The job title (e.g., Senior Software Engineer). |
| description | Text | required | Full job description with responsibilities and requirements. HTML is allowed. |
| datePosted | Date | required | When the job was posted. |
| hiringOrganization | Organization | required | The company posting the job. |
| jobLocation | Place | recommended | Where the work is performed. |
| validThrough | DateTime | recommended | Application deadline. |
| employmentType | Text | required | FULL_TIME, PART_TIME, CONTRACTOR, etc. |
| baseSalary | MonetaryAmount | recommended | Salary information. |
| jobLocationType | Text | optional | Set to TELECOMMUTE for remote positions. |
| directApply | Boolean | optional | Whether candidates can apply directly. |
| applicantLocationRequirements | AdministrativeArea | optional | Where applicants must be located. |
JSON-LD Examples
Full-Time Software Engineer
A job posting with salary range and location.
{
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Senior Frontend Developer",
"description": "<p>We're looking for an experienced frontend developer to join our product team. You'll be building user interfaces with React and TypeScript.</p><h3>Requirements</h3><ul><li>5+ years of frontend development</li><li>Expert in React and TypeScript</li></ul>",
"datePosted": "2024-04-01",
"validThrough": "2024-06-30T23:59:59-07:00",
"employmentType": "FULL_TIME",
"hiringOrganization": {
"@type": "Organization",
"name": "TechCorp",
"sameAs": "https://techcorp.com",
"logo": "https://techcorp.com/logo.png"
},
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"addressCountry": "US"
}
},
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "USD",
"value": {
"@type": "QuantitativeValue",
"value": 150000,
"maxValue": 190000,
"unitText": "YEAR"
}
}
} Common Mistakes
Using 'title' and 'name' interchangeably — JobPosting uses 'title', not 'name'.
Forgetting hiringOrganization — Google requires the company name to show the listing.
Not including salary when it's available — listings with salary information get more visibility in Google for Jobs.
Using plain text for description when HTML formatting would make it more readable and attractive.
Complete Guide to JobPosting Schema Markup
JobPosting schema markup feeds directly into Google for Jobs — a dedicated job search experience that appears for job-related queries. Unlike traditional search results, Google for Jobs provides a rich interface where candidates can filter by salary, location, company size, and more.
The most critical properties are title, description, datePosted, hiringOrganization, and employmentType. Without these, your listing won't appear in Google for Jobs. The description supports HTML formatting — use headers, lists, and paragraphs to make the posting readable.
Including salary information (baseSalary) dramatically increases the visibility and click-through rate of your listing. Google prominently displays salary ranges in job search results, and many candidates filter specifically for listings that include compensation data.
For remote positions, set jobLocationType to 'TELECOMMUTE'. You can also combine this with a jobLocation to indicate the company's base location while showing the role as remote. The applicantLocationRequirements property specifies where remote workers must be located.
Related Types
Ready to Create JobPosting Markup?
Use our free generator to create valid JobPosting JSON-LD markup with a visual form. No coding required.
Open Generator