Google for jobs

In this article

Overview

The JobRelay Connector can add Google for Jobs markup to every job JobRelay sends to your site, so your jobs can appear in Google’s job search results. It is off by default and you turn it on with one setting.

Google for Jobs reads a block of structured data (JobPosting markup in JSON-LD format) from each job page. When the setting is on, the plugin builds that block from the job data JobRelay sent and adds it to the <head> of each single job page. You can find it in your page source by searching for jobrelay-job-schema.

The plugin only adds markup to jobs that came through JobRelay and are live. It also checks each job has everything Google requires, and shows you the result for every job in the WordPress admin.

Turning it on

Go to Settings > JobRelay Settings, tick Output Google for Jobs markup and save.

Leave it unticked if your job board already outputs Google for Jobs markup, for example WP Job Manager. Two sets of markup on one page can confuse Google. If you would rather use JobRelay’s markup, turn off your job board’s markup first (see Turning off other plugins’ Google for Jobs output below).

Default Hiring Organisation

Google needs the name of the organisation hiring for each job. Many providers don’t send a company name, so three optional settings sit under the toggle:

SettingUsed forIf left empty
Default Hiring Organisation NameThe organisation nameYour site name
Default Hiring Organisation WebsiteThe organisation websiteYour site URL
Default Hiring Organisation Logo URLThe organisation logoYour site icon

These are only used when a job arrives without a company name. When a job does send one, the plugin uses that name with the job’s own website and logo, never your defaults. That stops a client company being shown with your agency’s logo.

We recommend filling in the name at least, because a site name often includes a tagline or the word “Jobs”.

Where the data comes from

The markup is built from the full job data JobRelay sent, not from your field mappings, so it works whichever fields you have mapped.

Google fieldRequired?Where it comes from
TitleRequiredThe job’s post title
DescriptionRequiredThe job’s post content
Date postedRequiredThe date the job was published
Hiring organisationRequiredThe job’s company name, or your Default Hiring Organisation settings
LocationRequiredThe job’s geocoded town, region, postcode and country. Bullhorn jobs fall back to the city, state and country Bullhorn sends
Remote jobsInstead of locationJobs with a working arrangement of “Remote” (or Workable’s telecommuting flag) are marked as remote, with the country applicants must be in. Hybrid jobs are not marked as remote
Closing dateRequired when the job has oneThe job’s expiry date
SalaryRecommendedSalary from and to, currency and pay period. Only included when all three are known and the salary isn’t hidden
Employment typeRecommendedThe job type, such as Permanent, Full Time, Contract or Temp
IdentifierRecommendedThe job reference

What each provider sends

ProviderCompany nameLocationSalary
Broadbean, idibu, LogicMelonWhen the recruiter fills it inGeocodedFull
JobAdderNot sentGeocoded, unless Prevent Geo Locating is onFull
LoxoSentGeocodedFull
WorkableNot sentGeocodedNo pay period, so not included
BullhornNot sentGeocoded, or Bullhorn’s own city, state and countryOne figure only, so not included
Spott and XML feedsNot sentNot geocoded, so jobs may show a warningDepends on the feed

Where a provider doesn’t send a company name, your Default Hiring Organisation settings are used.

When markup is not output

A job gets no markup in two kinds of case. Some are expected, because Google says those jobs shouldn’t carry markup. Others are problems, where a live job is missing something Google requires. Broken markup is flagged in Google Search Console, so the plugin leaves it out rather than output something invalid.

Reason shownKindWhat to do
The job was not sent by JobRelay.ExpectedNothing. Only JobRelay jobs get markup
The job is not published.ExpectedNothing. Drafts and private jobs never get markup
The job is password protected.ExpectedNothing. Google can’t read protected pages
The job has been filled.ExpectedNothing. Applies to WP Job Manager’s Filled setting
The job expired on [date].ExpectedNothing, or resend the job with a later expiry date if it is still open
The job schema has been removed by a filter.ExpectedA developer has turned markup off for this job in code
The job has no title.ProblemAdd a title, or resend the job with one
The job has no description.ProblemAdd a description, or resend the job with one
The job location has no country. Check the job was geocoded.ProblemMake sure the job is sent with a location JobRelay can geocode
The job location has a country but no town, city or region.ProblemSend a more specific location, such as a town
The job has no location.ProblemSend a location, or mark the job as Remote

Jobs sent before version 1.4.2 of the plugin (August 2024) don’t have the stored job data the markup is built from. They show as not sent by JobRelay until JobRelay sends them again.

Status icons

Once the setting is ticked, every job shows one of three icons, so you can see at a glance which jobs Google can read. The icons use the same checks as the job page itself, so they always match what is output.

IconMeaningWhat to do
Green tickGoogle for Jobs markup will be outputNothing
Amber warning triangleThe job should have markup but is missing something Google requiresHover to see what is missing, then fix it (see the Problem rows above)
Red XNo markup by design, for example the job is expired, filled, unpublished or wasn’t sent by JobRelayUsually nothing. Hover to see why

In the job list

A Google for Jobs column appears on your jobs screen, after your job board’s own columns. Hover over an icon to see the reason in a tooltip.

On the job edit screen

The same status sits at the top of the JobRelay Data box, with every reason listed underneath. It only shows on jobs JobRelay sent.

If Hide External Jobs is ticked in your JobRelay settings, JobRelay jobs don’t appear in the job list or editor, so you won’t see their icons. The markup is still output on the job pages.

Turning off other plugins’ Google for Jobs output

If your job board plugin already outputs Google for Jobs markup and you want to use JobRelay’s instead, turn the job board’s markup off first, then tick Output Google for Jobs markup. Otherwise each job page will have two sets of markup.

Most plugins have no setting for this, so you add a short code snippet instead. Put it in your child theme’s functions.php file or a code snippets plugin, never in the job board plugin itself, where an update would remove it. After adding a snippet, check one job page with the Rich Results Test and make sure it shows only one Job posting.

PluginHow to turn its markup off
WP Job Manager (and themes built on it, such as Jobify, Cariera and WorkScout)Code snippet
JobBoardWPSetting
Matador JobsSetting in Pro, code snippet in Lite
WP Job OpeningsCode snippet
WP Job PortalCode snippet
Job PostingsCode snippet
WP Job Board ProCode snippet
Rank MathRemove the Job Posting schema, or a code snippet
All in One SEORemove the Job Posting schema
Simple Job BoardNothing to do in the free plugin
Yoast SEONothing to do

WP Job Manager

WP Job Manager has no setting for its markup. Add this snippet:

add_filter( 'wpjm_output_job_listing_structured_data', '__return_false' );

This also covers themes built on WP Job Manager, such as Jobify, Cariera and WorkScout. Source

JobBoardWP

Go to JobBoardWP > Settings > General, tick Disable Google structured data and save. Source

Matador Jobs

In Matador Jobs Pro, go to Matador > Settings > Job Listings and turn off Add Structured Data. In Matador Jobs Lite that setting is locked on, so add this snippet instead:

add_action( 'wp', function () {
	remove_action( 'wp_head', array( 'matador\Job_Listing', 'jsonld' ), 5 );
} );

Plugin page

WP Job Openings

add_filter( 'awsm_job_structured_data', '__return_empty_string' );

Source

WP Job Portal

add_action( 'wp', function () {
	remove_action( 'wp_head', 'wpjobportal_job_posting_structured' );
} );

Plugin page

Job Postings

add_filter( 'job-postings/disable_json_ld', '__return_true' );

This does not work if the plugin’s schema option is set to use Yoast SEO, so set it back to the default first. Plugin page

WP Job Board Pro

Used by themes such as Superio.

add_action( 'init', function () {
	remove_action( 'wp_footer', array( 'WP_Job_Board_Pro_Structured_Data', 'output_structured_data' ) );
}, 20 );

Rank Math

Rank Math only outputs Job Posting markup if a Job Posting schema has been added to your jobs, either on each job or as the default schema for the job post type. Remove it there. If you can’t, this snippet removes Job Posting markup from Rank Math’s output and leaves the rest:

add_filter( 'rank_math/json_ld', function ( $data ) {
	foreach ( $data as $key => $entity ) {
		if ( is_array( $entity ) && isset( $entity['@type'] ) && in_array( 'JobPosting', (array) $entity['@type'], true ) ) {
			unset( $data[ $key ] );
		}
	}
	return $data;
}, 999 );

Source

All in One SEO

All in One SEO Pro only outputs Job Posting markup if you added a Job Posting schema to your jobs in its Schema Generator. Remove it there. Developers can also remove it with the aioseo_schema_output filter.

Simple Job Board and Yoast SEO

The free Simple Job Board plugin doesn’t output Google for Jobs markup. Its paid Google Job Search add-on does, so deactivate that add-on. Yoast SEO doesn’t output Job Posting markup, so there is nothing to turn off.

Testing your markup

  1. Open a job that shows a green tick in your job list.
  2. Copy its URL into Google’s Rich Results Test and run it. If the site isn’t public yet, paste the page source into the test’s Code tab instead.
  3. Check the result lists one Job posting with no errors. Warnings about optional fields such as salary are fine.
  4. Check the page has only one Job posting. If it shows two, your job board or SEO plugin is also outputting markup, so turn that off.

After launch, the Job postings report in Google Search Console shows which job pages Google has found and any problems with them. It can take a few days for new jobs to appear.

Can’t find what you need?

Our integrations team set up every JobRelay site, so they know it inside out. Get in touch and we’ll help.