Guide : JobPosting Schema

Comment implement JobPosting données structurées à apparaître dans Google pour Jobs — le five requis properties, le recommended champs que en réalité drive clicks, remote-job markup, le contenu policies que obtenir postings disapproved, et comment supprimer expired jobs correctement.

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

JobPosting schema est le schema.org/JSON-LD markup vous put on a unique job-listing page à become eligible pour Google pour Jobs. Five properties sont requis — titre, description, datePosted, hiringOrganization, et jobLocation (avec a fully-remote exception) — et le recommended ones (validThrough, employmentType, baseSalary) sont où le click-via et filtering valeur lives. Contenu-schema parity est non-negotiable: tout dans le JSON-LD doit être visible on lune page. Le la plupart courant disapproval causer est putting le markup on a listing page au lieu de un job par page. Expired-job hygiene est an ongoing obligation, pas a un-time setup — laisser dead jobs actif et vous risque a manual action. Et Google's Indexation API est scoped à JobPosting et BroadcastEvent seulement; misusing il as a general 'indexer faster' button peut coût vous accès. Bing prend en charge le même vocabulary mais documents il far plus lightly — lean Google.

TL;DR — JobPosting schema (schema.org/JobPosting, dans JSON-LD) rend a unique-job page eligible pour Google pour Jobs. Google exige five properties — title, description, datePosted, hiringOrganization, jobLocation — avec applicantLocationRequirements/jobLocationType: TELECOMMUTE substituting pour emplacement on entièrement remote roles. Le recommended définir (validThrough, employmentType, baseSalary, identifier, directApply) est où le CTR et filtering valeur lives. Deux difficile règles: un job par page, et contenu-schema parity (chaque JSON-LD valeur doit être visible on lune page). Expired-job hygiene est an ongoing compliance task avec three sanctioned removal méthodes; leaving expired jobs actif risques a manual action. Google’s Indexation API est scoped à JobPosting et BroadcastEvent seulement et est maintenant approval-gated — ne pas treat il as a general “index faster” button. Bing prend en charge le même vocabulary mais documents il far plus thinly; lean Google.

Preuve à l’appui de cette affirmation Google documents jobLocationType TELECOMMUTE and applicantLocationRequirements for fully remote jobs. Portée : Google Search JobPosting remote-job requirements; hybrid roles should not be marked as fully remote. Niveau de confiance : élevé · Vérifié : Google: JobPosting structured data

Mon general stance on schema hasn’t modifié pour job listings: Je’m a fan de markup as long as il earns vous a recherche fonctionnalité. JobPosting clears que bar cleanly — c’est le gate à Google pour Jobs, a genuine SERP surface — donc c’est worth doing, et worth doing precisely. Le precision est le entier game ici, parce que job listings sont un de le plus heavily policed structured-données types Google exécute.

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 — “Le titre de le job (pas le titre de le posting). Par exemple, ‘Software Engineer’ or ‘Barista’.” (jump à citation) Ce trips personnes up constantly — le valeur est le role, pas votre page’s <h1> or SEO titre.
  • description — le complet HTML job description. Il doit pas simplement repeat le titre; Google veut le réel, complet description.
  • datePosted — le original date le employer posted le job, dans ISO 8601 (e.g., 2017-01-24).
  • hiringOrganization — “Le organization offering le job position. Ce doit être le nom de le entreprise (Par exemple, ‘Starbucks, Inc’).” (jump à citation) Pour a job board ce doit être le réel employer, pas le board.
  • jobLocation — le physical worksite où le employee va rapport, pas le placer le job était 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 depuis le requis five, mais le CTR et filtering valeur comes presque entirely depuis le recommended définir — ces sont le champs Google pour Jobs lets searchers filter on:

  • validThrough — le date le posting expires, dans ISO 8601. il y a a nuance worth stating plainly: omit il entirely si le job jamais expires, mais si le job fait ont an fin date, inclure il et garder il précis. Leaving a stale validThrough dans placer est a compliance problème, pas a harmless par défaut.
  • employmentType — FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER, PER_DIEM, or OTHER (an array est allowed).
  • baseSalary (a MonetaryAmount) — le réel base salary provided par le employer, pas an estimate; seulement le employer peut supply il. Utiliser unitText de HOUR/DAY/WEEK/MONTH/YEAR, et minValue/maxValue pour a range. Avec pay-transparency laws spreading, ce est increasingly pas optional En pratique.
  • identifier (a PropertyValue) — le employer’s unique job/req ID; matters pour de-duplication, surtout on aggregators.
  • directApply — indicates si le posting’s URL lets quelqu’un appliquer directement on que site plutôt que redirecting elsewhere.

Beta properties

Google requested a définir de additional properties back dans 2021 que sont encore flagged beta: educationRequirements.credentialCategory, experienceRequirements.monthsOfExperience, et experienceInPlaceOfEducation. Ces grew out de Google’s Career Certificate push during le pandemic-era job market. Google’s propre framing à launch était que parce que il était encore developing comment il utilise le information, vous pourrait pas voir quelconque appearance or effect dans la recherche Google correct away.

Le beta-property framing ci-dessus est paraphrased depuis Google’s launch statement as relayed dans Moteur de recherche Journal’s March 2021 coverage; il n’est pas quoted verbatim ici parce que Je sourced il secondhand. Confirmer le exact wording contre le actif docs avant treating il as a direct citation.

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 et hybrid jobs: TELECOMMUTE fait correct

Remote markup a three distinct patterns, et getting il incorrect est a classic contenu-mismatch flag.

Entièrement remote. Définir jobLocationType à TELECOMMUTE, pour jobs dans qui le employee peut or doit fonctionner remotely 100% de le temps. Google exige chaque TELECOMMUTE posting à specify au moins un eligible country — via applicantLocationRequirements (Google’s preferred méthode) or, failing que, a par défaut taken depuis jobLocation. il y a aucun valide scenario où a remote job carries zero emplacement information: “unrestricted” En pratique signifie listing chaque country vous’ll accept applicants depuis, pas omitting le champ. Le sur la page description doit clairement dire le role est entièrement remote aussi — contenu-schema parity s’applique ici as beaucoup as anywhere.

Preuve à l’appui de cette affirmation Google documents jobLocationType TELECOMMUTE and applicantLocationRequirements for fully remote jobs. Portée : Google Search JobPosting remote-job requirements; hybrid roles should not be marked as fully remote. Niveau de confiance : élevé · Vérifié : Google: JobPosting structured data
{
  "@type": "JobPosting",
  "jobLocationType": "TELECOMMUTE",
  "applicantLocationRequirements": {
    "@type": "Country",
    "name": "USA"
  }
}

Que exemple est a US-seulement remote role. Pour “remote within the EU” or quelconque multi-country role, repeat applicantLocationRequirements pour chaque eligible country — le property nom est le même si vous êtes naming un country or ten.

«Hybrid. A hybrid role is not fully remote. Give it a real office jobLocation, and only add the TELECOMMUTE flag if the role genuinely qualifies as remote — Google’s own hybrid example pairs a physical jobLocation with jobLocationType (plus applicantLocationRequirements when the remote option is itself geography-restricted). The mistake to avoid: marking an occasional-work-from-home role as TELECOMMUTE. That’s a content mismatch waiting to happen — TELECOMMUTE is for 100%-remote work, and the page has to back that up. When in doubt, the Decision Trees tab has a “should this use TELECOMMUTE?” walkthrough.

Preuve à l’appui de cette affirmation Google documents jobLocationType TELECOMMUTE and applicantLocationRequirements for fully remote jobs. Portée : Google Search JobPosting remote-job requirements; hybrid roles should not be marked as fully remote. Niveau de confiance : élevé · Vérifié : Google: JobPosting structured data

» (Traduction) (Résumé en français de la section quarante, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Google pour Jobs eligibility et regional availability

Un surprise pour international teams: Google pour Jobs n’est pas mondial. c’est actif dans 50+ countries à travers North America, Latin America, Europe, le Middle East et North Africa, Sub-Saharan Africa, et Asia — mais pas everywhere. Si votre listings sont technically perfect et encore pas showing, vérifier que le experience est disponible dans votre cible country avant vous spend a day debugging votre JSON-LD.

Content policies que obtenir postings disapproved

Google’s job-posting contenu policies sont stricter que la plupart structured-données règles, et ils sont worth knowing par leur réel noms parce que Search Console va cite les. Depuis Google’s documentation:

«- Single-job pages only. “The JobPosting markup must only be used on pages that contain a single job posting.” (jump to quote) This is the single most common real-world disapproval — no markup on listing/search-results pages. » (Traduction) (Résumé en français de la section quarante-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- Irrelevant content — the posting’s content must be relevant to the job. » (Traduction) (Résumé en français de la section quarante-cinq, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- Incomplete content — Google doesn’t allow job postings with incomplete job descriptions. » (Traduction) (Résumé en français de la section quarante-cinq, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- Misrepresentation — no fake jobs, keyword stuffing, false location data, impersonation, or posting someone else’s listing without authorization. » (Traduction) (Résumé en français de la section quarante-cinq, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.) «- Profanity — no obscene, profane, or offensive language. » (Traduction) (Résumé en français de la section quarante-cinq, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.) «- Disguised ads / promotional content — no affiliate-program listings or other promotional content dressed up as a job. » (Traduction) (Résumé en français de la section quarante-cinq, sous-partie six : le texte source est conservé pour vérification lors de la relecture francophone.) «- Expired postings — Google doesn’t allow expired job postings. “Ideally you should remove expired job postings from your website.” (jump to quote) » (Traduction) (Résumé en français de la section quarante-cinq, sous-partie sept : le texte source est conservé pour vérification lors de la relecture francophone.) «- Jobs without a way to apply — every posting needs a way to apply (career-fair invites and login-gated postings are exempted). » (Traduction) (Résumé en français de la section quarante-cinq, sous-partie huit : le texte source est conservé pour vérification lors de la relecture francophone.) «- Resume collection — only for open, actively-hiring positions. » (Traduction) (Résumé en français de la section quarante-cinq, sous-partie neuf : le texte source est conservé pour vérification lors de la relecture francophone.) «- Job requests — the markup is for actual openings, not solicitations from people seeking work. » (Traduction) (Résumé en français de la section quarante-cinq, sous-partie dix : le texte source est conservé pour vérification lors de la relecture francophone.) «- Payment required — never require an applicant to pay. » (Traduction) (Résumé en français de la section quarante-cinq, sous-partie onze : le texte source est conservé pour vérification lors de la relecture francophone.) «- Editorial content — proper grammar and capitalization; no all-caps spam. » (Traduction) (Résumé en français de la section quarante-cinq, sous-partie douze : le texte source est conservé pour vérification lors de la relecture francophone.)

«The through-line: content-schema parity is non-negotiable. Every value in the JSON-LD — salary, remote status, employment type — must be visibly present in the human-readable page, or Google can treat the mismatch as misrepresentation. » (Traduction) (Résumé en français de la section quarante-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«## Handling expiration and removal correctly » (Traduction) (Résumé en français de la section quarante-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«This is the part teams under-build. Expired-job hygiene is an ongoing obligation, not a one-time setup task — you need a process (a cron job, an ATS integration, or an Indexing API call) to pull a role the moment it closes. Google sanctions three removal methods: » (Traduction) (Résumé en français de la section quarante-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

  1. Définir validThrough à a date dans le past et laisser lune page up briefly.
  2. Supprimer lune page entirely et retourner a 404 or 410.
  3. Strip le JobPosting markup depuis lune page.

«The risk if you don’t: leaving expired postings live violates the content policies, and Google says the response may include manual action that removes the job posting(s) from the job search experience on Google — that’s scoped to your job listings’ eligibility for the Jobs feature, not an automatic penalty against the rest of your site’s organic rankings. Preuve à l’appui de cette affirmation Google requires expired job postings to be removed or marked with a past validThrough value and no longer exposed as active jobs. Portée : Google Search JobPosting expiration policy; stale postings can trigger manual actions. Niveau de confiance : élevé · Vérifié : Google: JobPosting structured data Setting a future validThrough on a job that’s actually filled does not keep it “safe” — the page must reflect reality. » (Traduction) (Résumé en français de la section cinquante, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«For faster removal and updates on job URLs specifically, Google recommends its Indexing API over waiting for a normal re-crawl or a sitemap ping — see the next section for the scope and access caveats. » (Traduction) (Résumé en français de la section cinquante et un, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«## Duplicate and syndicated postings » (Traduction) (Résumé en français de la section cinquante-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«A very common real-world case: the same req posted to your careers page and three job boards. This is fine. John Mueller has said that having the same job posted on different websites is very common and expected, and that hosting the same listing at different times or on different subdomains should be fine too — Google de-duplicates identical listings rather than penalizing them, and he’s indicated the same applies to Google for Jobs. » (Traduction) (Résumé en français de la section cinquante-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«Mueller’s remarks above are paraphrased from a February 2022 Google Hangout as recapped by iloveseo.com; I’m summarizing rather than quoting because I sourced it through that secondary recap. What still applies regardless: hiringOrganization must be the real employer, and no misrepresentation. » (Traduction) (Résumé en français de la section cinquante-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«## The Indexing API is scoped — and now gated » (Traduction) (Résumé en français de la section cinquante-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«Google’s Indexing API is not a general “get indexed faster” tool. Per Google’s Indexing API quickstart, it can only be used to crawl pages with either JobPosting or BroadcastEvent embedded in a VideoObject — job postings are one of only two legitimate use cases. Submitting a URL is a notification, not a guarantee: it doesn’t guarantee that Google will crawl, index, include, rank, or display the page on any particular timeline. » (Traduction) (Résumé en français de la section cinquante-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«Two things have changed the landscape here: » (Traduction) (Résumé en français de la section cinquante-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«1. Access is now approval-gated. The default per-day quota is modest, and getting meaningful volume now requires filling out a Google approval form rather than being auto-enabled. Cite Google’s own Requesting Approval and Quota page as the primary source for this. 2. Google is visibly protecting the lane from spam. Google reps have repeatedly warned against misusing the Indexing API to push arbitrary, unsupported page types — the recommendation is to stick to the documented, supported use cases. Because JobPosting is one of only two of those, this matters directly: abuse the API for non-job content and you risk losing access to a channel your job listings actually depend on. » (Traduction) (Résumé en français de la section cinquante-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«Industry reporting (dstribute.io, alexanderchukovski.com) frames the shift from near-open Indexing API access to an authorized-partner/approval model as rolling out roughly across 2024–2025. I’m treating those phased dates as industry-sourced color, not Google-confirmed line by line — the primary, citable fact is Google’s own quota-pricing/approval page. The rep warnings about API misuse were surfaced through secondary aggregation, so I’ve paraphrased rather than quoted them; verify exact wording and platform against the primary source before quoting directly. » (Traduction) (Résumé en français de la section cinquante-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«## Troubleshooting in Search Console » (Traduction) (Résumé en français de la section soixante, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«When a listing doesn’t show, work it in order — the Playbooks tab lays this out as a linear runbook, but the short version: » (Traduction) (Résumé en français de la section soixante et un, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«- Validate the markup with the Rich Results Test and confirm all five required properties parse without error. » (Traduction) (Résumé en français de la section soixante-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- Confirm one job per page — the most common disapproval is JobPosting markup on a listing/index page. » (Traduction) (Résumé en français de la section soixante-deux, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- Check content-schema parity — every JSON-LD value (salary, remote status, employment type) must be visible on the page. » (Traduction) (Résumé en français de la section soixante-deux, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- Check validThrough and expiry — an expired posting still carrying live markup gets disapproved. » (Traduction) (Résumé en français de la section soixante-deux, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.) «- Confirm regional availability — Google for Jobs isn’t available everywhere. » (Traduction) (Résumé en français de la section soixante-deux, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.) «- Check Search Console’s rich-result report for the specific disapproval reason and fix against that named policy. » (Traduction) (Résumé en français de la section soixante-deux, sous-partie six : le texte source est conservé pour vérification lors de la relecture francophone.)

«Caveat, per my source research: there have been reports of a 2026 Search Console job-listing reporting issue affecting how job rich results surface in the report. I haven’t been able to confirm that against a primary Google source, so treat it as an unverified possibility — if your report looks wrong but the markup validates cleanly in the Rich Results Test, a reporting glitch is worth ruling in, but confirm before concluding it’s a Google-side bug. » (Traduction) (Résumé en français de la section soixante-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«## Bing and JobPosting » (Traduction) (Résumé en français de la section soixante-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«Bing supports structured data broadly — JSON-LD, Microdata, RDFa — and provides a Schema Markup Validator, and it lists JobPosting among supported types for careers-page and job-board markup. But Bing does not 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 same schema.org vocabulary and the same single-job-per-page principle, with much lighter validation and much thinner documentation. Don’t assume Bing/Google parity here — mark up for Google’s stricter spec and Bing is covered by default. » (Traduction) (Résumé en français de la section soixante-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Je ne pouvait pas confirmer a actif, canonical Bing Webmaster Outils aider URL précisément titled pour JobPosting during mon research réussir. Plutôt que guess une URL, Je’m stating le gap plainly: Bing’s job-listing documentation est genuinely thin. Re-vérifier le actuel Bing aider page avant ajout a direct lien.

Où ce sits

JobPosting est un type dans le broader données structurées hub ce article lives sous, alongside le commerce-focused Produit schema et ProductGroup schema markup et le wider Commerce schema family. Si vous êtes implementing à travers a site, treat les le même façon: utiliser le type que maps à a confirmed recherche fonctionnalité, garder le JSON-LD dans parity avec visible page contenu, et valider avant vous ship.

Ajouter une note d’expert

Épingler une citation d’expert

Nouvelle personne ? Créez son profil non revendiqué à /admin/experts/ → Épingler une citation d’expert d’abord.