JobPosting is the Schema.org type for a job opening. Google uses it to include listings in its job search experience, often called Google for Jobs, where candidates can filter by location, date and pay. Google requires title, description, datePosted, hiringOrganization and jobLocation, or remote-work details for fully remote roles.
Remote roles
For a role with no office location, set jobLocationType to TELECOMMUTE and use applicantLocationRequirements to state the countries or regions candidates must be in. Hybrid roles should list the office in jobLocation. Accurate location data matters, since it decides where the job appears.
{
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Senior Backend Engineer",
"description": "<p>Build the ingestion pipeline...</p>",
"datePosted": "2026-10-01",
"validThrough": "2026-12-01T00:00:00Z",
"hiringOrganization": { "@type": "Organization", "name": "Marlpit" },
"jobLocationType": "TELECOMMUTE",
"applicantLocationRequirements": { "@type": "Country", "name": "US" },
"baseSalary": { "@type": "MonetaryAmount", "currency": "USD",
"value": { "@type": "QuantitativeValue", "minValue": 150000,
"maxValue": 185000, "unitText": "YEAR" } }
}Keeping listings fresh
Set validThrough when a posting has an end date, and remove the markup or the page when a job is filled. Google supports its Indexing API for JobPosting pages so sites can notify it when postings are added or removed. Applicant tracking systems often output JobPosting markup on hosted job boards, so check whether yours does before adding your own.
Content guidelines
Google's job posting policies require that the page shows the full job description, that the markup matches it, and that the listing is a real opening. Expired listings left live, or listings that require payment to apply, can lead to manual actions.
Example
A careers page on an ATS
Marlpit, a logistics SaaS, hosts jobs on a subdomain run by its applicant tracking system. The ATS already emits JobPosting markup, so the team checks it in the Rich Results Test, adds salary ranges in the ATS fields, and makes sure closed roles are unpublished.
Common mistakes
Expired roles left online
Stale postings frustrate candidates and breach Google's guidelines.
Duplicate markup from ATS and site
If the same job appears on two URLs, both with markup, decide which is the canonical listing.
Questions
No, but it helps Google pick up new and removed postings faster. Regular crawling and sitemaps also work.