If you’re posting job listings on your company website, Job Posting schema is essential for visibility. It enables your listings to appear in Google for Jobs, a dedicated job search experience that reaches millions of job seekers.
This guide shows you how to implement Job Posting schema to attract more qualified applicants.
What is Job Posting Schema?
Job Posting schema is structured data that describes employment opportunities. It tells search engines about:
- Job title and description
- Salary range
- Location (including remote options)
- Employment type
- Company information
- Application deadline
- Required qualifications
With proper markup, your jobs appear in the dedicated “Jobs” section of Google search.
Where Job Rich Results Appear
Google for Jobs
A dedicated job search experience within Google search results, featuring:
- Filtering by location, date, type
- Save jobs for later
- Salary estimates
- Application links
Standard Search Results
Enhanced job listings with salary and location information.
Google Maps
Jobs associated with business locations.
Required Properties
Google requires:
- title - Job title
- description - Full job description
- datePosted - When the job was posted
- hiringOrganization - Company posting the job
- jobLocation - Where the job is located
Recommended Properties
For comprehensive job markup:
- baseSalary - Compensation information
- employmentType - Full-time, part-time, etc.
- validThrough - Application deadline
- applicantLocationRequirements - Remote work eligibility
- jobLocationType - Remote/onsite/hybrid
- identifier - Unique job ID
- directApply - Whether users can apply directly
- qualifications - Required skills/experience
Complete Job Posting Example
{
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Senior Software Engineer",
"description": "<p>We are looking for an experienced Senior Software Engineer to join our engineering team. You will be responsible for designing and developing scalable web applications.</p><h3>Responsibilities:</h3><ul><li>Design and implement new features</li><li>Write clean, maintainable code</li><li>Mentor junior developers</li><li>Participate in code reviews</li></ul><h3>Requirements:</h3><ul><li>5+ years of software development experience</li><li>Strong proficiency in JavaScript/TypeScript</li><li>Experience with React and Node.js</li><li>Computer Science degree or equivalent</li></ul>",
"identifier": {
"@type": "PropertyValue",
"name": "Job ID",
"value": "SE-2025-001"
},
"datePosted": "2025-01-15",
"validThrough": "2025-03-15T23:59:59Z",
"employmentType": "FULL_TIME",
"hiringOrganization": {
"@type": "Organization",
"name": "Tech Innovations Inc",
"sameAs": "https://techinnovations.com",
"logo": "https://techinnovations.com/logo.png"
},
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"streetAddress": "100 Tech Drive",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94102",
"addressCountry": "US"
}
},
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "USD",
"value": {
"@type": "QuantitativeValue",
"minValue": 150000,
"maxValue": 200000,
"unitText": "YEAR"
}
},
"directApply": true
}
Remote Job Postings
For fully remote positions:
{
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Remote Customer Success Manager",
"jobLocationType": "TELECOMMUTE",
"applicantLocationRequirements": {
"@type": "Country",
"name": "USA"
},
"hiringOrganization": {
"@type": "Organization",
"name": "Remote Company Inc"
},
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressCountry": "US"
}
}
}
For remote with location restrictions:
"applicantLocationRequirements": [
{
"@type": "Country",
"name": "USA"
},
{
"@type": "Country",
"name": "Canada"
}
]
Hybrid Positions
For jobs with both remote and onsite requirements:
{
"title": "Product Manager (Hybrid)",
"jobLocationType": "TELECOMMUTE",
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressLocality": "New York",
"addressRegion": "NY",
"addressCountry": "US"
}
},
"description": "Hybrid role requiring 2-3 days per week in our New York office."
}
Employment Types
Use these values for employmentType:
FULL_TIMEPART_TIMECONTRACTORTEMPORARYINTERNVOLUNTEERPER_DIEMOTHER
Multiple types:
"employmentType": ["FULL_TIME", "CONTRACTOR"]
Salary Information
Annual Salary Range
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "USD",
"value": {
"@type": "QuantitativeValue",
"minValue": 80000,
"maxValue": 120000,
"unitText": "YEAR"
}
}
Hourly Rate
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "USD",
"value": {
"@type": "QuantitativeValue",
"value": 35,
"unitText": "HOUR"
}
}
Fixed Salary
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "USD",
"value": {
"@type": "QuantitativeValue",
"value": 95000,
"unitText": "YEAR"
}
}
Description Formatting
Job descriptions can include HTML:
"description": "<h3>About the Role</h3><p>We're looking for...</p><h3>Requirements</h3><ul><li>Requirement 1</li><li>Requirement 2</li></ul><h3>Benefits</h3><ul><li>Health insurance</li><li>401k matching</li></ul>"
Allowed HTML tags:
<p>,<br><h1>through<h6><ul>,<ol>,<li><strong>,<em><a href="...">
Multiple Locations
For jobs available at multiple locations:
"jobLocation": [
{
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressLocality": "New York",
"addressRegion": "NY",
"addressCountry": "US"
}
},
{
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressLocality": "Los Angeles",
"addressRegion": "CA",
"addressCountry": "US"
}
}
]
Application Deadline
Always include the closing date:
"validThrough": "2025-03-31T23:59:59Z"
For positions open until filled, use a date far in the future and update as needed.
Experience Requirements
Specify required experience:
"experienceRequirements": "5+ years in software development",
"qualifications": "Bachelor's degree in Computer Science or equivalent experience",
"skills": "JavaScript, React, Node.js, PostgreSQL"
Education Requirements
"educationRequirements": {
"@type": "EducationalOccupationalCredential",
"credentialCategory": "bachelor degree"
}
Common Mistakes
1. Missing Salary Information
Including salary significantly increases visibility in Google for Jobs.
2. Expired Listings
Remove or update validThrough when positions are filled.
3. Vague Descriptions
Include specific responsibilities and requirements.
4. Missing Location
Even for remote jobs, specify applicable regions.
5. Not Updating Status
Remove schema when positions are no longer available.
Google for Jobs Guidelines
Follow these to maintain eligibility:
- Keep listings current
- Remove filled positions promptly
- Match schema to visible content
- Don’t post fake or misleading jobs
- Include accurate salary information
- Ensure apply links work
Generate Your Job Posting Schema
Use our free Job Posting Schema Generator to create valid markup for your job listings.
Enter your:
- Job title and description
- Company information
- Location and remote options
- Salary range
- Employment type
Get properly formatted JSON-LD ready to add to your job pages.
Measuring Success
Track these metrics:
Search Console
- Job-related impressions
- Clicks from Google for Jobs
- Rich result appearances
ATS/Recruiting
- Application volume
- Quality of applicants
- Time to fill positions
Analytics
- Job page traffic
- Apply button clicks
- Conversion rate
Conclusion
Job Posting schema is essential for companies recruiting through their own websites. Google for Jobs has become a major source of job applications, and proper markup ensures your listings are eligible.
Include comprehensive information, especially salary ranges. Keep listings current and remove filled positions promptly.
Start implementing schema on your active job postings and establish a process to maintain accurate markup.
Need help optimizing your recruitment website? I can help you implement Job Posting schema and improve your career page SEO. Get in touch for a consultation.