JobPosting schema is a schema.org structured data type that marks a web page as a single job opening and describes it in machine-readable form: title, description, hiring organization, location, date posted, and optionally salary, employment type, and expiry date. Google reads this markup (usually as JSON-LD) to include the job in the job search experience on Google Search, commonly called Google for Jobs. 

It is the technical foundation for organic job visibility on Google, and it is the first thing to check when a career site’s jobs are not showing up. It is not a ranking factor for AI Overviews or AI Mode, and Indeed does not use it to index jobs; those are two of the most common misconceptions, covered below.

What Does JobPosting Schema Actually Do?

Schema.org is a collaborative vocabulary for structured data on the web, founded by Google, Microsoft, Yahoo, and Yandex and now maintained through a W3C community group. JobPosting is one of its types, defined as “a listing that describes a job opening in a certain organization.” According to schema.org’s usage data, JobPosting markup is present on between 100,000 and 1 million domains.

The markup can be written in JSON-LD, Microdata, or RDFa. Google’s documentation states that all three are treated equally as long as the markup is valid, but recommends JSON-LD, which is a script block in the page head that does not touch the visible HTML. In practice, most applicant tracking systems, career site platforms, and job distribution feeds generate JSON-LD automatically.

When Google finds valid JobPosting markup on an indexable page, the job becomes eligible for the enriched job listing experience in Search, where candidates can filter by location, date posted, employment type, and salary. Google’s documentation also says it uses structured data “to understand the content of the page, as well as to gather information about the web and the world in general,” so accurate markup helps Google build an accurate picture of the employer as an entity.

Which JobPosting Properties Are Required?

Google’s JobPosting documentation (last updated September 2026) lists exactly five required properties.

PropertyWhat it must containNotes from Google’s documentation
titleThe job title onlyNo job codes, addresses, dates, salaries, or company names in the title
descriptionThe full job description in HTMLMust cover responsibilities, qualifications, skills, hours, education, and experience; cannot equal the title
datePostedDate the job was posted, ISO 8601Example: 2026-09-28
hiringOrganizationThe employer’s nameThe company, not the hiring location; “confidential” is allowed for anonymous hiring
jobLocationPhysical address including addressCountryNot required if applicantLocationRequirements is present (remote jobs)

Google also lists seven recommended properties: applicantLocationRequirements, baseSalary, directApply, employmentType, identifier, jobLocationType, and validThrough. A separate beta set covers education and experience requirements (educationRequirements, experienceRequirements, experienceInPlaceOfEducation). Two of the recommended properties deserve special attention.

validThrough is the job’s expiry date. Google says it is required for postings that have an expiration date and should be omitted only if the job never expires or the date is unknown. baseSalary may only be provided by employers with the actual pay, not an estimate, using unitText values of HOUR, DAY, WEEK, MONTH, or YEAR. With pay-range disclosure now mandatory in more than a dozen US states, baseSalary is increasingly the property that decides whether a listing is compliant as well as complete.

What Is directApply and Why Does It Matter?

directApply is a Boolean property that, in Google’s words, “indicates whether the URL that’s associated with this job posting enables direct application for the job.” Google defines a direct apply experience as one where the candidate does not have to click apply, complete an application form, or sign in more than once in the application journey. 

Google notes that it is “still developing how we are using this information,” so employers may not see an immediate effect in Search. It is still worth setting accurately, because it describes the apply experience Google is increasingly trying to surface. Joveo’s comparison of native apply and redirect apply covers the conversion side of this choice.

How Should Remote Jobs Be Marked Up?

Remote work is where most JobPosting errors happen. Google’s rules are specific:

  • Set jobLocationType to “TELECOMMUTE” only for jobs that are 100 percent remote. Google says not to mark up jobs that allow occasional work from home or where remote is a negotiable benefit.
  • Add applicantLocationRequirements with at least one country (or state) where applicants may live. Google says this is required if applicants may be located in one or more geographic locations and the job is 100 percent remote. Without it, Google shows the job only to people in the country given in jobLocation.
  • State clearly in the description that the job is fully remote.

Google’s documentation provides three sanctioned scenarios with code samples: remote-only with a geographic restriction, hybrid office-or-remote, and office-or-remote limited to specific states.

How Do Expired Jobs Have to Be Handled?

Stale postings are the fastest way to lose the job search experience on Google entirely. Google’s documentation says that jobs no longer open for applications must be expired in one of three ways: set validThrough to a date in the past, remove the page so it returns a 404 or 410, or remove the JobPosting markup from the page. It adds that “failure to take timely action on expired jobs may result in a manual action.” Note that noindex is not on Google’s list of accepted expiry methods.

Google also recommends notifying it of changes through the Indexing API rather than waiting for a sitemap crawl, because the API prompts Googlebot to crawl the page sooner. For an always-open role, see Joveo’s guide to evergreen requisitions for how to keep a legitimate long-running posting compliant.

What Are the Other Rules That Get Sites Removed?

Beyond expiry, Google’s technical and content guidelines include:

  • One JobPosting per page. The markup “must only be used on pages that contain a single job posting.” Adding it to search result or list pages triggers a structured data policy violation in Search Console.
  • The page must be indexable at its own URL and not blocked by robots.txt, a noindex tag, or a login wall. Postings that require a login to view the description are not allowed.
  • The structured data must match the visible content. Google states the markup “must appear on the same page as the job description that job seekers can read in their browser.”
  • No misrepresented or fake jobs, no keyword-stuffed titles, and no overuse of special characters, which Google may treat as spammy structured markup.

Violations can lead to a manual action and removal of the job postings from the job search experience on Google.

Does JobPosting Schema Help With AI Overviews and AI Mode?

Not directly, and Google is explicit about it. Google’s documentation on AI features in Search states that “there are no additional requirements to appear in AI Overviews or AI Mode,” that eligibility only requires a page to be indexed and eligible for a snippet, and that “there’s also no special schema.org structured data that you need to add.” The one structured data instruction it gives is to make sure the markup matches the visible text on the page.

The practical takeaway is that JobPosting schema earns the job listing experience, not AI citations. What AI systems do reward is clear, complete, and consistent job content, which is the same content the schema describes. Joveo’s guide to optimizing job descriptions for AI search covers that side.

Does Indeed Use JobPosting Schema?

No. Indeed’s employer documentation describes two ways jobs get onto Indeed: hosted jobs posted directly, and indexed jobs that Indeed’s technology aggregates from career sites and applicant tracking systems, or that arrive through XML feeds and ATS integrations. Its aggregation requirements are an effective job description, a clear application path, a listed location, a complete title, and a unique URL per job; schema.org markup is not mentioned. Indeed’s partner documentation says the XML feed “controls how your jobs appear on Indeed” and that crawled feeds are refreshed four times a day at six-hour intervals.

So the same job needs two different technical foundations: JobPosting schema for Google and an XML feed or ATS integration for Indeed. Joveo’s explainer on job advertising feeds covers the second.

How Do You Test and Monitor JobPosting Markup?

  • Rich Results Test (search.google.com/test/rich-results) validates JSON-LD, Microdata, and RDFa and explicitly supports the Job posting type.
  • Search Console’s Enhancements section includes a Job postings report, which counts valid, warning, and error items once Google has found markup on the site.
  • URL Inspection confirms whether a specific job page has been crawled and what structured data Google detected.

How Does This Fit Into Programmatic Job Advertising?

Programmatic job advertising platforms such as Joveo distribute jobs to paid publishers through feeds and bid on each job according to performance. Organic visibility on Google is the free layer underneath that paid distribution. When a career site’s JobPosting markup is complete and its expired jobs are cleaned up, every requisition earns baseline organic traffic, and paid budget can be concentrated on the jobs that need it. Joveo’s Google for Jobs guide walks through the full setup, and the programmatic job advertising guide covers how paid and organic distribution work together.

Frequently Asked Questions

Is JobPosting schema the same as Google for Jobs? 

No. JobPosting schema is the markup standard from schema.org. Google for Jobs is the colloquial name for the job search experience in Google Search that reads that markup. Google’s own documentation calls it “the job search experience on Google.”

Do I need JobPosting schema if my jobs are on Indeed? 

Yes, if you want them in Google’s job search experience. Indeed indexes jobs through crawling, XML feeds, and ATS integrations, not through schema.org markup.

Can I add JobPosting markup to my careers landing page? 

No. Google requires the markup on pages that contain a single job posting only. List and search pages should not carry it.

Does salary have to be included? 

baseSalary is recommended, not required, by Google. However, many US state pay transparency laws now require a pay range in the posting itself, so including it in both the visible text and the markup is the safest practice.

What happens if I leave expired jobs live? 

Google says it may take a manual action, which can remove your job postings from the job search experience on Google.