By SitemapFixer Team
Updated April 2026

Job Posting Rich Results: Schema Implementation Guide

Audit your job posting schema for Google for Jobs eligibilityAnalyze My Site Free

Job posting rich results power the "Google for Jobs" feature — a dedicated job search interface embedded directly in Google Search results that drives enormous applicant volume to companies with valid JobPosting schema. If you post jobs on your own careers page and want to appear in Google for Jobs, implementing correct schema markup is essential. This guide covers required properties, salary markup, remote work fields, expiration handling, and how to troubleshoot common errors.

What Is Google for Jobs?

Google for Jobs is a dedicated job search interface that appears at the top of Google Search results for job-related queries like "software engineer jobs San Francisco" or "remote marketing manager." It aggregates job postings from company career pages, third-party job boards, and staffing agencies into a filterable, searchable interface. Companies that implement JobPosting schema on their own careers pages can appear directly in this interface, bypassing the need to post exclusively on job boards. This can significantly reduce recruiting costs and increase direct application rates.

Required Schema Markup (JSON-LD)

A complete JobPosting schema example:

{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "title": "Senior SEO Engineer",
  "description": "<p>We are looking for a Senior SEO Engineer to lead technical SEO initiatives...</p>",
  "identifier": {
    "@type": "PropertyValue",
    "name": "SitemapFixer",
    "value": "JOB-SE-001"
  },
  "datePosted": "2026-04-27",
  "validThrough": "2026-07-27T00:00:00",
  "employmentType": "FULL_TIME",
  "hiringOrganization": {
    "@type": "Organization",
    "name": "SitemapFixer",
    "sameAs": "https://sitemapfixer.com",
    "logo": "https://sitemapfixer.com/opengraph-image"
  },
  "jobLocation": {
    "@type": "Place",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "123 Tech Street",
      "addressLocality": "Austin",
      "addressRegion": "TX",
      "postalCode": "78701",
      "addressCountry": "US"
    }
  },
  "applicantLocationRequirements": {
    "@type": "Country",
    "name": "US"
  },
  "jobLocationType": "TELECOMMUTE",
  "baseSalary": {
    "@type": "MonetaryAmount",
    "currency": "USD",
    "value": {
      "@type": "QuantitativeValue",
      "minValue": 120000,
      "maxValue": 160000,
      "unitText": "YEAR"
    }
  }
}

Required vs Recommended Properties

Required properties are title, description (must be the full job description, not a summary), datePosted (ISO 8601 date), and hiringOrganization with a name. Also required: either a jobLocation (for in-person roles) or jobLocationType: TELECOMMUTE plus applicantLocationRequirements for remote roles. Strongly recommended properties that improve Google for Jobs ranking and display: validThrough, employmentType (FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER, PER_DIEM, OTHER), baseSalary, and identifier.

Remote Work Fields

For fully remote jobs, set jobLocationType to TELECOMMUTE and specify applicantLocationRequirements using either a Country, State, or City schema type to indicate where applicants must be located. If the role allows applicants from anywhere in the world, use an array of Country objects covering all eligible countries. For hybrid roles (some remote, some in-office), provide both a jobLocation Place and set jobLocationType: TELECOMMUTE. This combined approach helps Google surface the role in both location-specific and remote-specific job queries.

Handling Job Expiration

The validThrough property tells Google when a job posting expires. Setting this accurately is critical — expired job postings that remain indexed with outdated schema cause a poor user experience and Google may penalize the site. When a position is filled, either set validThrough to a past date, add a noindex tag to the page, or return a 404/410 status for the URL. Google Search Console has a specific warning for expired job postings — check the Jobs report regularly. Best practice: set validThrough to 90 days from posting and refresh it when you extend the listing.

Salary Markup and Its Impact

Including baseSalary in your JobPosting schema significantly improves Google for Jobs visibility and application rates. Google uses salary data as a ranking signal in its job search interface and job seekers heavily filter by salary range. Use the MonetaryAmount type with currency (ISO 4217 code) and a QuantitativeValue sub-object specifying minValue, maxValue, and unitText (YEAR, MONTH, WEEK, DAY, HOUR). Never include salary information in the schema that you would not disclose in the job description itself — the schema must match page content.

Eligibility Requirements

Google for Jobs has specific eligibility requirements. The job must be a genuine employment opportunity (not freelance gigs, courses, or multi-level marketing). The page must be publicly accessible (no login required to view the full job posting). The description must be the complete job description — summaries that require clicking through are not eligible. Job posting aggregators must use the sameAs property to link to the original job posting on the employer's site. Sites with a history of posting spam or misleading jobs may be excluded from Google for Jobs entirely.

How to Test Job Posting Schema

Use the Rich Results Test at search.google.com/test/rich-results to validate individual job posting pages. The tool will show detected properties and flag missing required fields. Check Google Search Console under Enhancements > Job Postings for site-wide coverage, including counts of valid postings, warnings (like missing recommended salary data), and errors. You can also directly search Google for your job titles to see if they appear in the Google for Jobs carousel. Use URL Inspection in Search Console to request re-indexing after fixing schema errors on job posting pages.

Common Mistakes and Fixes

Frequent job posting schema errors: description containing only a brief summary instead of the full job content (fix: include the complete role description in the description field using HTML); missing or malformed jobLocation for in-person roles; validThrough already in the past (fix: update or remove filled positions immediately); employment type not using Google's accepted enum values (fix: use FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, etc.); and using JobPosting schema for freelance or gig economy postings (fix: these are not eligible — Google may suppress them or issue a manual action).

Validate Your Job Posting Schema Now
Free analysis in 60 seconds
Analyze My Site Free

Related Guides