DEV TOOLBOX · SCHEMA MARKUP · NO SIGNUP
> schemapreview

JobPosting schema

JobPosting is the entry ticket to Google for Jobs — the dedicated job search UI that takes over the SERP for queries like "frontend jobs near me." Without valid JobPosting schema, you are not in that index, no matter how many backlinks you have.

Required fields

  • title — the role title only. No location, no seniority modifier in this field.
  • description — full description. HTML allowed (and recommended) for paragraph breaks and lists.
  • datePosted — ISO 8601.
  • hiringOrganizationOrganization with name. sameAs (org website) and logo are strongly recommended.
  • jobLocationPlace with a full PostalAddress. For remote, see below.

Recommended (and effectively required since 2024)

  • validThrough — ISO 8601 timestamp. Without this, Google removes the listing after 30 days of being live, regardless of whether the job is still open. Always set this.
  • employmentTypeFULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER, PER_DIEM, or OTHER. Used as a filter chip in Google for Jobs.
  • baseSalaryMonetaryAmount with currency, value (or minValue/maxValue), and unitText (HOUR, DAY, WEEK, MONTH, YEAR). Strongly impacts click-through.

Remote jobs

Remote jobs need jobLocationType: "TELECOMMUTE" plus applicantLocationRequirements with a country code. The actual jobLocation should still be the hiring company's office address; the two together signal "this is remote, but legally based here."

Common mistakes

  1. Missing validThrough. The single biggest reason job listings drop out of Google for Jobs.
  2. Multiple roles on one page. Each role = one URL. Roundup pages are not eligible.
  3. HTML in title. Plain text only.
  4. Posting expired jobs. Listings that 404 or return "this job is no longer available" trigger manual actions.

CMS notes

  • WordPress (WP Job Manager): emits JobPosting schema; check that validThrough matches your listing expiry rule.
  • ATS (Greenhouse, Lever, Workable): their public job board pages emit JobPosting schema by default. Use their pages as canonical; if you mirror to your own site, add a rel="canonical" back to the ATS page.
  • Custom careers page: build the JSON-LD from the same data the page renders to avoid drift.

Generate it below

Last verified: 2026-05-15. Found something inaccurate? Email hello@schemapreview.dev.

Google's Job Posting docs ↗

TYPE
02 — PROPERTIES
Hiring organization*
Job location*
Address*

Required since 2024 to stay eligible past expiry.

Salary+
03 — PREVIEW
Google preview · approximate
Job title
company
Posted
VALIDATION
Fill in the Job Posting below — validation runs as you type.
5 required fields · 3 recommended
04 — COPY
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "JobPosting"
}
</script>