JobPosting schema markup
Describes a job vacancy so it can appear in Google’s job search experience.
Does Google still show a rich result for this?
Supported, though availability is regional rather than global. The expiry rules are stricter than most types and are where sites get into trouble.
When to use it
On a page for a single vacancy. Remove or expire it the moment the role is filled.
Required properties
datePosteddescriptionhiringOrganizationjobLocationtitle
Recommended properties
applicantLocationRequirementsbaseSalaryemploymentTypeidentifierjobLocationTypevalidThrough
Example
{
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Content Marketing Manager",
"datePosted": "2026-07-28",
"validThrough": "2026-09-30T23:59:59+01:00",
"description": "<p>We are looking for a content marketing manager…</p>",
"hiringOrganization": { "@type": "Organization", "name": "Example Ltd" },
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressLocality": "Leeds",
"addressCountry": "GB"
}
}
}Common mistakes
- Leaving a filled role live. Set validThrough in the past, return 404 or 410, or remove the markup.
- Omitting addressCountry from jobLocation, which Google requires.
- Putting a salary, a reference code or a date into the title. It takes the job title only.
- Supplying a plain-text description. It must be full HTML with real paragraph breaks.
- Marking a role TELECOMMUTE without applicantLocationRequirements and without saying so in the description.
Check what your own pages are missing
Our free checker reads the markup already on a page and names the types it is missing for its page type. No account needed.
Run the schema checker →Verified against Google’s structured data documentation and its changelog on 28/07/2026. Google changes what it supports without much notice — if you are reading this long afterwards, check the current documentation before acting on it. Background on why this markup matters beyond rich results is in the answer engine optimisation guide.