JobPosting Schema Generator

Create a complete schema.org/JobPosting JSON-LD block that qualifies your listing for Google for Jobs — the job-search experience surfaced above organic results on relevant queries. Fill in the required fields (title, description, datePosted, employer, and location), add optional salary and employment type, and copy the output into your job listing page's <head>.

Hiring organization *
Location
Base salary (optional)

How to use the JobPosting Schema Generator

Fill in the fields marked with an asterisk — title, description, datePosted, hiring organization name, and job location — then add the optional fields that apply to your listing. Click Generate to produce the JSON-LD block.

  1. Title — use the actual job title as it would appear to a candidate. Avoid keyword stuffing; Google will filter spammy titles.
  2. Description — can contain HTML. Include responsibilities, qualifications, and benefits. Google requires substantial content (not just a header or bullet list).
  3. Date posted — the date the listing was published (YYYY-MM-DD). This affects how listings are ranked by recency in Google for Jobs.
  4. Valid through — optional expiry. Google will suppress the listing after this date, keeping your index clean.
  5. Employment type — maps to Google's employment-type filter in the jobs experience.
  6. Remote — tick the checkbox for fully remote roles. This sets jobLocationType: TELECOMMUTE and adds applicantLocationRequirements so the listing appears for location-independent searches.
  7. Salary — provide either a single value or a min/max range. Google shows salary estimates in the listing card, and listings with explicit salary data often perform better.

What is JobPosting schema and why does it matter for Google for Jobs?

JobPosting is a schema.org type that represents a single job opening. When Google crawls a page containing this structured data, it can surface the listing in Google for Jobs — a dedicated job-search widget that appears above the regular organic results for job-related queries. Appearing in this widget is effectively free, high-visibility distribution across Google Search, Google Maps, and Assistant. Major ATS platforms (Greenhouse, Lever, Workday) add this markup automatically; smaller companies and custom job boards often do not, missing significant applicant traffic.

Google's required properties are: title, description, datePosted, hiringOrganization (with at least name), and a valid jobLocation (or jobLocationType: TELECOMMUTE for remote roles). Missing any of these causes the listing to be ineligible for the rich result. Strongly recommended additions include employmentType, baseSalary, validThrough, and the organization's logo (minimum 200×200 px).

For remote listings specifically, Google requires jobLocationType set to TELECOMMUTE and applicantLocationRequirements set to the country or region eligible applicants must be in (typically {"@type":"Country","name":"US"}). Omitting the location requirement while setting telecommute makes the listing ineligible. This generator handles that pairing automatically via the Remote checkbox.

Common use cases

  • Corporate career pages — add JobPosting schema to every role listing page so Google for Jobs indexes the opening without needing a third-party ATS integration.
  • Recruiting agencies — generate markup for client job descriptions and include it in the hosted landing page to drive applicants directly from Google.
  • Remote-first companies — use the Remote checkbox to set TELECOMMUTE and location requirements, making listings visible in geography-agnostic job searches worldwide.
  • Job aggregators and boards — add structured data to each listing detail page so Google indexes individual postings rather than just the board homepage.
  • Salary transparency initiatives — providing explicit salary ranges in the schema increases candidate trust and may improve application rates from qualified candidates who self-filter based on compensation.

Frequently asked questions

My job listing is not showing in Google for Jobs — what is wrong?

Use Google's Rich Results Test to verify the markup is valid. Common issues: missing required properties, description is too thin, datePosted is in the wrong format, or the page is blocked by robots.txt or a noindex tag. Also check Search Console > Enhancements > Job Postings for specific errors.

Can I use HTML in the description field?

Yes — schema.org allows HTML in the description property. Google will render the formatted version in the job card. Keep it clean: headings, lists, and bold text work well; complex CSS and JavaScript are ignored.

How do I mark a listing as expired?

Set validThrough to the closing date. After that date, Google will eventually remove it from the jobs index. For immediate removal, also add a noindex meta tag or redirect the page to a 404. Do not leave expired listings live and indexed; it harms applicant experience and your domain's quality signals.

Is salary information required?

No, salary is optional in the schema spec. However, Google's guidelines note that listings with explicit salary data provide better user experience and may receive preferential treatment in the jobs experience. Many jurisdictions also legally require salary disclosure in job postings.

Can one page have multiple JobPosting objects?

No — each job listing must have its own dedicated URL with one JobPosting block. Do not put multiple jobs on one page and mark each with JobPosting schema; Google will likely reject or ignore the listing.