Setting up Job Posting Schema Markup for a Website
JobPosting Schema allows job postings to be displayed in Google for Jobs — a job aggregator embedded in search results. Traffic from Google for Jobs is free and the audience is targeted.
Job Posting Markup
{
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Senior PHP Developer (Laravel)",
"description": "<p>Looking for an experienced PHP developer to work on a high-load SaaS project. Stack: Laravel 10, PostgreSQL, Redis, RabbitMQ.</p><ul><li>Backend feature development</li><li>Code review</li><li>Participation in architectural decisions</li></ul>",
"identifier": {
"@type": "PropertyValue",
"name": "Company Name",
"value": "job-php-senior-2024"
},
"datePosted": "2024-03-01",
"validThrough": "2024-04-30T23:59:59",
"employmentType": "FULL_TIME",
"hiringOrganization": {
"@type": "Organization",
"name": "TechnoSoft",
"sameAs": "https://technosoft.ru",
"logo": "https://technosoft.ru/logo.png"
},
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"streetAddress": "Leo Tolstoy St., 16",
"addressLocality": "Moscow",
"addressRegion": "Moscow",
"postalCode": "119021",
"addressCountry": "RU"
}
},
"jobLocationType": "TELECOMMUTE",
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "RUB",
"value": {
"@type": "QuantitativeValue",
"minValue": 200000,
"maxValue": 300000,
"unitText": "MONTH"
}
},
"experienceRequirements": "3+ years of PHP/Laravel experience",
"educationRequirements": "Higher technical education or equivalent experience",
"skills": "PHP, Laravel, PostgreSQL, Redis, Docker",
"workHours": "40 hours per week",
"applicantLocationRequirements": {
"@type": "Country",
"name": "Russia"
}
}
Employment Types (employmentType)
-
FULL_TIME— full-time -
PART_TIME— part-time -
CONTRACTOR— contractor -
TEMPORARY— temporary -
INTERN— internship -
VOLUNTEER— volunteer -
PER_DIEM— hourly -
OTHER— other
Remote Work
For fully remote positions: "jobLocationType": "TELECOMMUTE". If partially remote — specify both fields: jobLocation (physical address) and jobLocationType.
Google Requirements
-
descriptionfield must contain full job description, not a brief one -
validThrough— mandatory for current results; expired jobs are excluded from index - Data must match what the user sees on the page
- Cannot mark aggregated pages with job lists — only individual job pages
Setup timeline: a few hours for generation from job model.







