Enabling Google JobPosting Schema in LimeStaff
Overview
Lime Staff can add Google JobPosting structured data (schema) to every single job page, which makes your listings eligible to appear in Google’s job search experience. The setting is off by default. Once it’s on, Lime Staff builds the schema from your Loxo job data and outputs it in the page <head> as JSON-LD.
Before you start, check two things:
- Standard permalinks are on. The schema only works when Use Standard Permalinks is enabled in the Lime Staff settings.
- Your Loxo jobs have a country set. Lime Staff skips schema generation for any job without a country in Loxo.
Enable the schema
- In WordPress admin, go to Settings → Lime Staff and open the Settings tab.
- Confirm Use Standard Permalinks is turned on. If it’s off, you’ll see a “Standard Permalinks Required” notice when you enable the schema.
- Scroll to the Google JobPosting Schema section and turn on Enable Google JobPosting Schema. The rest of the schema options appear below it.
- Review the options described in the next section.
- Click Save.
When you save a change that affects the schema, Lime Staff regenerates it for all jobs. An “Updating Job Schemas…” progress window shows while this runs; it can take a moment on sites with many jobs. If any jobs have no country in Loxo, a message tells you how many were skipped.
Schema is also regenerated automatically each time a job syncs from Loxo, so new and updated jobs stay current.
Schema settings
These options appear once the schema is enabled. Each one changes what Google sees for every job.
| Setting | What it does | Default |
|---|---|---|
| Employment Type Mapping | Maps each of your Loxo job types to a Google employment type: FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER, PER_DIEM or OTHER. |
Auto-mapped by name (e.g. “Full Time” → FULL_TIME, “Contract” → CONTRACTOR); anything unrecognized → OTHER |
| Default Telecommute Countries | Countries where candidates for remote jobs may live. One country code per line (e.g. US, CA, GB), no commas. Leave empty to treat remote jobs as on-site. |
Empty |
| Use Job Location Country for Telecommute Jobs | Uses each remote job’s own Loxo country as the allowed applicant location. Overrides Default Telecommute Countries, which is disabled while this is on. | Off |
| Direct Apply | Adds directApply: true, telling Google candidates can apply on your site without being redirected or creating an account. |
Off |
| Hiring Organization Name Override | Replaces the company name from Loxo with a fixed name on every job. Leave blank to use each job’s company. | Blank |
| Hiring Organization Same As | URLs that identify the organization, such as your website or LinkedIn page. One per line. Shown only when the name override is set. | Empty |
| Hiring Organization Logo | URL of the organization’s logo image. Shown only when the name override is set. | Blank |
Employment type mapping. Check the auto-mapping after you first enable the schema. Job types with custom names (e.g. “Contract-to-Hire”) fall back to OTHER until you map them.
Remote jobs. A job is treated as remote when Remote work allowed is checked on the job in Loxo. For a remote job to get remote schema, either set Default Telecommute Countries or turn on Use Job Location Country. If neither is set, the job is published with its physical location instead.
Direct Apply. Only turn this on if your job pages use the built-in Lime Staff apply form. Google may penalize listings that claim direct apply but send candidates elsewhere.
Where each schema field comes from
Most of the schema is filled from the job in Loxo, so complete Loxo records produce richer search results.
| Schema field | Source | Required |
|---|---|---|
title |
Job title | Yes |
description |
Job description (inline styles removed) | Yes |
datePosted |
Date the job was published (or created, if no publish date) | Yes |
hiringOrganization.name |
Job’s company, or the Hiring Organization Name Override | Yes |
jobLocation |
Country, state, city and ZIP. City is used only when a state is set. | Yes, at least the country (on-site jobs) |
applicantLocationRequirements |
Telecommute settings above | Yes (remote jobs) |
employmentType |
Job type, via Employment Type Mapping | No |
baseSalary |
Salary, min/max, currency and pay period | No |
validThrough |
Published end date | No |
directApply |
Direct Apply setting | No |
Salary. Salary appears only when the job has a salary and its pay period is hourly, daily, weekly, monthly or yearly. With only a minimum set, Lime Staff outputs a single value; with a maximum too, it outputs a range.
Invalid schema is never output. If a job is missing a required field, Lime Staff stores the schema for review but leaves it off the page, since Google rejects incomplete JobPosting data.
Check your schema
With the schema enabled, the Jobs tab in Lime Staff shows a Schema column with each job’s status:
| Badge | Meaning | What to do |
|---|---|---|
| OK | Valid schema is being output on the job page. | Click the badge to preview the JSON. |
| MF (Missing Fields) | Schema was generated but a required field is empty, so it isn’t output. | Hover to see which fields are missing, fix them in Loxo, then let the job re-sync. Click to preview. |
| NCC (No Country Code) | The job has no country in Loxo, so no schema was generated. | Add the country to the job in Loxo. |
To confirm Google can read a job, paste its public URL into Google’s Rich Results Test and look for a valid Job posting result. After that, track indexing and errors in Google Search Console under Enhancements → Job postings.
Troubleshooting
- No schema on the job page. Confirm the schema is enabled, Use Standard Permalinks is on, and the job shows OK in the Jobs tab.
- Remote job shows a physical address. Remote work isn’t allowed on the job in Loxo, or neither telecommute setting is filled in.
- Wrong employment type. Update Employment Type Mapping and save; all jobs regenerate.
- Salary missing. The job has no salary, or its pay period isn’t hourly, daily, weekly, monthly or yearly.
- Search results take time. Google decides when and whether to show a listing. Valid schema makes a job eligible; it doesn’t guarantee placement.
For developers
These filters let you adjust the schema in code:
| Filter | Use it to |
|---|---|
limestaff_loxo_job_google_job_posting_schema |
Modify the final schema array. Receives $schema, the job object and the raw Loxo data. |
limestaff_jobschema_hiring_organization_name |
Override the hiring organization name. |
limestaff_jobschema_hiring_organization_same_as |
Override the Same As URLs (when the name override is set). |
limestaff_jobschema_hiring_organization_logo |
Override the logo URL (when the name override is set). |
limestaff_loxo_job_compensation_type_normalization_map |
Map Loxo pay periods to Google’s HOUR, DAY, WEEK, MONTH or YEAR. |
limestaff_google_jobposting_schema_required_paths |
Change which fields count as required. Remote- and location-specific variants: ..._remote_required_paths, ..._location_required_paths. |
Example — add an identifier to every posting:
add_filter( 'limestaff_loxo_job_google_job_posting_schema', function ( $schema, $job, $raw ) {
$schema['identifier'] = [
'@type' => 'PropertyValue',
'name' => 'Acme Staffing',
'value' => (string) $raw->id,
];
return $schema;
}, 10, 3 );