Free Job Posting Schema Generator

Generate valid JobPosting JSON-LD structured data for your open roles. Fill in the details and copy the markup so your listing is eligible for Google Jobs. Free, no sign-up required.

Build Your Job Posting Schema

Job basicsThe core details of the role you are hiring for.

The title of the position. Use a plain title, not a code or internal req number.

The full description. It can include HTML formatting, but plain text works fine too.

Hiring organizationThe company or brand advertising the role.

LocationWhere the job is based. Mark it remote or add a physical address.

Physical location of the role. Optional for remote jobs, still added if you fill it in.

Salary (optional)Google recommends a salary. Adding one can display a pay range on your listing.

Enter your job title above and your JSON-LD will build here automatically.

Generated JSON-LD

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "employmentType": "FULL_TIME"
}
</script>

How to add it to your site

  1. Copy the code above.
  2. Paste it inside the <head> section of the individual job posting page (one block per open role).
  3. Validate it with the Google Rich Results Test or the Schema.org Validator.
  4. Deploy, then request indexing in Google Search Console to speed things up.

Build better careers pages around your schema

Structured data tells search engines what your role is. These free widgets make the page better for candidates.

Explore More Free Tools

Other free tools to help you optimize and grow.

How It Works

How to use this free job posting schema generator

No account needed, no sign-up, completely free. Fill in your job details, and valid JSON-LD structured data builds live, ready to copy into your page.

1

Enter the job details

Add the job title, a full description, the employment type, and the date you posted the role. The title is all it takes to start building valid markup.

2

Add the company, location, and salary

Name the hiring organization, set the location or mark the role remote, and optionally add a salary. Everything you type builds the markup live, with no empty fields left in.

3

Copy and validate

Copy the generated JSON-LD, paste it into the head of the job posting page, and confirm it with the Google Rich Results Test. No sign-up, completely free.

The Basics

What is job posting schema, and why does it matter?

Search engines read your careers pages, but structured data tells them exactly what they are looking at: the title, the company, the location, the pay, and when the role was posted.

The idea

Your job details → schema.org JobPosting → JSON-LD in your <head>

Result: your open role becomes eligible for the Google Jobs experience

Job posting schema is structured data that describes a single open role using the shared schema.org vocabulary and the JobPosting type. Instead of hoping Google infers the title, employer, and location from your HTML, you state them explicitly in a format built for machines to read.

This is what powers Google Jobs, the dedicated hiring box that appears above regular search results. When your listing carries valid JobPosting markup, it becomes eligible to appear there, with the title, company, location, and posting date pulled straight from your data.

The recommended format is JSON-LD: a small block of JSON placed in the head of the individual job page. It lives separately from your visible content, so it is easy to add without touching your design. Structured data does not guarantee placement, but it makes your roles unambiguous to search engines and the AI assistants that increasingly summarize the web.

Fields

Required and recommended job posting fields

Google needs a handful of fields before a role qualifies for the Google Jobs experience. Here is what is required, what is conditional, and what is recommended.

FieldWhat it doesImportanceStatus
titleThe plain-language title of the role, e.g. Senior Frontend Engineer.RequiredRequired
descriptionThe full job description. Can include HTML formatting or plain text.RequiredRequired
datePostedThe date the listing first went live, in ISO 8601 format.RequiredRequired
hiringOrganizationThe company advertising the job, as an Organization with a name.RequiredRequired
jobLocationThe physical Place and address of the role. Required unless the job is fully remote.Required for on-siteConditional
validThroughThe date the posting expires. Keeps stale roles from lingering in search.RecommendedRecommended
baseSalaryThe pay for the role, as a MonetaryAmount with currency, value, and unit.RecommendedRecommended
employmentTypeFull time, part time, contractor, and so on. Powers job-type filters.RecommendedRecommended

Based on Google Search JobPosting structured data guidelines, 2026.

What It Can Unlock

What job posting schema can do for you

Structured data makes your roles eligible for hiring features and helps machines understand your listings. Eligibility is never guaranteed, but the groundwork matters.

💼

Google Jobs listing

Valid JobPosting markup makes your role eligible for the Google Jobs experience, the dedicated hiring box that appears above regular results.

🔎

Job details in search

Your title, company, location, and posting date can show directly in search, so candidates see the essentials before they even click.

🏠

Remote-job filters

Marking a role as remote with an applicant location requirement lets it surface when candidates filter for work-from-home positions.

💰

Salary display

Adding a baseSalary can show an estimated or stated pay range on your listing, which tends to attract more qualified applicants.

Timely, fresh listings

The datePosted and validThrough fields tell search engines how current a role is, so expired jobs drop out cleanly.

🤖

AI clarity

Structured job data makes your openings easier for AI assistants and answer engines to read, summarize, and attribute correctly.

Avoid These

Six job posting schema mistakes that cause problems

Structured data helps only when it is accurate and valid. Steer clear of these common errors.

📅

Stale or expired listings

Leaving a filled or expired role marked up hurts trust. Keep validThrough current and remove the markup once a job closes.

Keep validThrough current
🕑

Inaccurate datePosted

The datePosted must reflect when the role actually went live. Do not reset it to look fresher than it is.

Use the real posting date
📝

Thin description

A one-line description gives candidates and search engines little to work with. Include responsibilities, requirements, and benefits.

Write a complete description
👻

Marking up ghost jobs

Only add JobPosting schema to real, open positions candidates can actually apply for. Fake or evergreen listings breach Google guidelines.

Mark up only real openings
📍

Missing location on on-site roles

A non-remote job needs a jobLocation with an address. Without it, the role may not qualify for the Google Jobs experience.

Add an address for on-site roles

Never validating

Always run your markup through the Rich Results Test. A single syntax slip can invalidate the whole block.

Validate before you ship

Get More From It

6 tips for effective job posting markup

Practical ways to make your schema work harder. All CommonNinja widgets mentioned are free to start.

01

One markup block per open role

Each job gets its own JobPosting block on its own page. Do not list several roles in a single block or on a shared index page.

02

Always set validThrough

An expiry date keeps closed roles from lingering in search and signals that your listings are actively maintained.

03

Add a salary when you can

Google recommends including pay, and listings with a salary tend to draw more qualified candidates. Use a real figure or range.

04

Answer candidate questions on the page

Schema describes the role; a clear FAQ answers what candidates actually ask about pay, process, and remote policy. Add one right on the job page.

Try the FAQ widget
05

Pair it with site-wide schema

JobPosting markup describes one role. Your Organization schema describes the whole company. Use both. Our free Website Schema Generator builds the site-wide part.

Try the Website Schema Generator
06

Validate after every change

Re-run the Rich Results Test whenever you edit a listing or update your careers template. It catches errors before Google does.

Glossary

Key job posting schema fields

A quick reference for the properties behind job posting markup.

FieldDefinitionExampleWhen It Matters
titleThe plain title of the position. Use the role name candidates would search for, not an internal code.Senior Frontend EngineerEvery job you mark up
datePostedThe date the listing first went live, in ISO 8601 format. Tells search engines how current the role is.2026-07-15Every job you mark up
validThroughThe date the posting expires. Once passed, the role drops out of the Google Jobs experience cleanly.2026-09-15Every job with a deadline
employmentTypeThe nature of the role: FULL_TIME, PART_TIME, CONTRACTOR, and so on. Powers job-type filters.FULL_TIMERecommended on every role
jobLocationTypeSet to TELECOMMUTE for fully remote roles, paired with an applicant location requirement.TELECOMMUTERemote positions
baseSalaryThe pay for the role as a MonetaryAmount, with a currency, a value, and a unit such as YEAR.USD 90000 / YEARRecommended, boosts applications

FAQ

Job posting schema markup is structured data that describes a single open role to search engines using the schema.org JobPosting type. Instead of leaving search engines to guess the title, employer, location, and pay from your careers page, you state them explicitly in a machine-readable format. This is what makes a role eligible for the Google Jobs experience, the dedicated hiring box that appears above regular search results.
Google requires four fields for a valid JobPosting: title (the plain job title), description (the full role description), datePosted (when the listing went live), and hiringOrganization (the company advertising the role). For non-remote roles you also need jobLocation with a physical address. Everything else, including salary and validThrough, is recommended rather than strictly required.
For a fully remote role, set jobLocationType to TELECOMMUTE and add an applicantLocationRequirements entry naming the country a candidate must be in, for example USA. This generator does that automatically when you tick the remote checkbox and enter a country. A physical jobLocation is optional for remote roles, but you can still include an office address if the role is hybrid.
No, salary is optional. However, Google recommends including one, and listings that show pay tend to attract more qualified applicants. If you add it, provide a real figure or range using the baseSalary field with a currency, a value, and a unit such as YEAR or HOUR. Never invent a salary to look more competitive.
validThrough is the date your listing expires. It keeps closed or filled roles from lingering in the Google Jobs experience, which protects candidate trust and signals that your listings are actively maintained. Once a role is filled, update or remove the markup, and always set an expiry date when you post.
Paste the generated JSON-LD inside the section of the individual job posting page, one block per open role, never several roles in one block. Then validate it with the Google Rich Results Test or the Schema.org Validator. Both are free and show errors, warnings, and eligibility. Keep in mind that only genuine, open positions candidates can apply for should carry this markup.
Yes, completely free with no account or sign-up required. Generate and copy as much structured data as you need. Note that valid markup makes a role eligible for the Google Jobs enrichment, but Google decides when to show it, and schema is not a direct ranking factor.

Trusted by