JAVASCRIPTseointermediate
JobPosting Schema for Recruitment Sites
Add JobPosting structured data to appear in Google for Jobs search results with salary and company details
Faisal Yaqoob
December 27, 2025
#job-posting#schema#seo#structured-data#json-ld#google-jobs#recruitment#hiring#rich-snippets
Code
javascript
1 const jobPosting = { 2 "@context": "https://schema.org", 3 "@type": "JobPosting", 4 "title": "Senior WordPress Developer", 5 "description": "<p>We are looking for an experienced WordPress developer to join our team. You will be responsible for developing custom themes, plugins, and maintaining client websites.</p><h3>Responsibilities</h3><ul><li>Develop custom WordPress themes and plugins</li><li>Optimize site performance and Core Web Vitals</li><li>Implement headless WordPress with Next.js</li><li>Code review and mentor junior developers</li></ul><h3>Requirements</h3><ul><li>5+ years WordPress development experience</li><li>Strong PHP, JavaScript, and React skills</li><li>Experience with REST API and GraphQL</li><li>Knowledge of SEO best practices</li></ul>", 6 "datePosted": "2025-12-27", 7 "validThrough": "2026-03-27T23:59:59-05:00", 8 "employmentType": "FULL_TIME", 9 "hiringOrganization": { 10 "@type": "Organization", 11 "name": "Your Company Name", 12 "sameAs": "https://yourcompany.com", 13 "logo": "https://yourcompany.com/logo.png", 14 "description": "A leading web development agency specializing in WordPress and Shopify solutions." 15 }, 16 "jobLocation": { 17 "@type": "Place", 18 "address": { 19 "@type": "PostalAddress", 20 "streetAddress": "123 Tech Street", 21 "addressLocality": "Austin", 22 "addressRegion": "TX", 23 "postalCode": "78701", 24 "addressCountry": "US" 25 } 26 }, 27 "baseSalary": { 28 "@type": "MonetaryAmount", 29 "currency": "USD", 30 "value": { 31 "@type": "QuantitativeValue", 32 "minValue": 90000, 33 "maxValue": 130000, 34 "unitText": "YEAR" 35 } 36 }, 37 "jobBenefits": "Health insurance, 401k matching, unlimited PTO, remote work flexibility", 38 "skills": "WordPress, PHP, JavaScript, React, REST API, MySQL, Git", 39 "qualifications": "Bachelor's degree in Computer Science or equivalent experience", 40 "experienceRequirements": { 41 "@type": "OccupationalExperienceRequirements", 42 "monthsOfExperience": 60 43 }, 44 "industry": "Software Development", 45 "occupationalCategory": "15-1254.00" 46 };
JobPosting Schema for Recruitment Sites
Add JobPosting structured data to make your job listings appear in Google for Jobs — a dedicated job search experience that appears at the top of search results. This can dramatically increase visibility for your open positions.
Full-Time Job Posting Schema
const jobPosting = {
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Senior WordPress Developer",
"description": "<p>We are looking for an experienced WordPress developer to join our team. You will be responsible for developing custom themes, plugins, and maintaining client websites.</p><h3>Responsibilities</h3><ul><li>Develop custom WordPress themes and plugins</li><li>Optimize site performance and Core Web Vitals</li><li>Implement headless WordPress with Next.js</li><li>Code review and mentor junior developers</li></ul><h3>Requirements</h3><ul><li>5+ years WordPress development experience</li><li>Strong PHP, JavaScript, and React skills</li><li>Experience with REST API and GraphQL</li><li>Knowledge of SEO best practices</li></ul>",
"datePosted": "2025-12-27",
"validThrough": "2026-03-27T23:59:59-05:00",
"employmentType": "FULL_TIME",
"hiringOrganization": {
"@type": "Organization",
"name": "Your Company Name",
"sameAs": "https://yourcompany.com",
"logo": "https://yourcompany.com/logo.png",
"description": "A leading web development agency specializing in WordPress and Shopify solutions."
},
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Tech Street",
"addressLocality": "Austin",
"addressRegion": "TX",
"postalCode": "78701",
"addressCountry": "US"
}
},
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "USD",
"value": {
"@type": "QuantitativeValue",
"minValue": 90000,
"maxValue": 130000,
"unitText": "YEAR"
}
},
"jobBenefits": "Health insurance, 401k matching, unlimited PTO, remote work flexibility",
"skills": "WordPress, PHP, JavaScript, React, REST API, MySQL, Git",
"qualifications": "Bachelor's degree in Computer Science or equivalent experience",
"experienceRequirements": {
"@type": "OccupationalExperienceRequirements",
"monthsOfExperience": 60
},
"industry": "Software Development",
"occupationalCategory": "15-1254.00"
};
Remote Job Posting
const remoteJob = {
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Shopify Developer (Remote)",
"description": "<p>Join our fully remote team as a Shopify developer. Build custom themes, apps, and integrations for e-commerce clients worldwide.</p><h3>What You'll Do</h3><ul><li>Build custom Shopify themes using Liquid, HTML, CSS, JavaScript</li><li>Develop Shopify apps using Node.js and React</li><li>Integrate third-party APIs and payment gateways</li><li>Optimize store performance and conversion rates</li></ul>",
"datePosted": "2025-12-27",
"validThrough": "2026-02-28",
"employmentType": "FULL_TIME",
"jobLocationType": "TELECOMMUTE",
"applicantLocationRequirements": [
{
"@type": "Country",
"name": "United States"
},
{
"@type": "Country",
"name": "Canada"
},
{
"@type": "Country",
"name": "United Kingdom"
}
],
"hiringOrganization": {
"@type": "Organization",
"name": "Your Company",
"sameAs": "https://yourcompany.com",
"logo": "https://yourcompany.com/logo.png"
},
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "USD",
"value": {
"@type": "QuantitativeValue",
"minValue": 80000,
"maxValue": 120000,
"unitText": "YEAR"
}
}
};
Freelance / Contract Position
const contractJob = {
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Freelance Web Developer - WooCommerce Projects",
"description": "<p>We need a skilled freelance developer for ongoing WooCommerce projects. Flexible hours with project-based compensation.</p>",
"datePosted": "2025-12-27",
"validThrough": "2026-06-30",
"employmentType": ["CONTRACTOR", "PART_TIME"],
"hiringOrganization": {
"@type": "Organization",
"name": "Your Agency",
"sameAs": "https://youragency.com",
"logo": "https://youragency.com/logo.png"
},
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressLocality": "Remote",
"addressCountry": "US"
}
},
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "USD",
"value": {
"@type": "QuantitativeValue",
"minValue": 50,
"maxValue": 100,
"unitText": "HOUR"
}
}
};
WordPress Implementation
/**
* Output JobPosting schema for WordPress job listings
* Works with a custom post type 'job'
*/
function wp_job_posting_schema() {
if ( ! is_singular( 'job' ) ) {
return;
}
global $post;
$salary_min = get_post_meta( $post->ID, 'job_salary_min', true );
$salary_max = get_post_meta( $post->ID, 'job_salary_max', true );
$job_type = get_post_meta( $post->ID, 'job_type', true ) ?: 'FULL_TIME';
$is_remote = get_post_meta( $post->ID, 'job_remote', true );
$valid_until = get_post_meta( $post->ID, 'job_valid_through', true );
$city = get_post_meta( $post->ID, 'job_city', true );
$state = get_post_meta( $post->ID, 'job_state', true );
$schema = [
'@context' => 'https://schema.org',
'@type' => 'JobPosting',
'title' => get_the_title(),
'description' => apply_filters( 'the_content', $post->post_content ),
'datePosted' => get_the_date( 'Y-m-d' ),
'validThrough' => $valid_until,
'employmentType' => $job_type,
'hiringOrganization' => [
'@type' => 'Organization',
'name' => get_bloginfo( 'name' ),
'sameAs' => home_url( '/' ),
'logo' => get_site_icon_url( 512 ),
],
];
if ( $is_remote ) {
$schema['jobLocationType'] = 'TELECOMMUTE';
} elseif ( $city && $state ) {
$schema['jobLocation'] = [
'@type' => 'Place',
'address' => [
'@type' => 'PostalAddress',
'addressLocality' => $city,
'addressRegion' => $state,
'addressCountry' => 'US',
],
];
}
if ( $salary_min && $salary_max ) {
$schema['baseSalary'] = [
'@type' => 'MonetaryAmount',
'currency' => 'USD',
'value' => [
'@type' => 'QuantitativeValue',
'minValue' => (int) $salary_min,
'maxValue' => (int) $salary_max,
'unitText' => 'YEAR',
],
];
}
echo '<script type="application/ld+json">'
. wp_json_encode( $schema, JSON_UNESCAPED_SLASHES )
. '</script>' . "\n";
}
add_action( 'wp_head', 'wp_job_posting_schema' );
Employment Type Reference
// Valid employmentType values:
// "FULL_TIME" - Full-time employment
// "PART_TIME" - Part-time employment
// "CONTRACTOR" - Independent contractor
// "TEMPORARY" - Temporary position
// "INTERN" - Internship
// "VOLUNTEER" - Volunteer position
// "PER_DIEM" - Per diem basis
// "OTHER" - Other arrangement
// Multiple types allowed as array:
"employmentType": ["FULL_TIME", "CONTRACTOR"]
// Salary unit options:
// "HOUR" - Hourly rate
// "DAY" - Daily rate
// "WEEK" - Weekly salary
// "MONTH" - Monthly salary
// "YEAR" - Annual salary
Best Practices
- Include salary range — jobs with salary info get significantly more visibility
- Use HTML in
description— Google renders formatted job descriptions - Set
validThrough— expired listings are automatically removed - Specify
employmentType— required for Google for Jobs eligibility - Add
hiringOrganizationwith logo — builds trust in search results - Include
applicantLocationRequirementsfor remote jobs — Google filters by location - Update listings promptly when positions are filled
Features
- Google for Jobs: Appear in Google's dedicated job search experience
- Salary Display: Show salary range directly in search results
- Remote Support: Full support for remote and hybrid positions
- Multiple Types: Handle full-time, contract, freelance, and internships
- Location Filtering: Users can filter by location in Google Jobs
- WordPress Ready: PHP implementation for WordPress job boards
Related Snippets
SoftwareApplication Schema for Apps and Tools
Add SoftwareApplication structured data for apps, plugins, and SaaS tools to display ratings and pricing in Google
JAVASCRIPTseobeginner
javascriptPreview
const webAppSchema = {
"@context": "https://schema.org",
"@type": "WebApplication",
"name": "Schema Markup Generator",
...#software#app#schema+7
1/8/2026
View
HowTo Schema for Step-by-Step Guides
Add HowTo structured data for Google how-to rich results with steps, tools, materials, and estimated time
JAVASCRIPTseobeginner
javascriptPreview
const howToSchema = {
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to Set Up WordPress on a VPS Server",
...#howto#schema#seo+6
1/5/2026
View
Course Schema for Online Learning Platforms
Add Course structured data for Google course rich results with provider, duration, and pricing details
JAVASCRIPTseobeginner
javascriptPreview
const courseSchema = {
"@context": "https://schema.org",
"@type": "Course",
"name": "Complete WordPress Development Masterclass",
...#course#schema#seo+6
1/2/2026
View