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 descriptiondatePosted— ISO 8601 formathiringOrganization— Company name + URL
Strongly recommended:
jobLocationwith full address (orjobLocationType: "TELECOMMUTE"for remote)validThrough— When the listing expiresemploymentType— FULL_TIME, PART_TIME, CONTRACTOR, etc.
Nice to have (improves click-through):
baseSalary— Shows salary in search resultsapplicantLocationRequirements— For remote jobsskills— 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:
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.

