Skip to content
Schema Generator
Menu

Job Posting schema generator

One open position on your careers page.

Rich result availableJobPosting · Job posting

Fields marked with an asterisk are required. Your input stays in this browser.

Required

Without these, Google won't use the markup.

Only the title. No codes, salaries, or locations.

The full description from the page. Basic HTML such as <p>, <ul>, and <li> is allowed.

Employer (required)
Office location (required)

Leave empty only for fully remote jobs.

Two-letter ISO 3166 code, such as DE or US.

Fill what applies. More complete markup gets richer results.
Salary

Employer-provided pay. Use the same minimum and maximum for a fixed salary.

Three-letter ISO 4217 code, such as EUR or USD.

Tick only if applicants can apply on your site without extra steps.

OptionalExtra detail for other search engines and tools.Show 3 fields

The job can be done entirely from home.

Required for remote jobs. Two-letter ISO 3166 code, such as DE or US.

Guide

What Google does with JobPosting markup

Jobs can appear in Google's job search experience with salary, location, and an apply button. Remove the markup, or set a closing date, once the job is filled.

Google's job posting documentation

When to use it

Use on individual job detail pages that are publicly indexable. Remove markup when the role closes.

Fields Google looks for

PropertyStatusIn the form
titleRequiredJob title
descriptionRequiredJob description
datePostedRequiredPosted on
hiringOrganizationRequiredEmployer
jobLocationRequiredOffice location
validThroughRecommendedApplications close
employmentTypeRecommendedEmployment type
baseSalaryRecommendedSalary
directApplyRecommendedApply directly on this page

Example output

This is what the builder produces from the example data. Paste it into the page's HTML, in the <head> or the body.

{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "title": "Senior Backend Engineer",
  "description": "<p>Northwind is hiring a backend engineer to own our booking API.</p><ul><li>Go and PostgreSQL</li><li>On-call one week in six</li></ul>",
  "datePosted": "2026-05-02",
  "validThrough": "2026-06-30",
  "employmentType": "FULL_TIME",
  "hiringOrganization": {
    "@type": "Organization",
    "name": "Northwind Studio",
    "sameAs": "https://northwind.example"
  },
  "jobLocation": {
    "@type": "Place",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "Friedrichstraße 68",
      "addressLocality": "Berlin",
      "postalCode": "10117",
      "addressCountry": "DE"
    }
  },
  "baseSalary": {
    "@type": "MonetaryAmount",
    "currency": "EUR",
    "value": {
      "@type": "QuantitativeValue",
      "minValue": 70000,
      "maxValue": 85000,
      "unitText": "YEAR"
    }
  },
  "directApply": true
}

Common questions

Are closed jobs still eligible?
No. Remove JobPosting markup or set validThrough when the role is filled.
How should remote roles specify location?
Use jobLocationType TELECOMMUTE and applicantLocationRequirements for allowed regions when hiring remotely.