How to Get Your Job Listings on Google for Jobs
What is Google for Jobs?
Google for Jobs is a powerful feature that displays job listings directly in Google search results.
When job seekers search for positions, Google shows a special jobs box with rich information including company names, locations, and salary details. Getting your jobs listed here can significantly increase your visibility and applications.
Prerequisites
Before your jobs can appear on Google for Jobs, ensure you have:
✅ A WordPress website with the Recruitly plugin installed
✅ Active job listings published on your site
✅ Access to edit your theme's functions.php
file
✅ Google Search Console account (recommended for monitoring)
Step-by-Step Implementation Guide
Step 1: Add the Structured Data Code
Add the following code to your WordPress theme's functions.php
file. You can access this through:
- WordPress Admin → Appearance → Theme Editor → functions.php, or
- Via FTP/cPanel in
/wp-content/themes/your-theme/functions.php
/**
* Add Google Jobs structured data to Recruitly job posts
* Customize the values below according to your needs
*/
function custom_recruitly_google_jobs_structured_data() {
if (is_singular('current-vacancies')) { // Recruitly post type
global $post;
// CUSTOMIZE THESE VALUES
$agency_name = 'Your Agency Name'; // Replace with your agency name
$currency = 'USD'; // Change to your currency: GBP, EUR, AUD, etc.
$default_country = 'US'; // Default country if none specified
// Map your job types to Google's employment types
$employment_type_map = array(
'Full Time' => 'FULL_TIME',
'Part Time' => 'PART_TIME',
'Contract' => 'CONTRACTOR',
'Temporary' => 'TEMPORARY',
'Intern' => 'INTERN',
'Freelance' => 'CONTRACTOR',
'Permanent' => 'FULL_TIME',
// Add more mappings as needed
);
// Get job meta data
$job_type = get_post_meta($post->ID, 'jobType', true);
$posted_on = get_post_meta($post->ID, 'postedOn', true);
$company_name = get_post_meta($post->ID, 'companyName', true);
$min_salary = get_post_meta($post->ID, 'minSalaryRange', true);
$max_salary = get_post_meta($post->ID, 'maxSalaryRange', true);
// Location data
$country = get_post_meta($post->ID, 'country', true) ?: $default_country;
$city = get_post_meta($post->ID, 'town', true);
$region = get_post_meta($post->ID, 'county', true);
$postal_code = get_post_meta($post->ID, 'postCode', true);
$remote_working = get_post_meta($post->ID, 'remoteWorking', true);
$employment_type = isset($employment_type_map[$job_type]) ? $employment_type_map[$job_type] : 'FULL_TIME';
// Build structured data
$structured_data = array(
'@context' => 'https://schema.org/',
'@type' => 'JobPosting',
'title' => get_the_title(),
'description' => strip_tags(get_the_content()),
'datePosted' => date('Y-m-d', strtotime($posted_on)),
'employmentType' => $employment_type,
'validThrough' => date('Y-m-d', strtotime($posted_on . ' + 60 days')) . 'T23:59:59'
);
// Organization - use agency name or company name
$structured_data['hiringOrganization'] = array(
'@type' => 'Organization',
'name' => $company_name ?: $agency_name // Uses company name if available, otherwise agency
);
// Location
if ($remote_working == 'true' || $remote_working == 1) {
$structured_data['jobLocationType'] = 'TELECOMMUTE';
}
$location_data = array(
'@type' => 'Place',
'address' => array(
'@type' => 'PostalAddress',
'addressCountry' => $country
)
);
if ($city) $location_data['address']['addressLocality'] = $city;
if ($region) $location_data['address']['addressRegion'] = $region;
if ($postal_code) $location_data['address']['postalCode'] = $postal_code;
$structured_data['jobLocation'] = $location_data;
// Salary (optional but recommended)
if ($min_salary || $max_salary) {
$salary_data = array(
'@type' => 'MonetaryAmount',
'currency' => $currency
);
if ($min_salary && $max_salary) {
$salary_data['value'] = array(
'@type' => 'QuantitativeValue',
'minValue' => floatval($min_salary),
'maxValue' => floatval($max_salary),
'unitText' => 'YEAR'
);
} elseif ($min_salary || $max_salary) {
$salary_data['value'] = array(
'@type' => 'QuantitativeValue',
'value' => floatval($min_salary ?: $max_salary),
'unitText' => 'YEAR'
);
}
$structured_data['baseSalary'] = $salary_data;
}
// Output the structured data
?>
<script type="application/ld+json">
<?php echo wp_json_encode($structured_data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT); ?>
</script>
<?php
}
}
add_action('wp_head', 'custom_recruitly_google_jobs_structured_data');
Step 2: Customize Your Settings
After adding the code, customize these important values:
1. Agency/Company Name
$agency_name = 'Your Agency Name'; // Replace with your actual name
This will appear as the hiring organization when no specific company is listed.
2. Currency
$currency = 'USD'; // Common options: GBP, EUR, AUD, CAD, INR
3. Default Country
$default_country = 'US'; // Use 2-letter country codes: GB, AU, CA, IN
4. Employment Type Mappings
Add any custom job types your agency uses:
$employment_type_map = array(
'Full Time' => 'FULL_TIME',
'Part Time' => 'PART_TIME',
'Contract' => 'CONTRACTOR',
'Temporary' => 'TEMPORARY',
'Permanent' => 'FULL_TIME',
'Casual' => 'PART_TIME',
'Fixed Term' => 'TEMPORARY',
// Add your custom types here
);
Step 3: Test Your Implementation
- View a Job Post
- Navigate to any single job listing on your website
- View the page source (right-click → "View Page Source")
- Search for
<script type="application/ld+json">
- You should see your structured data
- Use Google's Rich Results Test
- Go to https://search.google.com/test/rich-results
- Enter your job post URL
- Click "Test URL"
- Check for any errors or warnings
Example of What You Should See
{ "@context": "https://schema.org/", "@type": "JobPosting", "title": "Senior Software Developer", "description": "We are looking for an experienced developer...", "datePosted": "2025-05-15", "employmentType": "FULL_TIME", "validThrough": "2025-07-14T23:59:59", "hiringOrganization": { "@type": "Organization", "name": "Tech Recruitment Agency" }, "jobLocation": { "@type": "Place", "address": { "@type": "PostalAddress", "addressLocality": "London", "addressRegion": "England", "addressCountry": "GB" } } }
Step 4: Submit to Google Search Console
- Add Your Site to Google Search Console
- Submit Your Sitemap (usually
yoursite.com/sitemap.xml
) - Monitor Performance in the "Performance" report
- Check for Issues in the "Enhancements" → "Job postings" section
Troubleshooting Common Issues
❌ "Missing field 'hiringOrganization'"
Solution: Ensure the $agency_name
variable is set with your agency name.
❌ "Invalid employment type"
Solution: Check that your job types are correctly mapped to Google's accepted values:
- FULL_TIME
- PART_TIME
- CONTRACTOR
- TEMPORARY
- INTERN
- VOLUNTEER
- PER_DIEM
- OTHER
❌ "Missing location"
Solution: Ensure jobs have at least a country specified. Add a default country in the code.
❌ Jobs not appearing after implementation
Solution:
- It can take 3-7 days for Google to discover and index your structured data
- Ensure your jobs are publicly accessible (not behind login)
- Check that job URLs are included in your sitemap
- Verify no robots.txt blocking
Best Practices for Maximum Visibility
1. Keep Jobs Fresh
- Remove expired positions promptly
- Update the "validThrough" date for extended postings
- Regularly add new jobs
2. Complete Information
- Include salary ranges when possible (jobs with salary get 30% more clicks)
- Add detailed job descriptions
- Specify exact locations (city, region, postal code)
3. Mobile Optimization
- Ensure job pages load quickly
- Test mobile responsiveness
- Use clear, readable fonts
4. Clear Job Titles
- Use standard job titles (e.g., "Software Engineer" not "Code Ninja")
- Include seniority levels (Senior, Junior, Lead)
- Avoid excessive punctuation or ALL CAPS
Monitoring Success
Track Your Performance
- Google Search Console
- Monitor impressions and clicks for job postings
- Check for any structured data errors
- Google Analytics
- Track traffic to job pages
- Monitor application conversions
- Analyze user behavior
- Key Metrics to Watch
- Impressions in Google Jobs
- Click-through rate (CTR)
- Time on job pages
- Application conversion rate
Frequently Asked Questions
Q: How long before my jobs appear on Google?
A: Typically 3-7 days after implementation, but can take up to 2 weeks.
Q: Can I hide the client company name?
A: You must provide a hiring organisation. You can use your agency name or "Confidential Employer."
Q: Do I need to update expired jobs?
A: Yes, remove or update expired jobs to maintain good standing with Google.
Q: What if I don't have salary information?
A: Salary is optional but highly recommended. Jobs with salary information receive significantly more clicks.
Q: Can I use this for multiple websites?
A: Yes, add the code to each WordPress site's functions.php file with appropriate customizations.
Need Help?
If you encounter issues:
- Double-check your code implementation
- Verify using Google's Rich Results Test
- Ensure all required fields are populated
- Contact Recruitly support for plugin-specific questions