Free JobPosting Schema Generator

Fill in the fields and this builds valid schema.org/JobPosting JSON-LD you can paste straight into a job page. It runs entirely in your browser, so nothing you type is sent anywhere, and there is no sign-up. Not sure what any of that means? Start with the plain English explainer.

One caveat worth knowing before you start: valid markup makes a job eligible for Google for Jobs, it does not get it listed. Most pages that fail are failing on canonical URLs, thin job content, or expired listings left live, not on their JSON-LD. If your schema already validates and your jobs still are not showing, the generator is not what you need. Read the troubleshooting guide instead.

Free JobPosting schema generator

Fill in the fields. Valid JSON-LD updates live. No sign-up, runs in your browser.

Only add salary if it is real and visible on the job page.

job-posting.jsonld

Paste the copied <script> tag into the <head> of the single job detail page, then confirm it with Google's Rich Results Test. If it validates and the job still does not appear, the cause is on the page, not in the markup: work through the checks here.

What this generates

The output covers the fields Google actually requires: title, description, datePosted, and hiringOrganization on every job, plus jobLocation for roles tied to a place. Switch the location type to remote and it swaps in jobLocationType TELECOMMUTE with applicantLocationRequirements, which is the pair that fully remote roles need and the one most hand-written markup gets wrong. Salary and validThrough are optional and only appear in the output when you fill them in, because inventing either is worse than omitting both.

Why valid schema is not enough

A generator can only fix syntax. It cannot fix a job page that duplicates twenty others, a canonical tag pointing somewhere else, a listing that closed three months ago but still carries live JobPosting markup, or a description in the JSON-LD that does not match what a visitor reads on the page. Those are the failure modes behind most "the Rich Results Test passes but nothing shows" reports, and none of them are visible in the markup itself.

If that is where you are, the full breakdown of causes and fixes is in JobPosting schema not showing in Google for Jobs, which covers the required fields in depth, the common failure patterns, and what to check in what order. If you are instead holding a specific error message, look it up in the error and warning reference.

Running an actual job board?

Then you should not be pasting this markup by hand. A board needs valid structured data emitted for every listing automatically, and removed the moment a job closes. Compare 30 platforms on their SEO tooling, or see how Kardow handles it. Disclosure: Kardow is our product.

Frequently asked questions

Is this job posting schema generator free?

Yes. There is no sign-up, no account, and no usage limit. The generator runs entirely in your browser, so nothing you type is sent to us or stored anywhere. You can confirm that by opening it with your network tab open, or by disconnecting from the internet after the page loads and watching it keep working.

Where do I paste the JSON-LD once it is generated?

Put the copied script tag in the head of the individual job detail page, not the homepage and not a category or search results page. Google reads JobPosting markup per job URL, so one job means one page with one JobPosting block on it.

Does valid JobPosting schema guarantee my jobs appear in Google for Jobs?

No, and this is the single most common misunderstanding. Valid markup makes a job eligible for Google for Jobs, not entitled to it. Pages still fail on canonical URL conflicts, thin or duplicated job content, expired listings left live, and markup that does not match what a visitor actually sees on the page. Passing the Rich Results Test only tells you the syntax is correct.

Which JobPosting fields are actually required?

Google lists five required properties on JobPosting: title, description, datePosted, hiringOrganization, and jobLocation. Fully remote roles satisfy the location requirement with jobLocationType set to TELECOMMUTE plus applicantLocationRequirements naming where an applicant may work from. Everything else, including validThrough, baseSalary, employmentType, and identifier, is recommended rather than required, so a missing one produces a warning and not an error. Add validThrough only when the job has a genuine expiry date, and baseSalary only when the salary is real and visible on the page.

Do I need this if my job board runs on a platform?

You should not be pasting JobPosting markup by hand at any scale. A job board platform should emit valid structured data for every listing automatically and keep it in sync as jobs open and close, because stale markup on expired jobs is one of the faster ways to lose eligibility. This generator is for one-off pages, careers pages, and for checking what your platform should be producing.

Published . The generator runs client side and stores nothing.