If you've ever tried to get "rich results" for job listings on Google Search — the ones with the salary, location, and posted-date pills right in the SERP — you've probably run into Google's JobPosting schema docs and immediately wanted to close the tab. It's one of the more verbose schema types out there, with a long list of "recommended" properties that all seem mandatory until you actually read the fine print.

Here's what I learned implementing it across listing pages on a live job board, and why I ended up going with a minimal JobPosting + ItemList combination instead of the full schema Google's examples suggest.

The problem with going "full schema"

The naive approach is to take Google's sample JobPosting JSON-LD and fill in every property: baseSalary, employmentType, jobLocation, hiringOrganization, validThrough, applicantLocationRequirements, jobLocationType... the list goes on.

Two problems show up fast when you try this on real listing data: