EA Digital Solutions
Circuit board with a glowing chip, symbolising structured data

Schema.org for Google Jobs: How to Structure Job Postings Correctly

Adam Khalil
Share
For job ads to appear in Google Jobs, each vacancy needs its own page with Schema.org JobPosting markup. Required: title, description, datePosted, hiringOrganization and jobLocation (remote: jobLocationType). Recommended: validThrough, baseSalary and employmentType.

Last updated: August 2026

Someone searches Google for "frontend developer Vienna". What do they see? A dedicated widget right above the organic results: Google Jobs. It shows job ads with title, company, location and salary. If you don't appear there, you lose qualified applicants to competitors who got the technical side right.

The key is JobPosting Schema.org markup. This article explains which fields Google requires, what is commonly done wrong and what the technical implementation looks like in different systems.

What is Google Jobs and why does it matter?

Hierarchical tree of data fields: required fields of the JobPosting schema

Google Jobs is a dedicated section of Google's search results that appears for job-related searches such as "accountant job ad", "IT jobs Munich" or "part-time marketing Austria". It shows job ads from across the web directly in Google, without the user having to visit a separate job board.

For employers, this means: if you implement Google Jobs-compatible markup, you appear there for free, with no job board fees. The traffic channel is substantial: Google processes billions of searches every day, and a significant share of them are job-related.

The technical prerequisite: Google crawls your job ad pages and recognises the JobPosting Schema.org markup. Without structured data, your vacancies will not appear in this widget.

The required fields of the JobPosting schema

Google defines clear required and optional fields. If required fields are missing, the jobs are not shown in Google Jobs:

  • title — The job title ("Senior Frontend Developer", "Accountant (m/f/d)"). Do not include the company name.
  • hiringOrganization — Name and optional URL of the hiring organisation.
  • jobLocation — Location with street, city and country following the PostalAddress schema. For remote jobs: jobLocationType: "TELECOMMUTE".
  • datePosted — ISO 8601 date of publication (e.g. "2026-08-01").
  • description — Full job description, HTML allowed, at least 100 characters.
  • validThrough — Expiry date of the job ad (recommended by Google; always set it for fixed-term roles). Once this date has passed, Google removes the job.

Recommended optional fields that make the difference

Data tree with highlighted optional fields for job ads

These fields are not mandatory, but they make your ad far more informative for applicants:

  • baseSalary — Salary information increases the click-through rate significantly. Format: MonetaryAmount with minValue, maxValue, currency, unitText ("MONTH", "YEAR", "HOUR").
  • employmentType — "FULL_TIME", "PART_TIME", "CONTRACTOR", "TEMPORARY", "INTERN", "VOLUNTEER".
  • workHours — Free-text field for working-time models ("40 hours/week", "Flexible working hours").
  • educationRequirements — Structured or as text. Helps Google categorise the job.
  • skills — Comma-separated skills. Don't overload it; list only genuine requirements.

Technical implementation: JSON-LD vs. Microdata

Google recommends JSON-LD, a small block of data in the page code that visitors don't see, and for good reason. JSON-LD sits in the <head> or <body> as its own <script> tag and is therefore separate from the HTML content. No mixing of content and markup, and no risk of parsing errors caused by the HTML structure.

Microdata (attributes directly in the HTML) works the same way technically, but is harder to maintain and more error-prone, especially when the HTML is generated by the CMS.

For WordPress installations there are plugins (Rank Math, Yoast SEO) that generate the JobPosting schema automatically, provided the job ads are created in the right custom post type. For custom systems, we implement it directly in the server-side rendering logic.

Common mistakes that lead Google to reject postings

Google's Rich Results Test shows errors, but only once you actually run it. Common problems in practice:

  • Expired validThrough dates — The most common reason jobs disappear from Google Jobs. Vacancies must be deactivated manually or automatically.
  • Description too short or without substance — "We look forward to your application." is not a sufficient description.
  • Job location missing or incomplete — PostalAddress must contain addressLocality AND addressCountry.
  • Salary formatted incorrectly — baseSalary needs a MonetaryAmount with numeric values, not "negotiable".
  • Several JSON-LD blocks for the same job — Only one JobPosting JSON-LD per URL.

Automated schema generation in practice

For companies whose job ads change daily, automatic generation is the way to go: the applicant tracking system (ATS) manages all vacancies, and whenever a job page is requested, the website automatically generates the matching structured data.

The advantage: no manual markup maintenance, no outdated data; validThrough is set automatically to the ATS expiry date, and the noindex tag is added when the position closes. Implemented in Next.js with server-side rendering through custom web development.

New vacancies appear in Google Jobs without any manual work, and filled positions disappear again automatically.

Monitoring and error detection

Schema.org markup is not a one-off implementation. Jobs expire, content changes, and Google updates its requirements. We recommend:

  • Google Search Console — the "Enhancements > Job postings" section shows errors and valid job ads.
  • Rich Results Test — for manually checking individual URLs.
  • Automated monitoring — a crawler that checks all job URLs weekly and reports schema errors.

Frequently Asked Questions

Do Google Jobs listings cost money?▾

No. Google Jobs is free. The Schema.org markup just has to be implemented correctly.

How long until job postings appear in Google Jobs?▾

Typically 1–3 days after implementation.

Does Schema.org work for remote jobs too?▾

Yes. Use jobLocationType: "TELECOMMUTE" for fully remote roles, combined with jobLocation for hybrid roles.

Does every vacancy need its own URL?▾

Yes. Google indexes job postings per URL; a single page listing several jobs does not work reliably.

What happens when a position has been filled?▾

Set noindex or move validThrough to a past date; otherwise the job stays visible.

15 minutes

Want to know what this looks like for your company?

Pick a slot and we go through your situation together — no preparation needed, no sales pitch.

Related service

Schema.org Markup for Google Jobs

Job ads that Google indexes and shows directly.

Learn more →

New articles delivered straight to your inbox

  • ✓New articles delivered to your inbox
  • ✓Digital marketing tips for SMEs
  • ✓No spam, unsubscribe anytime

No spam. Unsubscribe anytime.

More articles

Network cables with orange LEDs and receipts symbolising the connection between Shopify and BMD
System integration

Connecting Shopify to BMD: Automated Bookkeeping

There is no ready-made connection between Shopify and BMD. Here is how Austrian shops still get orders, credit notes and payouts into their accounting automatically.

21 October 2026