Engineering Originally on medium

Getting Into Google for Jobs: A Developer's Guide to JobPosting Schema

Exactly what you need for valid JobPosting structured data -- from a developer with 19,700+ pages indexed.

P
Pablo Inigo · Founder & Engineer
2 min read
Job listing with structured data tags being read by search engine

Google for Jobs is the blue box that appears when someone searches for a job. Getting your listings in there requires valid JobPosting structured data. Here’s exactly what you need — from a developer who’s gotten 19,700+ pages indexed.

The Minimum Viable Schema

{
  "@context": "https://schema.org/",
  "@type": "JobPosting",
  "title": "Senior Python Developer",
  "description": "Full job description here...",
  "datePosted": "2026-02-15",
  "hiringOrganization": {
    "@type": "Organization",
    "name": "Company Name",
    "sameAs": "https://company.com"
  },
  "jobLocation": {
    "@type": "Place",
    "address": {
      "@type": "PostalAddress",
      "addressLocality": "Berlin",
      "addressRegion": "Berlin",
      "addressCountry": "DE"
    }
  }
}

What Actually Matters

Required (Google won’t show your listing without these):

  • title — The job title (don’t stuff keywords)
  • description — Full HTML description
  • datePosted — ISO 8601 format
  • hiringOrganization — Company name + URL

Strongly recommended:

  • jobLocation with full address (or jobLocationType: "TELECOMMUTE" for remote)
  • validThrough — When the listing expires
  • employmentType — FULL_TIME, PART_TIME, CONTRACTOR, etc.

Nice to have (improves click-through):

  • baseSalary — Shows salary in search results
  • applicantLocationRequirements — For remote jobs
  • skills — Not officially part of Google’s spec but helps

Remote Jobs: The Gotcha

For remote positions, you need BOTH:

{
  "jobLocationType": "TELECOMMUTE",
  "applicantLocationRequirements": {
    "@type": "Country",
    "name": "Germany"
  }
}

If you only set jobLocationType without applicantLocationRequirements, Google may reject it.

Server-Side Rendering Is Required

Google for Jobs needs the schema in the initial HTML response. Client-side rendered schemas (React SPA) will not work reliably. Google’s crawler can execute JavaScript, but it’s slow and unreliable for structured data.

We use Express.js with template literals — the schema is embedded directly in the HTML response:

const html = `
<script type="application/ld+json">
${JSON.stringify(jobPostingSchema)}
</script>
`;

Validation

Test your pages with:

  1. Google Rich Results Test
  2. Schema Markup Validator

Results

After implementing proper JobPosting schema, MisuJob has 19,700+ pages indexed in Google with 48,700 impressions in 3 months — primarily through Google for Jobs results.


Implementing structured data? Let me know what challenges you’re facing.

SEO Google Structured Data Jobs
Share
P
Pablo Inigo

Founder & Engineer

Building MisuJob — an AI-powered job matching platform processing 1M+ tech job listings daily.

Engineering updates

Technical deep dives delivered to your inbox.

Find your next role with AI

Upload your CV. Get matched to 50,000+ jobs. Auto-apply to the best fits.

Get Started Free

User

Dashboard Profile Subscription