How to

How to get job postings on Google for Jobs: JobPosting structured data, step by step

On this page
  1. What is Google for Jobs, and how do postings get there?
  2. Which JobPosting properties are required and recommended?
  3. What does the markup look like?
  4. How should pay be marked up?
  5. How do you mark up remote and hybrid jobs?
  6. How do you tell Google about new, changed and closed jobs?
  7. How do you remove a filled job?
  8. What makes a posting ineligible?
  9. Why does a job board's copy show instead of yours?
  10. How do you check that it is working?
  11. Questions people ask

To get job postings into Google's job search experience, often called Google for Jobs, either post through an applicant tracking system or job board that already sends structured data to Google, or add JobPosting structured data to each job's own page on your careers site. Google requires five properties: datePosted, description, hiringOrganization, jobLocation and title, with applicantLocationRequirements and jobLocationType taking the place of a physical location for fully remote jobs. Validate with the Rich Results Test, notify Google through the Indexing API or a sitemap, and expire filled jobs promptly. Everything below comes from Google Search Central's JobPosting documentation, last updated September 8, 2026, as of October 2026.

The words in the posting are a separate job; see how to write a job description that attracts qualified candidates. This page is the technical route into Google.

What is Google for Jobs, and how do postings get there?

Google describes it as a job search experience that "brings together job postings from across the web" and shows them in Search, with filters for location, title and other criteria (Job Search on Google). There is no form to submit a job. Google reads structured data from job pages it crawls, which leaves two routes:

  • Your own careers site. "ATS providers, job boards, and employers can use job posting structured data to directly integrate with Google," in Google's words.
  • A third party. If you post through a job board or an ATS-hosted careers page, check whether that provider already participates.

If your careers pages are hosted by your ATS, test one live job URL in the Rich Results Test before doing anything else. A valid "Job posting" result means the markup is already there and your work is about quality and expiry, not code.

PropertyStatusWhat Google's documentation says
datePostedRequiredThe original date the employer posted the job, in ISO 8601 format
descriptionRequiredThe full description in HTML, including responsibilities, qualifications, skills, working hours, education and experience; it cannot be the same as the title. Google recognizes <p>, <ul> and <li>
hiringOrganizationRequiredThe company's name, not the hiring location; an agency hiring for an anonymous employer uses the value confidential
jobLocationRequired unless fully remoteWhere the employee reports to work, not where the job was posted; addressCountry is required. Add several for multi-location jobs
titleRequiredThe job title only, with no job codes, addresses, dates, salaries or company names
applicantLocationRequirementsRecommended; required for 100% remote jobs limited to certain placesThe geographic areas where remote employees may be located; at least one country
baseSalaryRecommendedThe actual base salary provided by the employer, not an estimate; ranges use minValue and maxValue; unitText is HOUR, DAY, WEEK, MONTH or YEAR
directApplyRecommendedWhether the URL offers a short, direct application; Google says it is still developing how it uses this
employmentTypeRecommendedFULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER, PER_DIEM or OTHER; more than one allowed
identifierRecommendedThe hiring organization's unique identifier for the job, such as your requisition number
jobLocationTypeRecommended; required for 100% remoteTELECOMMUTE, only for jobs that are fully remote
validThroughRequired if the posting has an expiration dateWhen the posting expires; leave it out if the job never expires or you do not know
educationRequirements, experienceRequirements, experienceInPlaceOfEducationRecommended (beta)Structured education and experience needs; keep describing them in the description too

What does the markup look like?

An invented example in JSON-LD, which goes in the job page's HTML inside a <script type="application/ld+json"> element. The company, dates and pay are examples.

{
  "@context": "https://schema.org/",
  "@type": "JobPosting",
  "title": "Warehouse Shift Supervisor",
  "description": "<p>Lead a team of 12 on the night shift...</p><ul><li>2 years supervising in a warehouse</li></ul>",
  "identifier": {
    "@type": "PropertyValue",
    "name": "Example Logistics",
    "value": "REQ-2026-0417"
  },
  "datePosted": "2026-10-20",
  "validThrough": "2026-11-30T23:59",
  "employmentType": "FULL_TIME",
  "hiringOrganization": {
    "@type": "Organization",
    "name": "Example Logistics, Inc.",
    "sameAs": "https://www.example.com",
    "logo": "https://www.example.com/logo.png"
  },
  "jobLocation": {
    "@type": "Place",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "100 Example Way",
      "addressLocality": "Columbus",
      "addressRegion": "OH",
      "postalCode": "43215",
      "addressCountry": "US"
    }
  },
  "baseSalary": {
    "@type": "MonetaryAmount",
    "currency": "USD",
    "value": {
      "@type": "QuantitativeValue",
      "minValue": 24.00,
      "maxValue": 28.50,
      "unitText": "HOUR"
    }
  }
}

Google's documentation adds three rules that catch many careers sites: put the markup on the most specific page for a single job, never on search results or list pages; make sure the structured data appears on the same page as the description job seekers read; and if the same job lives at several URLs, use a canonical URL on each copy.

How should pay be marked up?

baseSalary must be the actual base pay "as provided by the employer (not an estimate)", and Google notes that only employers can provide it. Whatever is in the markup must also be visible on the page: Google's troubleshooting section lists salary in the markup but not on the job page as a content-policy violation. Several states require a pay range in the posting itself, so the visible range and the markup should be the same numbers; see how to set salary ranges for job postings and salary range job posting examples.

How do you mark up remote and hybrid jobs?

  • Fully remote: set jobLocationType to TELECOMMUTE, say clearly in the description that the job is 100% remote, and name at least one country in applicantLocationRequirements. Without that property, Google shows the job to anyone in the country given in jobLocation.
  • Remote or on-site, candidate's choice: include both a jobLocation and the remote properties.
  • Hybrid or occasional home working: do not use TELECOMMUTE. Google says not to mark up jobs that allow occasional work from home or treat remote work as negotiable.

Remote postings raise their own pay-range questions; see pay transparency for remote jobs.

How do you tell Google about new, changed and closed jobs?

For job posting URLs, Google recommends the Indexing API over sitemaps "because the Indexing API prompts Googlebot to crawl your page sooner". As of October 2026, the API:

  • can only be used for pages with JobPosting or BroadcastEvent embedded in a VideoObject;
  • accepts URL_UPDATED notices for new or changed pages and URL_DELETED notices for removed ones, and batches of up to 100 calls;
  • has a default quota of 200 publish requests a day per project, and Google says all use of it "is available without payment" (quota and pricing);
  • requires a service account that is added as an owner of your site in Search Console.

Google still recommends a sitemap for coverage of the whole site, with accurate lastmod times, and no search results or list pages in it.

How do you remove a filled job?

Google's documentation says jobs no longer open for applications "must be expired", and that failure to take timely action "may result in a manual action". Use one of three methods:

  1. Set validThrough to a date in the past.
  2. Remove the page so that it returns a 404 or 410 status code.
  3. Remove the JobPosting structured data from the page.

Then send a URL_DELETED or URL_UPDATED notice through the Indexing API. Google's content policies also forbid postings for fake or non-existent jobs, including postings whose main purpose is collecting applicant information, and say resume collection is allowed for open positions only. Several jurisdictions are moving to regulate the same practice; see ghost job laws.

What makes a posting ineligible?

From Google's job posting content policies and troubleshooting list:

  • Markup on a page that lists several jobs, or on a page with no job.
  • An incomplete description, or a description that requires a login to view.
  • No way to apply on the page.
  • Requiring payment from applicants.
  • Expired jobs still marked up.
  • Keyword-stuffed titles, excessive special characters, or false location data.
  • Postings made on behalf of an organization without authorization, which matters for agencies advertising client roles.
  • Markup that does not match the visible page, such as a different title or a salary that appears only in the code.

Why does a job board's copy show instead of yours?

Google does not publish how it chooses between copies of the same job, and it states that it does not guarantee structured-data features will show even when the markup is valid. What you can control, based on the documentation:

  • Make your page eligible. Many employer careers pages have no markup, put it on a list page, or block crawling with robots.txt, noindex or a login wall.
  • Get crawled first. Notify Google through the Indexing API when the job goes live, rather than waiting for a sitemap crawl.
  • Keep one canonical URL per job so your own copies do not compete with each other.
  • Make applying short. Google's directApply definition describes a direct experience as one without repeated clicks to apply, forms or logins in the journey. Even though Google says it is still developing how it uses this, a short application helps candidates either way.
  • Check what boards publish. If an agency or board advertises your job, its copy is a separate posting. Make sure it is authorized and up to date.

How do you check that it is working?

  1. Paste a live job URL into the Rich Results Test and fix errors, then warnings.
  2. Use the URL Inspection tool in Search Console to see the rendered page as Google sees it.
  3. After indexing, watch the job posting rich result status report in Search Console for invalid items, especially after a careers site template change.
  4. Use the Search Console Performance report to see how often job postings appear and are clicked.
  5. Search for one of your jobs on Google and confirm the apply link leads to your page.

Federal contractors have separate listing duties, such as listing most openings with the state employment service under VEVRAA; see VEVRAA job listing requirements. Google markup does not satisfy those.

Questions people ask

How do I get my job posting on Google for Jobs?

Either post through an applicant tracking system or job board that already sends structured data to Google, or add JobPosting structured data to each job's own page on your careers site with the required properties: datePosted, description, hiringOrganization, jobLocation and title. Validate the page with Google's Rich Results Test, make sure Google can crawl it, and notify Google of new or changed jobs with the Indexing API or a sitemap.

Is Google for Jobs free?

Google's documentation describes no fee or paid placement for appearing in its job search experience; eligibility comes from structured data on a crawlable job page that follows Google's content policies. Google's Indexing API, which it recommends for job posting URLs, is also available without payment within its quotas, as of October 2026.

Why is my job not showing on Google for Jobs?

The common causes are missing or invalid JobPosting markup, markup placed on a list page instead of the single job's page, a page blocked by robots.txt, noindex or a login, content that does not match the markup, an expired posting, or a page Google has not recrawled yet. Google also says it does not guarantee that features using structured data will appear, even when the markup is valid.

How do I remove a filled job from Google for Jobs?

Google gives three options: set the validThrough property to a date in the past, remove the page so it returns a 404 or 410 status, or remove the JobPosting structured data from the page. Then notify Google, preferably with the Indexing API. Google says failing to take timely action on expired jobs may result in a manual action.