Guide : JobPosting Schema

How to implement JobPosting données structurées to apparaître in Google pour Jobs — the five requis properties, the recommended fields que en réalité drive clicks, remote-job markup, le contenu policies que obtenir postings disapproved, and how to supprimer expired jobs correctement.

Première publication : 27 juin 2026 · Dernière mise à jour : 3 août 2026 · Advanced
Langues
1 indice probant sur cette page

JobPosting schema is the schema.org/JSON-LD markup vous put on a unique job-listing page to become eligible pour Google pour Jobs. Five properties are requis — title, description, datePosted, hiringOrganization, and jobLocation (with a fully-remote exception) — and the recommended ones (validThrough, employmentType, baseSalary) are où the click-through and filtering valeur lives. Content-schema parity is non-negotiable: everything in the JSON-LD doit be visible on lune page. The la plupart courant disapproval causer is putting the markup on a listing page au lieu de un job par page. Expired-job hygiene is an ongoing obligation, pas a one-time setup — leave dead jobs live and vous risk a manual action. And Google's Indexation API is scoped to JobPosting and BroadcastEvent seulement; misusing it as a general 'index faster' button peut cost vous accès. Bing supports the même vocabulary but documents it far plus lightly — lean Google.

TL;DR — JobPosting schema (schema.org/JobPosting, in JSON-LD) rend a single-job page eligible pour Google pour Jobs. Google exige five properties — title, description, datePosted, hiringOrganization, jobLocation — with applicantLocationRequirements/jobLocationType: TELECOMMUTE substituting pour emplacement on entièrement remote roles. The recommended définir (validThrough, employmentType, baseSalary, identifier, directApply) is où the CTR and filtering valeur lives. Two hard rules: un job par page, and content-schema parity (every JSON-LD valeur doit be visible on lune page). Expired-job hygiene is an ongoing compliance task with three sanctioned removal méthodes; leaving expired jobs live risks a manual action. Google’s Indexation API is scoped to JobPosting and BroadcastEvent seulement and is now approval-gated — don’t treat it as a general “index faster” button. Bing supports the même vocabulary but documents it far plus thinly; lean Google.

Evidence for this claim Google documents jobLocationType TELECOMMUTE and applicantLocationRequirements for fully remote jobs. Scope: Google Search JobPosting remote-job requirements; hybrid roles should not be marked as fully remote. Confidence: high · Verified: Google: JobPosting structured data

My general stance on schema hasn’t modifié pour job listings: I’m a fan of markup as long as it earns vous a search fonctionnalité. JobPosting clears que bar cleanly — it’s the gate to Google pour Jobs, a genuine SERP surface — so it’s worth doing, and worth doing precisely. The precision is the whole game ici, parce que job listings are un of the plus heavily policed structured-data types Google runs.

The five requis properties

Google’s job-posting structured-data documentation listes five requis properties. Miss quelconque un and lune page isn’t eligible:

  • title“The title of the job (pas the title of the posting). Par exemple, ‘Software Engineer’ or ‘Barista’.” (jump to quote) Ce trips personnes up constantly — the valeur is the role, pas votre page’s <h1> or SEO title.
  • description — the complet HTML job description. It doit pas simplement repeat the title; Google veut the réel, complet description.
  • datePosted — the original date the employer posted the job, in ISO 8601 (e.g., 2017-01-24).
  • hiringOrganization“The organization offering the job position. Ce doit be the nom of the company (Par exemple, ‘Starbucks, Inc’).” (jump to quote) Pour a job board ce doit be the réel employer, pas the board.
  • jobLocation — the physical worksite où the employee va report, pas the placer the job was posted. Pas requis si vous supply applicantLocationRequirements pour a remote role.

A minimal, valid exemple:

{
  "@context": "https://schema.org/",
  "@type": "JobPosting",
  "title": "Software Engineer",
  "description": "&lt;p>Full job description in HTML…&lt;/p>",
  "datePosted": "2026-06-27",
  "hiringOrganization": {
    "@type": "Organization",
    "name": "Example Co",
    "sameAs": "https://www.example.com"
  },
  "jobLocation": {
    "@type": "Place",
    "address": {
      "@type": "PostalAddress",
      "addressLocality": "Raleigh",
      "addressRegion": "NC",
      "addressCountry": "US"
    }
  }
}

Eligibility comes from the requis five, but the CTR and filtering valeur comes almost entirely from the recommended définir — ces are the fields Google pour Jobs lets searchers filter on:

  • validThrough — the date the posting expires, in ISO 8601. There’s a nuance worth stating plainly: omit it entirely si the job jamais expires, but si the job fait have an fin date, inclure it and garder it accurate. Leaving a stale validThrough in placer is a compliance problem, pas a harmless par défaut.
  • employmentTypeFULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER, PER_DIEM, or OTHER (an array is allowed).
  • baseSalary (a MonetaryAmount) — the réel base salary provided by the employer, pas an estimate; seulement the employer may supply it. Utiliser unitText of HOUR/DAY/WEEK/MONTH/YEAR, and minValue/maxValue pour a range. With pay-transparency laws spreading, ce is increasingly pas optional En pratique.
  • identifier (a PropertyValue) — the employer’s unique job/req ID; matters pour de-duplication, surtout on aggregators.
  • directApply — indicates si the posting’s URL lets someone appliquer directement on que site plutôt que redirecting elsewhere.

Beta properties

Google requested a définir of additional properties back in 2021 que are encore flagged beta: educationRequirements.credentialCategory, experienceRequirements.monthsOfExperience, and experienceInPlaceOfEducation. Ces grew out of Google’s Career Certificate push during the pandemic-era job market. Google’s propre framing at launch was que parce que it was encore developing how it uses the information, vous pourrait pas voir quelconque appearance or effect dans la recherche Google correct away.

The beta-property framing ci-dessus is paraphrased from Google’s launch statement as relayed in Moteur de recherche Journal’s March 2021 coverage; it isn’t quoted verbatim ici parce que I sourced it secondhand. Confirmer the exact wording contre the live docs avant treating it as a direct quote.

My prendre: ajouter les si they’re cheap to populate from votre ATS, but don’t hold up a launch pour les — they’re future-proofing, pas eligibility.

Remote and hybrid jobs: TELECOMMUTE fait correct

Remote markup has three distinct patterns, and getting it incorrect is a classic content-mismatch flag.

Entièrement remote. Définir jobLocationType to TELECOMMUTE, pour jobs in qui the employee may or doit fonctionner remotely 100% of the temps. Google exige every TELECOMMUTE posting to specify au moins un eligible country — via applicantLocationRequirements (Google’s preferred méthode) or, failing que, a par défaut taken from jobLocation. There’s aucun valid scenario où a remote job carries zero emplacement information: “unrestricted” En pratique signifie listing every country you’ll accept applicants from, pas omitting the field. The on-page description doit clearly dire the role is entièrement remote aussi — content-schema parity s’applique ici as beaucoup as anywhere.

Evidence for this claim Google documents jobLocationType TELECOMMUTE and applicantLocationRequirements for fully remote jobs. Scope: Google Search JobPosting remote-job requirements; hybrid roles should not be marked as fully remote. Confidence: high · Verified: Google: JobPosting structured data
{
  "@type": "JobPosting",
  "jobLocationType": "TELECOMMUTE",
  "applicantLocationRequirements": {
    "@type": "Country",
    "name": "USA"
  }
}

Que exemple is a US-only remote role. Pour “remote within the EU” or quelconque multi-country role, repeat applicantLocationRequirements pour chaque eligible country — the property nom is the même si you’re naming un country or ten.

Hybrid. A hybrid role is pas entièrement remote. Give it a réel office jobLocation, and seulement ajouter the TELECOMMUTE flag si the role genuinely qualifies as remote — Google’s propre hybrid exemple pairs a physical jobLocation with jobLocationType (plus applicantLocationRequirements quand the remote option is itself geography-restricted). The mistake to éviter: marking an occasional-work-from-home role as TELECOMMUTE. That’s a content mismatch waiting to se produire — TELECOMMUTE is pour 100%-remote fonctionner, and lune page has to back que up. Quand in doubt, the Decision Trees tab has a “should this use TELECOMMUTE?” walkthrough.

Evidence for this claim Google documents jobLocationType TELECOMMUTE and applicantLocationRequirements for fully remote jobs. Scope: Google Search JobPosting remote-job requirements; hybrid roles should not be marked as fully remote. Confidence: high · Verified: Google: JobPosting structured data

Google pour Jobs eligibility and regional availability

Un surprise pour international teams: Google pour Jobs isn’t global. It’s live in 50+ countries à travers North America, Latin America, Europe, the Middle East and North Africa, Sub-Saharan Africa, and Asia — but pas everywhere. Si votre listings are technically perfect and encore pas showing, vérifier que the experience is disponible in votre target country avant vous spend a day debugging votre JSON-LD.

Content policies que obtenir postings disapproved

Google’s job-posting content policies are stricter que la plupart structured-data rules, and they’re worth knowing by leur réel noms parce que Search Console va cite les. From Google’s documentation:

  • Single-job pages seulement. “The JobPosting markup doit seulement be utilisé on pages que contain a unique job posting.” (jump to quote) Ce is the unique la plupart courant real-world disapproval — aucun markup on listing/search-results pages.
  • Irrelevant content — the posting’s content doit be relevant to the job.
  • Incomplete content — Google doesn’t autoriser job postings with incomplete job descriptions.
  • Misrepresentation — aucun fake jobs, keyword stuffing, faux emplacement données, impersonation, or posting someone else’s listing sans authorization.
  • Profanity — aucun obscene, profane, or offensive language.
  • Disguised ads / promotional content — aucun affiliate-program listings or autre promotional content dressed up as a job.
  • Expired postings — Google doesn’t autoriser expired job postings. “Ideally vous devrait supprimer expired job postings from votre website.” (jump to quote)
  • Jobs sans a façon to appliquer — every posting nécessite a façon to appliquer (career-fair invites and login-gated postings are exempted).
  • Resume collection — seulement pour ouvrir, actively-hiring positions.
  • Job requêtes — the markup is pour réel openings, pas solicitations from personnes seeking fonctionner.
  • Payment requis — jamais exiger an applicant to pay.
  • Editorial content — proper grammar and capitalization; aucun all-caps spam.

The through-line: content-schema parity is non-negotiable. Every valeur in the JSON-LD — salary, remote status, employment type — doit be visibly présent in the human-readable page, or Google peut treat the mismatch as misrepresentation.

Handling expiration and removal correctement

Ce is the partie teams under-build. Expired-job hygiene is an ongoing obligation, pas a one-time setup task — vous besoin a traiter (a cron job, an ATS integration, or an Indexation API appel) to pull a role the moment it closes. Google sanctions three removal méthodes:

  1. Définir validThrough to a date in the past and leave lune page up briefly.
  2. Supprimer lune page entirely and retourner a 404 or 410.
  3. Strip the JobPosting markup from lune page.

The risk si vous don’t: leaving expired postings live violates le contenu policies, and Google dit la réponse may inclure manual action que removes the job posting(s) from the job search experience on Google — that’s scoped to votre job listings’ eligibility pour the Jobs fonctionnalité, pas an automatic penalty contre the rest of votre site’s organic rankings. Evidence for this claim Google requires expired job postings to be removed or marked with a past validThrough value and no longer exposed as active jobs. Scope: Google Search JobPosting expiration policy; stale postings can trigger manual actions. Confidence: high · Verified: Google: JobPosting structured data Setting a future validThrough on a job that’s en réalité filled fait pas garder it “safe” — lune page doit reflect reality.

Pour faster removal and updates on job URLs specifically, Google recommends its Indexation API over waiting pour a normal re-crawl or a sitemap ping — voir the suivant section pour the scope and accès caveats.

Duplicate and syndicated postings

A very courant real-world cas: the même req posted to votre careers page and three job boards. Ce is fine. John Mueller has said que having the même job posted on différent websites is very courant and attendu, and que hosting the même listing at différent times or on différent subdomains devrait be fine aussi — Google de-duplicates identical listings plutôt que penalizing les, and he’s indicated the même s’applique to Google pour Jobs.

Mueller’s remarks ci-dessus are paraphrased from a February 2022 Google Hangout as recapped by iloveseo.com; I’m summarizing plutôt que quoting parce que I sourced it via que secondary recap. Ce que encore s’applique regardless: hiringOrganization doit be the réel employer, and aucun misrepresentation.

The Indexation API is scoped — and now gated

Google’s Indexation API n’est pas a general “get indexed faster” outil. Per Google’s Indexation API quickstart, it peut seulement be utilisé to explorer pages with soit JobPosting or BroadcastEvent embedded in a VideoObject — job postings are un of seulement two legitimate utiliser cas. Submitting une URL is a notification, pas a guarantee: it doesn’t guarantee que Google va explorer, index, inclure, rank, or afficher lune page on quelconque particulier timeline.

Two choses have modifié the landscape ici:

  1. Accès is now approval-gated. The par défaut per-day quota is modest, and getting meaningful volume now exige filling out a Google approval formulaire plutôt que being auto-enabled. Cite Google’s propre Requesting Approval and Quota page as the principal source pour ce.
  2. Google is visibly protecting the lane from spam. Google reps have repeatedly warned contre misusing the Indexation API to push arbitrary, unsupported page types — the recommendation is to stick to the documented, pris en charge utiliser cas. Parce que JobPosting is un of seulement two of ceux, ce matters directement: abuse the API pour non-job content and vous risk losing accès to a channel votre job listings en réalité depend on.
Industry reporting (dstribute.io, alexanderchukovski.com) frames the shift from near-open Indexation API accès to an authorized-partner/approval model as rolling out roughly à travers 2024–2025. I’m treating ceux phased dates as industry-sourced color, pas Google-confirmed line by line — the principal, citable fact is Google’s propre quota-pricing/approval page. The rep warnings à propos de API misuse were surfaced via secondary aggregation, so I’ve paraphrased plutôt que quoted les; vérifier exact wording and platform contre the principal source avant quoting directement.

Troubleshooting in Search Console

Quand a listing doesn’t montrer, fonctionner it in order — the Playbooks tab lays ce out as a linear runbook, but La version courte:

  • Validate the markup with the Résultats enrichis Tester and confirmer tout five requis properties parse sans error.
  • Confirmer un job par page — the la plupart courant disapproval is JobPosting markup on a listing/index page.
  • Vérifier content-schema parity — every JSON-LD valeur (salary, remote status, employment type) doit be visible on lune page.
  • Vérifier validThrough and expiry — an expired posting encore carrying live markup obtient disapproved.
  • Confirmer regional availability — Google pour Jobs isn’t disponible everywhere.
  • Vérifier Search Console’s rich-result report pour the spécifique disapproval raison and fix contre que named policy.
Caveat, per my source research: là have been reports of a 2026 Search Console job-listing reporting problème affecting how job résultats enrichis surface in the report. I haven’t been able to confirmer que contre a principal Google source, so treat it as an unverified possibility — si votre report semble incorrect but the markup validates cleanly in the Résultats enrichis Tester, a reporting glitch is worth ruling in, but confirmer avant concluding it’s a Google-side bug.

Bing and JobPosting

Bing supports données structurées broadly — JSON-LD, Microdata, RDFa — and provides a Balisage de données structurées Validator, and it listes JobPosting among pris en charge types pour careers-page and job-board markup. But Bing fait pas publish a JobPosting-specific eligibility spec anywhere near as detailed as Google’s, and its job-search surface has far lower documented rigor. The honest summary: Bing uses the même schema.org vocabulary and the même single-job-per-page principle, with beaucoup lighter validation and beaucoup thinner documentation. Don’t assume Bing/Google parity ici — mark up pour Google’s stricter spec and Bing is covered by par défaut.

I couldn’t confirmer a live, canonical Bing Webmaster Outils aider URL specifically titled pour JobPosting during my research réussir. Plutôt que guess une URL, I’m stating the gap plainly: Bing’s job-listing documentation is genuinely thin. Re-verify the current Bing aider page avant ajout a direct lien.

Où ce sits

JobPosting is un type in the broader données structurées hub ce article lives sous, alongside the commerce-focused Product schema and ProductGroup schema markup and the wider Commerce schema family. Si you’re implementing à travers a site, treat les the même façon: utiliser the type que maps to a confirmed search fonctionnalité, garder the JSON-LD in parity with visible page content, and validate avant vous ship.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.