What is JobPosting schema?
JobPosting schema is Schema.org structured data that describes a job listing to search engines in machine-readable format. It marks up 5 required fields — title, description, datePosted, hiringOrganization, and jobLocation — making a job page eligible for Google's dedicated job-search results that appear above standard organic listings.
Schema.org structured data is how you communicate to Google what your page is about — not in prose that a human reads, but in structured data that a machine parses. JobPosting schema specifically tells Google 'this page is a job listing for this trade in this location, posted on this date, by this organization.' Without it, Google may understand your job page as generic content. With it, Google can surface it in the job-search experience and potentially in featured snippets.
Why do staffing sites need JobPosting schema?
Staffing sites need JobPosting schema to unlock eligibility for Google's job-search experience, which surfaces listings above standard organic results and includes direct apply buttons. Without valid markup, candidate pages compete only in standard organic listings — missing the dedicated job-search surface that now captures the majority of job-seeker clicks.
Google's job-search results appear as a rich carousel at the top of results for job-intent searches. A page with valid JobPosting schema can appear there; a page without it cannot, regardless of how well the page ranks in standard organic. For staffing candidate pages, this is a second ranking surface in addition to standard organic — doubling the exposure for the same page. See how this integrates with your ATS on the ATS integration page.
What fields does JobPosting schema require?
JobPosting schema requires 5 core fields: title (the job title), description (full job details), datePosted (ISO 8601 date), hiringOrganization (your agency name and URL), and jobLocation (physical address or remote designation). Missing any required field disqualifies the listing from job-result eligibility — Google's Rich Results Test will identify the specific gap.
Beyond required fields, Google strongly recommends including validThrough (the expiration date), baseSalary (pay range), and employmentType (full-time, contract, temporary). Salary in particular significantly increases click-through rate on job listings when displayed. The complete field reference is in Google's developer documentation; the practical implementation depends on how your ATS exposes job data. A broken or outdated datePosted is one of the most common disqualification reasons on audits.
How do you avoid duplicate content from ATS job feeds?
Duplicate content from ATS feeds is avoided with 3 technical controls: canonical tags on job pages pointing to the authoritative version, unique on-page framing around each listing that adds agency-specific context (not just the raw feed text), and controlled indexing that prevents near-identical listings across multiple location pages from competing with each other.
The root cause of duplicate content on staffing sites is a raw ATS feed syndicated identically to multiple pages — the same job description appearing at /jobs/pipe-welder-houston/, /jobs/pipe-welder-texas/, and /jobs/pipe-welder-gulf-coast/ with nothing distinguishing them. Each page needs genuinely different framing: different intro copy describing the specific geography, different certifications highlighted for that market, different local context. The schema then points to the canonical version, and indexing control prevents the duplicates from diluting the winner. The web design implications are covered on the web design for staffing agencies page.