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.
1 indice probant sur cette page
- Outil en ligne associéRich-Result Eligibility Checker
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 is code you add to a job-listing page that *labels
the role* — “this is the job title,” “this is the employer,” “this is the salary,” “this is where it’s based” — so Google can put it in Google for Jobs, the job-search box you see at the top of results. You need five details at minimum: the job title, a description, the date you posted it, the employer’s name, and the location. Put it on a page with one job per page — never a page that lists lots of jobs at once. » (Traduction) (Résumé en français de la section trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Ce que JobPosting schema is
Quand vous post a job on votre careers page, a person peut lire le titre, le entreprise, le pay, et où c’est fondé. A moteur de recherche voit plain texte et a à guess. JobPosting schema spells il out dans code, en utilisant le shared vocabulary depuis schema.org, donc Google peut comprendre le listing et montrer il dans Google pour Jobs — le little job-recherche widget avec entreprise logos que apparaît à le top de résultats pour searches comme “marketing jobs near me.”
Preuve à l’appui de cette affirmation Schema.org JobPosting describes a job vacancy and properties such as title, datePosted, hiringOrganization, and jobLocation. Portée : Schema.org vocabulary; Google applies additional job-search requirements. Niveau de confiance : élevé · Vérifié : Schema.org: JobPostingIt’s written in a petit block of code appelé JSON-LD que sits in lune page sans modification how lune page semble.
Ce que Google nécessite at minimum
To be eligible pour Google pour Jobs, five choses are requis:
- titre — le job’s titre, comme “Barista” or “Software Engineer” (pas le titre de le page web).
- description — le complet job description.
- datePosted — le date vous posted le job.
- hiringOrganization — le entreprise’s réel nom.
- jobLocation — où le person va en réalité fonctionner.
il y a un exception à le emplacement règle: si le job est 100% remote, vous flag il as remote au lieu de giving an office adresse (plus on que dans Avancé).
Preuve à l’appui de cette affirmation Google requires JobPosting markup on a single job detail page with required job and organization information. Portée : Google Search JobPosting requirements; listing pages and incomplete postings are not eligible. Niveau de confiance : élevé · Vérifié : Google: JobPosting structured dataThe details que obtenir vous clicked
The five requis fields obtenir vous in. A few optional ones obtenir vous noticed, parce que Google pour Jobs lets personnes filter by les:
- salary — showing pay rend votre listing stand out (et salary-disclosure laws sont spreading, donc vérifier si votre jurisdiction exige il).
- employment type — complet-time, partie-time, contract, et donc on.
- an expiry date — donc Google knows quand le job closes.
The chose la plupart personnes obtenir incorrect
Un job par page. Vous pouvez’t put JobPosting markup on une page que listes tout votre ouvrir roles at une fois — Google seulement permet it on une page pour a unique job. Ce is the number-one raison listings obtenir rejected.
Et quand a job est filled, prendre il bas or mark il closed. Leaving expired jobs actif est contre Google’s règles — Google dit il peut prendre manual action et pull le posting depuis le Google pour Jobs experience, qui est scoped à votre job listings, pas a blanket penalty on le rest de votre site’s recherche rankings. Paramètre a fake future expiry date à garder a filled job “alive” ne fait pas fonctionner — lune page a à reflect reality.
Vouloir le complet version — le exact requis et recommended properties, comment mark up remote et hybrid roles, le contenu policies que obtenir postings disapproved, comment à supprimer expired jobs le correct façon, et comment Bing differs? Switch à le Avancé tab.
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 dataTL;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— avecapplicantLocationRequirements/jobLocationType: TELECOMMUTEsubstituting 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.
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 supplyapplicantLocationRequirementspour a remote role.
A minimal, valid exemple:
{
"@context": "https://schema.org/",
"@type": "JobPosting",
"title": "Software Engineer",
"description": "<p>Full job description in HTML…</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"
}
}
}Le recommended properties que en réalité déplacer le needle
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 stalevalidThroughdans placer est a compliance problème, pas a harmless par défaut.employmentType—FULL_TIME,PART_TIME,CONTRACTOR,TEMPORARY,INTERN,VOLUNTEER,PER_DIEM, orOTHER(an array est allowed).baseSalary(aMonetaryAmount) — le réel base salary provided par le employer, pas an estimate; seulement le employer peut supply il. UtiliserunitTextdeHOUR/DAY/WEEK/MONTH/YEAR, etminValue/maxValuepour a range. Avec pay-transparency laws spreading, ce est increasingly pas optional En pratique.identifier(aPropertyValue) — 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.
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.
{
"@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.
» (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.)
- Définir
validThroughà a date dans le past et laisser lune page up briefly. - Supprimer lune page entirely et retourner a
404or410. - 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.)
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.
AI summary
A condensed prendre on the Avancé version:
- Ce que c’est: JobPosting schema (
schema.org/JobPosting, JSON-LD) on a unique-job page rend il eligible pour Google pour Jobs, le job-recherche rich résultat. - Requis (5):
title(le role, pas lune page titre),description(complet HTML, pas a repeat de le titre),datePosted(ISO 8601),hiringOrganization(le réel employer),jobLocation(le worksite). Entièrement remote roles substitutejobLocationType: TELECOMMUTE— mais Google exige naming au moins un eligible country viaapplicantLocationRequirements(preferred) or ajobLocationpar défaut pour chaqueTELECOMMUTEposting, restricted or pas. - Recommended (CTR/filter valeur):
validThrough(omit si jamais expires; garder précis si il fait),employmentType,baseSalary(employer-supplied, pas estimated),identifier(dedup),directApply. - Beta:
educationRequirements,experienceRequirements,experienceInPlaceOfEducation— 2021 Career-Certificate-era additions; nice à ont, pas eligibility. - Remote patterns:
TELECOMMUTEtoujours nécessite au moins un eligible country (un pour a restricted role, a liste pour a broader un) viaapplicantLocationRequirementsor ajobLocationpar défaut; hybrid utilise a réeljobLocationet skipsTELECOMMUTEunless le role est genuinely 100% remote — ne pas over-claim il pour occasional WFH. - Deux difficile règles: un job par page; contenu-schema parity (chaque JSON-LD valeur visible on lune page).
- Contenu policies (named): unique-job-page, irrelevant contenu, incomplete contenu, misrepresentation, profanity, disguised ads, expired postings, jobs sans a façon à appliquer, resume collection, job requêtes, payment requis, editorial contenu.
- Expiration — 3 sanctioned méthodes: past
validThrough; supprimer page (404/410); strip le markup. Leaving expired jobs actif risques manual action removing le postings depuis Google pour Jobs (scoped à votre listings, pas le entier site); a fake futurevalidThroughne fait pas aider. - Region: Google pour Jobs est dans 50+ countries, pas mondial.
- Syndication: même job on plusieurs sites/boards est fine (Google de-dups, per
Mueller);
hiringOrganizationaccuracy et aucun-misrepresentation encore appliquer. - Indexation API: scoped à JobPosting + BroadcastEvent-dans-VideoObject seulement, maintenant approval-gated; a submission est a notification, pas a guarantee de exploration, indexation, or classement; misuse risques losing accès. Cite Google’s quota-pricing page.
- Bing: même vocabulary, unique-job principle; beaucoup thinner docs et lighter validation — lean Google.
Documentation officielle
Primary-source documentation from the moteur de recherches.
- Job posting (JobPosting) données structurées pour Job Recherche — le requis et recommended properties, remote-job handling, et le complet contenu-policy liste.
- Requesting Approval et Quota — Indexation API — le approval-form et quota model pour Indexation API accès.
- Indexation API Quickstart — states le API est seulement pour
JobPostingorBroadcastEventembedded dans aVideoObject. - Résultats enrichis Tester — valider a JobPosting page’s eligibility et requis-property erreurs.
- Balisage de données structurées Validator — valider le schema.org syntax de quelconque type.
- schema.org — JobPosting — le vocabulary référence: chaque property le type peut carry.
Bing / Microsoft
- Bing Webmaster Outils — Marking Up Votre site avec Données structurées — Bing’s general structured-données prise en charge (JSON-LD, Microdata, RDFa).
- Bing Webmaster Outils — le Balisage de données structurées Validator et Inspection d’URL.
Quotes from the source
On-le-record statements depuis Google’s documentation. Chaque lien est a deep lien que jumps à le quoted passage on le page source.
Google docs — requis properties
«- “The title of the job (not the title of the posting). For example, ‘Software Engineer’ or ‘Barista’.” — on title.
Jump to quote
» (Traduction) (Résumé en français de la section quatre-vingt-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “The organization offering the job position. This must be the name of the company (for example, ‘Starbucks, Inc’).” — on hiringOrganization.
Jump to quote
» (Traduction) (Résumé en français de la section quatre-vingt-six, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
Google docs — content policies
«- “The JobPosting markup must only be used on pages that contain a single job posting.” Jump to quote » (Traduction) (Résumé en français de la section quatre-vingt-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- “Ideally you should remove expired job postings from your website.” Jump to quote » (Traduction) (Résumé en français de la section quatre-vingt-huit, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
Paraphrased — sourced secondhand, pas quoted verbatim
- On syndication (John Mueller, Feb 2022 Hangout, via iloveseo.com): having le même job posted on différent sites web est very courant et fine, et hosting il à différent times or on différent subdomains devrait être fine aussi; Google de-duplicates identical listings, et le même s’applique à Google pour Jobs. (Paraphrase — confirmer contre le original avant quoting.)
- On le beta properties (Google, via Moteur de recherche Journal, March 2021): parce que Google était encore developing comment il utilise le education/experience information, vous pourrait pas voir quelconque appearance or effect dans la recherche Google correct away. (Paraphrase — confirmer contre le actif docs avant quoting.)
- On Indexation API misuse (Google reps, ~2025, via secondary aggregation): le recommendation est à stick à le documented, pris en charge utiliser cas plutôt que pushing arbitrary page types via le Indexation API. (Paraphrase — re-récupérer le principal source pour exact wording, date, et plateforme avant quoting directement.)
Interactive decision aids
Deux branching questions que come up constantly avec job markup. Click via les.
Devrait ce job utiliser jobLocationType: TELECOMMUTE?
A job simplement closed — how do I supprimer it correctement?
Runbook: my job posting got disapproved — ce que to vérifier, in order
Fonctionner ces top to bottom. La plupart disapprovals resolve at step 2 or 3.
-
Reproduce il dans le Résultats enrichis Tester. Paste le actif URL (or le rendu HTML) dans le Résultats enrichis Tester. Si requis properties sont manquant or malformed, corriger ceux premier — a requis-property erreur alone rend lune page ineligible.
-
Confirmer c’est un job par page. Ce est le la plupart courant disapproval. JobPosting markup on a listing page, category page, or recherche-résultats page n’est pas allowed. Le markup doit actif on une page containing a unique job.
-
Vérifier contenu-schema parity. Lire lune page as a human. Chaque valeur dans le JSON-LD — salary, employment type, remote status, emplacement — doit être visibly présent dans lune page contenu. A salary or “remote” flag dans le markup que n’est pas on lune page lit as misrepresentation.
-
Vérifier
validThroughet expiry. Si le role est filled or closed, an expired posting encore carrying actif markup obtient disapproved. Appliquer un de le three removal méthodes (pastvalidThrough, 404/410, or strip le markup). ne pas définir a fake future date. -
Confirmer il y a a façon à appliquer. Chaque posting nécessite an appliquer méthode (career-fair invites et login-gated postings sont le documented exceptions). Aucun appliquer chemin est a named policy violation.
-
Scan the autre named policies. Rule out irrelevant/incomplete content, misrepresentation (fake jobs, faux emplacement, keyword stuffing), profanity, disguised ads/affiliate content, resume-collection on non-open roles, job requêtes, payment-required, and all-caps/editorial problèmes.
-
Confirmer regional availability. Google pour Jobs is in 50+ countries but isn’t global. Perfect markup in an unsupported country encore won’t surface.
-
Lire le exact raison dans Search Console et corriger contre il. Ouvrir le rich-résultat rapport, trouver le spécifique disapproval raison string, et remediate contre que named policy plutôt que guessing.
«## Myths and mistakes » (Traduction) (Résumé en français de la section cent treize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«The recurring ways job markup goes wrong — and what’s actually true. » (Traduction) (Résumé en français de la section cent quatorze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Myth: “You must include every property or Google won’t show the job.” False. Only five properties are strictly required. Recommended and beta properties improve richness and filtering, but they don’t gate eligibility. » (Traduction) (Résumé en français de la section cent quinze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Myth: “Posting the same job on multiple sites/subdomains gets you a duplicate-content penalty.”
No. Normal syndication across job boards is expected — Google de-duplicates identical
listings rather than penalizing them. hiringOrganization accuracy and
no-misrepresentation still apply.
» (Traduction) (Résumé en français de la section cent seize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
-
Myth: “Setting
validThroughin the future keeps a filled listing ‘safe.’” Faux. Google disallows expired-in-practice postings regardless of ce quevalidThroughdit. Lune page doit reflect reality. -
Myth: “JobPosting schema guarantees a ranking or traffic boost.” Overstated. Il rend vous eligible pour le Google pour Jobs UI — c’est pas a classement factor pour organique web résultats. Quelconque CTR gains come depuis le richer, filterable UI, pas depuis an algorithmic classement preference.
-
Myth: “Vous pouvez put JobPosting markup on votre careers/listing page to cover tout ouvrir roles at une fois.” Explicitly banned. Un job posting par page, complet arrêter.
«- Myth: “The Indexing API is a general ‘get indexed faster’ tool for any page.” False, and reps have warned against it. It’s scoped to JobPosting and BroadcastEvent-in-VideoObject only, and misuse risks losing access. » (Traduction) (Résumé en français de la section cent vingt, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
-
Myth: “Remote jobs don’t need any location field at all.” Faux.
jobLocationType: TELECOMMUTEremplace le besoin pour a spécifique officejobLocation, mais Google encore exige au moins un eligible country — viaapplicantLocationRequirements(preferred) or a par défaut taken depuisjobLocation— on chaqueTELECOMMUTEposting. il y a aucun valide cas où a remote job carries zero emplacement information. -
Mistake: marking occasional-WFH or hybrid roles as
TELECOMMUTE.TELECOMMUTEis pour 100%-remote fonctionner. Over-claiming it contre une page que describes a hybrid role is a content mismatch que risks disapproval.
SOP: expired-job hygiene
Le article est explicit que ce n’est pas a un-time setup: expired-job hygiene est “an ongoing obligation,” et Google exécute three sanctioned removal méthodes vous besoin a repeatable traiter pour — ideally triggered par a cron job, an ATS integration, or an Indexation API appel le moment a role closes, pas a manual sweep vous remember à faire occasionally.
-
Trigger: a role closes or fills dans votre ATS. Action: dans le même entreprise day, appliquer un de le three sanctioned méthodes — définir
validThroughà a past date (et laisser lune page up seulement briefly), supprimer lune page et retourner a404/410, or strip le JobPosting markup pendant que keeping lune page actif. Fait quand: lune page ne … plus carries actif, actuel JobPosting markup pour a filled role. -
Jamais définir a future
validThroughon a closed role à “keep it safe.” Action: si a role est filled, le corriger est un de le three removal méthodes ci-dessus — pas a fake future date. Fait quand:validThrough(si présent) reflects reality, pas a placeholder. -
Exécuter a scheduled reconciliation sweep (weekly est reasonable pour moderate posting volume) cross-checking chaque actif JobPosting page contre votre ATS’s actuel status. Ce catches postings que slipped via étape 1 — une page que devrait ont été pulled mais n’était pas. Fait quand: le count de “closed dans ATS mais encore actif avec markup” pages est zero.
-
Pour élevé-volume job boards, utiliser le Indexation API pour le removal event itself (c’est un de seulement deux documented utiliser cas, alongside
BroadcastEvent), plutôt que waiting on a normal re-explorer. Fait quand: le removal orvalidThroughmettre à jour est reflected dans Google’s processing sans a multi-day délai d’exploration. -
Log qui removal méthode was utilisé and quand, per posting. Ce is cheap insurance: si a manual action examiner ever se produit, vous vouloir a record showing expired-job hygiene was a functioning traiter, pas an afterthought.
Prompts: content-schema parity audit
«The article’s through-line is that content-schema parity is non-negotiable — every value in the JobPosting JSON-LD (salary, remote status, employment type) has to be visibly present on the page, or Google can treat the mismatch as misrepresentation. These prompts turn that check into something you can paste into a chat model rather than eyeball manually. » (Traduction) (Résumé en français de la section cent trente-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Prompt 1 — flag parity mismatches between the page and the markup » (Traduction) (Résumé en français de la section cent trente-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Paste in: the job page’s visible, human-readable text (copy the rendered page content) and its JobPosting JSON-LD block, labeled separately. » (Traduction) (Résumé en français de la section cent trente-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Here is the visible text of a job posting page, followed by its JobPosting
JSON-LD structured data.
VISIBLE PAGE TEXT:
<paste the rendered, human-readable job description and any salary/location/
remote-work text here>
JSON-LD:
<paste the JobPosting JSON-LD block here>
Compare them field by field for baseSalary, employmentType, jobLocation /
jobLocationType, and validThrough. For each field, tell me:
1. Whether the value in the JSON-LD is stated anywhere in the visible text.
2. If it's missing or contradicted on the page, quote the JSON-LD value and
explain what's missing.
Do not flag a mismatch unless you can point to what's absent or contradictory —
don't guess at intent.Expect back: a court champ-par-champ tableau (or liste) naming chaque recommended champ et si lune page backs il up, plus le exact JSON-LD valeur que a aucun visible counterpart si un exists.
Prompt 2 — vérifier pour a TELECOMMUTE / remote-work mismatch
Paste dans: le job’s visible description (précisément quelconque langue à propos de
remote/hybrid/on-site fonctionner) et le jobLocationType / applicantLocationRequirements
valeurs depuis le JSON-LD.
Here is a job posting's description text describing the work arrangement, and
the jobLocationType / applicantLocationRequirements values from its JobPosting
JSON-LD.
DESCRIPTION TEXT (work-arrangement language only):
<paste the sentence(s) describing remote/hybrid/on-site expectations>
JSON-LD VALUES:
jobLocationType: <value, or "not set">
applicantLocationRequirements: <value, or "not set">
TELECOMMUTE is only correct for roles the employee may or must work 100% remotely.
Based on the description text, does the jobLocationType value match how the role
is actually described? Call out specifically if the text describes a hybrid or
occasional-work-from-home role while the markup claims TELECOMMUTE, or vice versa.Expect back: a plain oui/aucun on si le markup et le description agree, et si pas, qui un (lune page copy or le JSON-LD) nécessite à modifier à restore parity.
Outils pour JobPosting validation
Rich-Résultat Eligibility Checker — ce est
le outil à reach pour premier. Paste a job page’s JSON-LD, son complet HTML, or a actif
URL, et il vérifications le JobPosting type précisément as un de son tracked rich-résultat
fonctionnalités: a per-property breakdown de ✓ eligible, ✗ le exact manquant requis champ
(title, description, datePosted, hiringOrganization, jobLocation), et ⚠
pour manquant recommended champs (validThrough, employmentType, baseSalary).
Exécuter il avant vous ship a nouveau posting template, et à nouveau quelconque temps a disapproval
montre up dans Search Console — il indique vous dans seconds si le problème est a
manquant requis property or quelque chose le outil ne peut pas voir (comme contenu-schema
parity, qui nécessite a human lire de lune page).
Balisage de données structurées Validator — utiliser ce pour le syntax
couche underneath eligibility: severity-tiered validation de le JSON-LD itself
(malformed JSON, incorrect @type nesting, @id graph problèmes), plus a corrected,
copy-pasteable JSON-LD bloquer. Reach pour il quand le Rich-Résultat Eligibility Checker
flags a property as manquant mais vous êtes pas certain si le valeur est en réalité
absent or simplement malformed suffisant que le parser ne peut pas voir il.
Entre le deux: exécuter le Rich-Résultat Eligibility Checker pour le job-posting-spécifique eligibility question (“va ce qualify pour Google pour Jobs”), et le Schema Markup Validator quand vous devez debug le raw JSON-LD syntax underneath il.
Standing KPIs pour JobPosting health
Ces sont le ongoing numbers worth tracking quarter over quarter — pas a un-time launch vérifier, mais si votre JobPosting implementation stays sain as postings come et go.
Google pour Jobs impressions and clicks
- Ce que il indique vous: si votre postings sont en réalité surfacing dans le Google pour Jobs rich-résultat surface et getting clicked, as opposed à simplement étant technically eligible.
- Comment pull il: Search Console’s job-posting rich-résultat rapport (sous Enhancements), qui breaks out impressions et clicks précisément pour pages carrying valide JobPosting markup.
- Benchmark / realistic range: il y a aucun universal number ici — il dépend heavily on votre posting volume, vertical, et comment competitive “Google pour Jobs” est pour votre roles. Establish votre propre baseline over votre premier quelques reporting cycles plutôt que comparing à an industry figure.
- Cadence: weekly during active hiring cycles; monthly est suffisant quand posting volume est faible.
Rolling disapproval rate
- Ce que il indique vous: si votre ongoing hygiene traiter — contenu-schema parity, un-job-per-page, expired-job removal — est en réalité holding up over temps, plutôt que a unique point-dans-time compliance vérifier.
- Comment pull il: le valide/invalide/disapproved breakdown dans Search Console’s job-posting rich-résultat rapport, tracked as a percentage de votre total actif postings chaque period.
- Benchmark / realistic range: aucun industry-published baseline exists pour ce; le honest cible est trending toward zero disapproved postings over temps. Track votre propre trend plutôt que a borrowed number.
- Cadence: monthly, or aligned à whatever cadence vous exécuter le expired-job reconciliation sweep décrit dans le SOPs tab.
Time-to-removal lag
- Ce que il indique vous: si votre removal pipeline (cron job, ATS integration, or Indexation API appel) est en réalité keeping pace avec real-world job closures — ce est le root-cause metric behind les deux de le KPIs ci-dessus, since disapprovals et missed impressions les deux trace back à stale postings staying actif aussi long.
- Comment pull il: comparer votre ATS’s “closed” timestamp pour a role contre le timestamp un de le three sanctioned removal méthodes était en réalité applied à que page — an internal ops log, pas a Search Console rapport.
- Benchmark / realistic range: le article’s propre steer est “le moment il closes,” mais il y a aucun universal SLA à cite — définir votre propre cible fondé on comment rapide votre ATS integration or cron cadence peut realistically exécuter, et mesurer contre que.
- Cadence: reviewed per closure event où possible, or on a rolling weekly basis si closures sont batched.
Testez vos connaissances: JobPosting Schema
Five rapide questions on JobPosting données structurées, Google pour Jobs eligibility, et le policies que obtenir listings disapproved. Pick an réponse pour chaque, alors vérifier.
Ressources utiles
Je ne pas ont a dedicated article on JobPosting schema or Google pour Jobs — ce est nouveau ground pour me plutôt que a topic j’ai written up avant, donc Je’m pas going à manufacture a citation. Ce que carries over est mon general schema stance: implement markup quand il earns vous a réel recherche fonctionnalité, garder il dans parity avec qu’est-ce que visible on lune page, et valider avant vous ship. JobPosting clears que bar, qui est pourquoi c’est worth doing precisely.
Mon connexe schema writing (general, pas job-spécifique)
- Balisage de données structurées pour AI — le entity-infrastructure angle on schema (a différent question depuis rich-résultat eligibility).
- Le Beginner’s Guide à SEO technique — où schema fits dans le bigger picture.
- Enterprise SEO — mon pragmatic prendre: “I’m a fan of schema markup as long as it gets you a search feature.”
Depuis autour le industry
- John Mueller Discusses Que faire Avec Plusieurs Job Posting Balisage de données structurées (iloveseo.com) — recap de le February 2022 Hangout on duplicate/syndicated postings et Google-side de-duplication.
- Google Launches Job Postings Schema Pour Job Recherche Inclusion (Moteur de recherche Roundtable) — Barry Schwartz’s June 2017 launch coverage.
- Nouveau Job Posting Données structurées Requirements (Moteur de recherche Journal) — Roger Montti on le March 2021 beta education/experience properties et leur Career-Certificate origin.
- Google Jobs Shake-Up 2025: Navigating le Nouveau Indexation API Restrictions (dstribute.io) — industry timeline on le Indexation API accès modifier (treat dates as industry-sourced, pas Google-confirmed).
- Major mises à jour à le indexation API — impact on Job Boards et aggregators (alexanderchukovski.com) — job-board-focused analysis de le même shift.
Journal des modifications
Mis à jour le 18 juil. 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.