Introductie
Google for Jobs leest vacatures via structured data: een JSON-LD-blok met @type: JobPosting op elke vacaturepagina.
jobpost.tech genereert dit automatisch vanuit het admin-dashboard en valideert het tegen dezelfde regels als deze gids.
Plaats één JobPosting per URL. Meerdere vacatures op één pagina verwarren crawlers. Gebruik de
JobPosting checker om externe pagina’s te testen, of bekijk
/vacatures/{slug}/schema op een jobpost.tech demo-site.
{
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "…",
"description": "<p>…</p>",
"datePosted": "2026-03-15",
"hiringOrganization": { "@type": "Organization", "name": "…" },
"jobLocation": {
"@type": "Place",
"address": { "@type": "PostalAddress", "addressCountry": "NL", "addressLocality": "…" }
}
}
Basisvelden
De kern van elke JobPosting: type, titel, beschrijving en publicatiedata. Zonder deze velden indexeert Google for Jobs de vacature niet.
@context
JSON-LD context. Gebruik altijd https://schema.org zodat crawlers weten welk vocabulaire van toepassing is.
- Vaste waarde: https://schema.org
- Plaats in een <script type="application/ld+json"> blok op de vacaturepagina.
"@context": "https://schema.org"
@type
Het Schema.org type van het object. Moet exact JobPosting zijn.
- Verplicht voor Google for Jobs.
- Geen array of varianten — één string JobPosting.
"@type": "JobPosting"
title
De functietitel zoals kandidaten die verwachten. Alleen de titel — geen bedrijfsnaam, salaris, datum of call-to-action.
- Verplicht. Mag niet leeg zijn.
- Geen salaris (€), datums (2024-01-18), of teksten als “Solliciteer nu”.
- Vermijd spammy tekens (!!, **, ##).
- Goed: “Hovenier”, “Verkoopmedewerker (32–40 uur)”.
"title": "Coördinator service en onderhoud"
description
Volledige vacaturetekst in HTML. Beschrijft taken, eisen en context. Mag niet identiek zijn aan title.
- Verplicht. Moet HTML zijn: gebruik <p>, <ul>, <li>, <br> of vergelijkbaar.
- Platte tekst zonder HTML-tags wordt afgekeurd.
- Mag niet letterlijk gelijk zijn aan title (Google duplicate check).
- Schrijf de volledige vacature; geen doorverwijzing alleen naar PDF.
"description": "<p>Als coördinator service en onderhoud ben je verantwoordelijk voor...</p><ul><li>Plannen van onderhoud</li></ul>"
datePosted
Datum waarop de vacature online is gezet. Google gebruikt dit voor versheid en expiratie-logica.
- Verplicht. Formaat: YYYY-MM-DD of volledige ISO 8601 datetime.
- Moet de echte publicatiedatum zijn, niet in de toekomst.
- Bij verlenging: update datePosted niet tenzij het een nieuwe publicatieronde is.
"datePosted": "2026-03-15"
validThrough
Sluitingsdatum of vervaldatum van de vacature. Na deze datum kan Google de posting als verlopen behandelen.
- Sterk aanbevolen — voorkomt dat oude vacatures blijven ranken.
- ISO 8601 datum of datetime.
- Datum in het verleden geeft een waarschuwing in jobpost.tech.
"validThrough": "2026-06-30"
url
Canonieke URL van deze vacaturepagina. jobpost.tech zet dit altijd op de live detail-URL.
- Niet verplicht voor Google, wel best practice voor deduplicatie.
- Moet de pagina zijn waar de kandidaat solliciteert of de volledige vacature leest.
- Gebruik HTTPS en geen tracking-parameters als canonieke URL.
"url": "https://www.example.nl/vacatures/hovenier"
Werkgever (hiringOrganization)
Wie de vacature aanbiedt. Google koppelt elke posting aan één Organization-object met minimaal een naam.
hiringOrganization
Het bedrijf of de organisatie die wert. Bevat altijd @type Organization en name.
- Verplicht object — geen platte string.
- name is het enige verplichte subveld voor Google.
hiringOrganization.@type
Type van de organisatie. Standaard Organization.
- Waarde: Organization
"@type": "Organization"
hiringOrganization.name
Officiële bedrijfsnaam zoals die op Google en in vacatures verschijnt.
- Verplicht. Lege string = fout.
- Gebruik de merknaam, niet alleen een afdeling (“HR afdeling”).
"name": "Reinier Looij Groenbeheer"
hiringOrganization.sameAs
Link naar het officiële bedrijfsprofiel: website, LinkedIn of Google Business Profile.
- Helpt Google de juiste entiteit te koppelen.
- Gebruik één stabiele URL (meestal de homepage).
"sameAs": "https://www.reinierlooij.nl"
hiringOrganization.logo
Logo van de werkgever. Wordt soms getoond in rich results.
- Aanbevolen. Publiek bereikbare HTTPS-URL.
- Vierkant of breedbeeld; minimaal ~112×112 px.
- Geen data-URI of login-beschermde URL.
"logo": "https://www.example.nl/logo.png"
Locatie
Waar het werk plaatsvindt, of dat het remote is. Google onderscheidt fysieke locaties (jobLocation) van thuiswerk (jobLocationType TELECOMMUTE).
jobLocation
Fysieke werklocatie als Place-object met PostalAddress. Verplicht voor on-site en hybride vacatures.
- Verplicht wanneer jobLocationType niet TELECOMMUTE is.
- Minimaal addressCountry verplicht als jobLocation aanwezig is.
- addressLocality of addressRegion sterk aanbevolen voor lokale vacatures.
jobLocation.@type
Type van de locatie.
- Waarde: Place
"@type": "Place"
jobLocation.address
Postadres van de werklocatie.
- Bevat @type PostalAddress en land/regio/plaats velden.
jobLocation.address.streetAddress
Straat en huisnummer.
- Optioneel maar verbetert lokale relevantie.
"streetAddress": "Industrieweg 12"
jobLocation.address.addressLocality
Plaatsnaam (stad of dorp).
- Aanbevolen. Minimaal locality óf region moet gevuld zijn.
- Voor NL: “Dirksland”, “Middelharnis”.
"addressLocality": "Dirksland"
jobLocation.address.addressRegion
Provincie of regio.
- Aanbevolen als alternatief of aanvulling op locality.
- Nederland: “Zuid-Holland”, “Zeeland”.
"addressRegion": "Zuid-Holland"
jobLocation.address.postalCode
Postcode.
- Aanbevolen voor NL-vacatures (bijv. 3247 AB).
"postalCode": "3247 AB"
jobLocation.address.addressCountry
Landcode in twee letters.
- Verplicht wanneer jobLocation aanwezig is.
- Nederland: NL
"addressCountry": "NL"
jobLocationType
Geeft remote werk aan. Enige waarde die Google erkent voor thuiswerk: TELECOMMUTE.
- Zet op TELECOMMUTE voor volledig remote vacatures.
- Bij TELECOMMUTE: jobLocation is optioneel, maar applicantLocationRequirements is verplicht.
- Laat weg voor on-site vacatures.
"jobLocationType": "TELECOMMUTE"
applicantLocationRequirements
Land(en) waar de kandidaat mag wonen bij remote werk.
- Verplicht wanneer jobLocationType = TELECOMMUTE.
- Gebruik @type Country en name met ISO-landcode of landnaam.
"applicantLocationRequirements": { "@type": "Country", "name": "NL" }
Vacature-ID (identifier)
Unieke referentie per vacature. Helpt Google duplicaten te herkennen wanneer dezelfde functie op meerdere URL’s staat.
identifier
Interne vacature-ID of referentienummer.
- Aanbevolen object met @type PropertyValue.
- name: bron of systeem (bijv. bedrijfsslug of “ATS”).
- value: unieke ID per posting.
"identifier": { "@type": "PropertyValue", "name": "reinier-looij", "value": "verkoop-medewerker" }
Dienstverband (employmentType)
Type contract of dienstverband. Google accepteert alleen vaste enum-waarden.
employmentType
Soort dienstverband.
- Aanbevolen. Geldige waarden: FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER, PER_DIEM, OTHER.
- Meerdere types mogelijk als array, bijv. [PART_TIME, CONTRACTOR].
- Gebruik geen vrije tekst (“vast dienstverband”) — alleen de enum.
"employmentType": "FULL_TIME"
workHours
Beschrijving van uren per week (Schema.org, niet Google-verplicht).
- Vrije tekst, bijv. “32–40 uur per week”.
- jobpost.tech mapt dit vanuit het admin-veld work_hours.
"workHours": "36 uur per week"
Salaris (baseSalary)
Salarisindicatie in MonetaryAmount. Google toont salaris soms in zoekresultaten wanneer dit correct is ingevuld.
baseSalary
Bruto salaris of salarisrange.
- Aanbevolen. Object met @type MonetaryAmount.
- currency: ISO 4217 (EUR voor euro).
- value: QuantitativeValue met bedrag en periode.
baseSalary.currency
Valutacode van drie letters.
- Verplicht als baseSalary aanwezig is. NL: EUR.
"currency": "EUR"
baseSalary.value.unitText
Salarisperiode.
- HOUR, DAY, WEEK, MONTH of YEAR.
- Vast dienstverband NL: meestal MONTH of YEAR.
"unitText": "MONTH"
baseSalary.value.value | minValue / maxValue
Enkel bedrag of range.
- Geef value voor vast bedrag, of minValue + maxValue voor range.
- Minimaal één van deze drie is verplicht als baseSalary aanwezig is.
- Gebruik punten als decimaalteken in JSON (2500.00).
"value": { "@type": "QuantitativeValue", "minValue": 2800, "maxValue": 3400, "unitText": "MONTH" }
Solliciteren (directApply)
Of kandidaten direct op de vacaturepagina kunnen solliciteren zonder extra tussenstappen.
directApply
true wanneer sollicitatie op dezelfde pagina start (formulier, e-mailknop, ATS-widget). false wanneer eerst doorgestuurd wordt.
- Aanbevolen. Moet overeenkomen met de werkelijke sollicitatieflow.
- false als gebruikers eerst moeten inloggen op een extern portaal zonder sollicitatieformulier.
"directApply": true
applicationContact
Contact voor sollicitaties (Schema.org extra). jobpost.tech vult dit vanuit tenant/job contactgegevens.
- Optioneel ContactPoint met email, telephone of url.
- Niet verplicht voor Google, wel nuttig voor crawlers en ATS-koppelingen.
"applicationContact": { "@type": "ContactPoint", "email": "vacatures@example.nl" }
Beta-velden (opleiding & ervaring)
Door Google als beta gemarkeerd. Ondersteuning kan wijzigen; jobpost.tech valideert ze maar telt ze niet mee in de schema-score.
educationRequirements
Minimaal vereist opleidingsniveau.
- Beta. credentialCategory bevat het niveau (bijv. bachelor degree, vocational).
"educationRequirements": { "@type": "EducationalOccupationalCredential", "credentialCategory": "vocational" }
experienceRequirements
Vereiste werkervaring in maanden.
- Beta. monthsOfExperience als geheel getal.
"experienceRequirements": { "@type": "OccupationalExperienceRequirements", "monthsOfExperience": 24 }
experienceInPlaceOfEducation
Of ervaring in plaats van formele opleiding acceptabel is.
- Beta. true of false.
"experienceInPlaceOfEducation": true
Schema.org extra’s
Aanvullende velden die jobpost.tech kan emittersen. Niet verplicht voor Google, wel waardevol voor rijkere vacaturedata.
qualifications
Korte samenvatting van kwalificaties en eisen.
- Platte tekst of HTML-afhankelijk van implementatie.
"qualifications": "MBO niveau 2+, rijbewijs B"
skills
Benodigde vaardigheden.
- Bijv. “HTML, klantcontact, heftruckcertificaat”.
"skills": "Klantgericht, teamplayer, administratief sterk"
jobBenefits
Arbeidsvoorwaarden en secundaire benefits.
- Bijv. pensioen, leasefiets, opleidingsbudget.
"jobBenefits": "25 vakantiedagen, pensioenregeling, reiskostenvergoeding"
Volgende stap
Controleer een live vacaturepagina of deel een link met een werkgever die nog geen structured data heeft.
Open JobPosting checker