How To: Structured Data for the WP Job Manager Plugin

The WP Job Manager Plugin creates Structured Data out of the box. However, as almost always, these are not complete. Googles Structured Data Test Tool complains about missing recommended fields:

  • addressLocality
  • addressRegion
  • streetAddress
  • postalCode
  • baseSalary
  • And maybe more.

This post describes how you can build your own using SNIP, the Structured Data Plugin for WordPress.

A) Read the reference

First, you should read through the Structured Data Reference on Googles pages to learn more about what you can and do and what you shouldn’t do.

B) The JobPosting Schema

As you could read on the reference (linked above) you need schema.org’s JobPosting Schema to get a Rich Snippet in Googles (and maybe other search engines) search results.

C) Create a Global Snippet

As you might now, SNIP allows you to create so called Global Snippets. That is a schema syntax that can be populated to multiple pages (in this case: job posts) at once so that you don’t need to create a schema for every single post one by one.

C1) JobPosting

Now head over to “Global Snippets” and create a new one. Then type “JobPosting” into the field where it says “Select a thing”. After selecting schema.org/JobPosting SNIP will load some properties for you already. Of course you can always add more if you need them. The properties are loaded for your convenience so that you don’t have to add them one by one.

The JobPosting schema in SNIP with some pre-loaded properties.
The JobPosting schema in SNIP with some pre-loaded properties.

C2) Properties

Now go through every property and fill them with the right values. This is what I would do:

  • datePosted = Post published date
  • validThrough = Post meta field with field value “_job_expires”
  • title = Post title
  • description = Post content
  • hiringOrganziation = Sub-Schema “Organization”
    • name = Post meta field with field value “_company_name”
    • sameAs = Post meta field with field value “_company_website”
    • url = Post meta field with field value “_company_website”
  • jobLocation = Sub-Schema “Place”
    • name = Post meta field with field value “_job_location”
    • address = Sub-Schema “PostalAddress”
      • postalCode = Direct text input + mark as overridable
      • addressLocality = Post meta field with field value “_job_location”
      • addressRegion = Direct text input + mark as overridable
      • streetAddress = Direct text input + mark as overridable
  • baseSalary = Sub-Schema “MonetaryAmount”
    • currency = Direct Text Input with the Currency Code (like “USD” or “EUR” for example) + maybe mark overridable if this is different within every single job posting
    • value = Sub-Schema “QuantitiveValue”
      • value = Direct Tex Input + mark as overridable
      • unitText = Direct Text Input + mark as overridable
  • employmentType = Direct Text Input + mark as overridable

Note the following: Because the WP Job Manager Plugin does not allow you to set all of the properties you need, you have to mark them overridable. Please have a look at my Structured Data Training, especially the video where I explain how to overwrite global snippet properties to learn more.

To sum it all up, it should look like this:

Full JobPosting Schema with the recommended properties

C3) Position

Don’t forget to set the position of the new schema to target job posting pages only:

Set the rule like this: Post Type is equal to Jobs
Set the rule like this: Post Type is equal to Jobs

D) Allow the usage of SNIP in job postings

Now go to SNIP -> Settings and select “Jobs” for the Post Types. Save your settings.

E) Edit missing fields on a Job Posting

Now:

  1. create a job posting or edit an existing one. Fill all the fields you need within the WP Job Manager Plugin.
  2. Then open up the Global Snippets window by clicking the “Edit global snippets” button in the sidebar.
  3. Click “JobPosting” in the left sidebar of the newly opened window (see screenshot below).
  4. Fill all the fields.
  5. Save your settings and close the window.
Global Snippets Window showing overridable JobPosting properties
Global Snippets Window showing overridable JobPosting properties

F) Remove Structured Data generated by WP Job Manager

Now there is only one thing to do: removing the Structured Data that the WP Job Manager Plugin generates. This needs to be done because otherwise you’ll have two JobPosting schemas on your job postings. This could potentially confuse search engines.

Unfortunately there is no option in the backend of the plugin to remove it. So you need to use add the following code to your themes functions.php or even better: use the plugin that I wrote (see below):

add_filter( 'wpjm_get_job_listing_structured_data', function ( $data ) {
	return '';
} );

The easiest way is to just install the WP Job Manager Structured Data Deactivator plugin that I wrote and is available for free on Github (direct download).

G) Test your Structured Data

Now head over to Googles Structured Data Test Tool and test your job postings. Don’t forget to flush your cache plugins caches (if any).