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 Markup (JSON-LD) — Copy-Paste Examples
Copy-paste SoftwareApplication and WebApplication JSON-LD for apps, plugins, and SaaS. Valid schema.org examples for Google rich results.
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