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>.
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.
- Title — use the actual job title as it would appear to a candidate. Avoid keyword stuffing; Google will filter spammy titles.
- Description — can contain HTML. Include responsibilities, qualifications, and benefits. Google requires substantial content (not just a header or bullet list).
- Date posted — the date the listing was published (YYYY-MM-DD). This affects how listings are ranked by recency in Google for Jobs.
- Valid through — optional expiry. Google will suppress the listing after this date, keeping your index clean.
- Employment type — maps to Google's employment-type filter in the jobs experience.
- Remote — tick the checkbox for fully remote roles. This sets
jobLocationType: TELECOMMUTEand addsapplicantLocationRequirementsso the listing appears for location-independent searches. - 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
TELECOMMUTEand 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?
Can I use HTML in the description field?
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?
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.