Occupation

Occupation structured data allows salary estimate providers to define salary ranges and region-based salary averages for job types, details about the occupation such as typical benefits, qualifications, and educational requirements, and aggregate them by factors such as experience levels or hiring organization.

Use the following schema.org types and Google extensions to define salary estimates and other information for occupations.

Examples

The following JSON-LD example shows a simple Occupation with salary estimate data in the Structured Data Testing Tool:

The following JSON-LD example shows a more complex example of OccupationAggregationByEmployer with salary estimate data in the Structured Data Testing Tool:

Guidelines

You must follow the general structured data quality guidelines and technical guidelines. In addition, the following guidelines apply to Occupation structured data:

Technical guidelines

  • Occupation structured data is standalone data. It does not need to be associated with any other structured data that you provide to Google.
  • Add only a single Occupation, OccupationAggregation, or OccupationAggregationByEmployer to a web page. Don't add more than one of these type definitions per page.
  • Make sure your structured data is consistent with what you show on the page. Here are some examples:
    • You only show the median salary on your page to users, and your structured data only includes those values.
    • You round your yearly salary to the nearest five-thousandth on your page, and you provide the same granularity in the structured data.
  • Most properties should occur only once in a definition, unless otherwise specified.
  • For occupations with different characteristics based on location (for example, the salary range in the US Northeast might be different than one for the Mid-West), create separate web page, each with its own Occupation definition that specifies a different occupationLocation.
  • Don't add salary estimate structured data to listing pages (pages that show a list of occupations).
  • When your pages change, update your sitemaps on a daily basis.

Content guidelines

  • Group similar occupation titles when all jobs have similar salary ranges and descriptions. Occupation titles should be specific, but not too specific that it becomes confusing. Here are some examples:
    • Don't be too broad:

      Not recommended: "Clinical, Counseling, and School Psychologists"

      Recommended: "School Counselor", "Clinical Psychologist", "Clinical Therapist", "Doctor of Psychology"

    • Don't be too specific:

      Not recommended: "Home Health Registered Nurse" and "Registered Nurse (RN)" and "RN - Registered Nurse - Home Health - Travel Nurse"

      Recommended: "Registered Nurse"

Structured data type definitions

This section describes the structured data types related to salary estimates.

You must include the required properties for your structured data to be eligible to display in search results. Any Occupation that is missing the required fields will not be considered for enhanced Search results. You can also include the recommended properties to add more information to your markup, which could provide a better user experience.

You can use Google’s Structured Data Testing Tool to validate your markup.

Occupation

The Occupation type defines information about a job, such as the estimated salary, skills required, and responsibilities. The full definition of Occupation is available at schema.org/Occupation.

Properties
@context

Required

Set the @context to "http://schema.org/". For example:

"@context": "http://schema.org/"
@type

Required

Set the @type to "Occupation". For example:

"@type": "Occupation"
description

Text, Required

The description of the occupation.

The description should be a complete representation of the job, including job responsibilities, qualifications, skills, working hours, education requirements, and experience requirements.

Additional guidelines:

  • Include the description on all leaf pages that a user may land on, not just on the top-level page.
  • The description must uniquely identify the occupation and provide a specific description of what the occupation entails.

    Not recommended: “Internship - An internship is a job training for white collar and professional careers.”

    Recommended: “Data Analyst Intern - An internship working with a data analyst. A data analyst extracts insights from data to help make data driven decisions.”

  • The description can't be the same as the name.
  • Don't include the hiring organization in the description. Instead, use hiringOrganization.
estimatedSalary

Array of MonetaryAmountDistribution, Required

The estimated salary for this occupation in the given occupationLocation. You should specify a salary range or salary estimates based on the percentile rank.

The following example shows an estimated salary range:

...
"estimatedSalary": [{
  "@type": "MonetaryAmountDistribution",
  "name": "base",
  "currency": "USD",
  "unitText": "YEAR",
  "minValue": "100000", // Inherited from QuantitativeValue
  "maxValue": "150000", // Inherited from QuantitativeValue
  "median": "124900" // Inherited from QuantitativeValueDistribution
}],
...

To account for base salary, bonuses, and other forms of monetary compensation, define multiple salaries within the estimatedSalary array. You must specify the base salary. Other types of compensation are optional. For example:

...
"estimatedSalary": [{
  "@type": "MonetaryAmountDistribution",
  "name": "base",
  "currency": "USD",
  "unitText": "YEAR",
  "minValue": "100000",
  "maxValue": "150000",
  "median": "124900"
}, {
  "@type": "MonetaryAmountDistribution",
  "name": "bonus",
  "currency": "USD",
  "unitText": "YEAR",
  "minValue": "0",
  "maxValue": "34500",
  "median": "4450"
}],
...
mainEntityOfPage

WebPage, Recommended

The date when the estimated salary information was produced. The lastReviewed field is in ISO 8601 format; for example:

...
"mainEntityOfPage": {
  "@type": "WebPage",
  "lastReviewed": "2017-07-23T14:20:00-05:00"
},
...
name

Text, Required

The title of the occupation. This field allows free-form text. For example, "Software Engineer".

Best practices:

  • This field should be the title of the occupation only.
  • Don't include job codes, addresses, dates, salaries, or company names in the name field.

    Not recommended: Apply now for IT job -FRENCH speaker in Bucharest

    Recommended: Market Specialist, French speaker

  • Provide concise, readable titles.
  • Don't overuse special characters such as "!" and "*". Abusing special characters might cause your markup to be considered as Spammy Structured Markup. Numbers and characters such as "/" and "-" are acceptable.

    Not recommended: *** WAREHOUSE HIRING NOW!! ON A BUS ROUTE!! ***

    Recommended: Shipping and Receiving Warehouse Associate

occupationLocation

Array of City, State, or Country, Recommended

The place for which this occupational description applies. You can define the location at the city, state, or country level. For example:

...
"occupationLocation": [
  {
    "@type": "City", // Maximum level of granularity
    "name": "Mountain View"
  }
],
...

The location should not be any more specific than the city.

The value of occupationLocation is the location in which the occupation actually takes place, not the location where the salary estimate listing was created.

If a single Occupation type has multiple locations, specify the locations in the occupationLocation array, as the following example shows:

...
"occupationLocation": [
  {
    "@type": "State",
    "name": "Oregon"
  },
  {
    "@type": "State",
    "name": "Washington"
  }
],
...

Data such as salary ranges, educational requirements, and qualifications for the occupation frequently varies based on location. To represent this, define multiple pages, each with its own Occupation definition and a different occupationLocation.

MonetaryAmountDistribution

The MonetaryAmountDistribution type is a statistical distribution of monetary amounts. Use MonetaryAmountDistribution to define the statistical distribution of salary, bonus, and other monetary compensation data for the Occupation definition.

The full definition of MonetaryAmountDistribution is available at schema.org/MonetaryAmountDistribution. In addition to the properties listed below, this type inherits all properties of the QuantitativeValueDistributiontype.

Properties
@type

Required

Set the @type to "MonetaryAmountDistribution".

currency

Text, Recommended

The ISO 4217 3-letter currency code for the value. For example, "USD" or "CAD".

name

Text, Required

The type of value. You must specify the base salary. Other types of compensation are optional. For example, "Base", "Bonus", "Commission".

QuantitativeValueDistribution

The QuantitativeValueDistribution type is a statistical distribution of values.

Use MonetaryAmountDistribution to define the statistical distribution of Occupation structured data.

In addition to the properties listed below, this type inherits all properties of the schema.org QuantitativeValue type. The full definition of QuantitativeValueDistribution is available at schema.org/QuantitativeValueDistribution.

Properties
@type

Required

Set the @type to "QuantitativeValueDistribution".

median

Number, Recommended

The median (or "middle") value. For example, half of the salaries for this occupation are at or below this value.

percentile10

Number, Recommended

The 10th percentile value. For example, 10% of the salaries for this occupation are at or below this value.

percentile25

Number, Recommended

The 25th percentile value. For example, 25% of the salaries for this occupation are at or below this value.

percentile75

Number, Recommended

The 75th percentile value. For example, 75% of the salaries for this occupation are at or below this value.

percentile90

Number, Recommended

The 90th percentile value. For example, 90% of the salaries for this occupation are at or below this value.

unitText

Text, Required

The frequency of the specified value. Typical values for unitText are:

  • "DAY"
  • "HOUR"
  • "MONTH"
  • "WEEK"
  • "YEAR"

OccupationAggregation

The OccupationAggregation type is an extension of Occupation that provides data as an ad hoc collection of jobs. For example, you can specify benefits and minimum years of experience required for jobs when they are aggregated with this type. It is a new schema.org extension proposed by Google.

In addition to the properties listed below, this type inherits all properties of the Occupation type.

Properties
@context

Required

Set the @context to "http://schema.googleapis.com/".

@type

Required

Set the @type to "OccupationAggregation".

sampleSize

Number, Recommended

The number of data points contributing to the aggregated salary data. For example:

"sampleSize": 42
yearsExperienceMax

Number, Recommended

The maximum years of experience that are acceptable for this occupation. For example, a junior position might specify a maximum of 5 years of experience, as the following example shows:

"yearsExperienceMax": 5
yearsExperienceMin

Number, Recommended

The minimum number of years of experience required for this occupation. For example, a senior position might require at least of 10 years of experience, as the following example shows:

"yearsExperienceMin": 10

OccupationAggregationByEmployer

The OccupationAggregationByEmployer type is an extension of OccupationAggregation provides job-related data that is grouped by employer. For example, you can specify the industry and hiring organization for a group of occupations when they are aggregated by the employer. It is a new schema.org extension proposed by Google.

In addition to the properties listed below, this type inherits all properties of the Occupation and OccupationAggregation types.

Properties
@context

Required

Set the @context to "http://schema.googleapis.com/".

@type

Required

Set the @type to "OccupationAggregationByEmployer".

hiringOrganization

Organization, Required

The organization offering a position of this occupation. Set the @context to "http://schema.org/". The hiringOrganization should be the name of the company (for example, “Starbucks, Inc”), and not the specific address of the location that is hiring (for example, “Starbucks on Main Street”). For example:

...
"hiringOrganization": {
    "@context": "http://schema.org/",
    "@type": "Organization",
    "name": "Google, Inc."
},
...

Send feedback about...