Estimated salary (Occupation
) structured data
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. OccupationAggregationByEmployer
structured data allows salary estimate providers to aggregate occupations by factors such as
experience levels or hiring organization.
Estimated salaries can appear in the job experience on Google Search and as a salary estimate rich result for a given occupation.
如何添加结构化数据
结构化数据是一种提供网页相关信息并对网页内容进行分类的标准化格式。如果您不熟悉结构化数据,可以详细了解结构化数据的运作方式。
下面概述了如何构建、测试和发布结构化数据。如需获得向网页添加结构化数据的分步指南,请查看结构化数据 Codelab。
- 添加必要属性。根据您使用的格式,了解在网页上的什么位置插入结构化数据。
- 遵循指南。
- 使用富媒体搜索结果测试验证您的代码,并修复所有严重错误。此外,您还可以考虑修正该工具中可能会标记的任何非严重问题,因为这些这样有助于提升结构化数据的质量(不过,要使内容能够显示为富媒体搜索结果,并非必须这么做)。
- 部署一些包含您的结构化数据的网页,然后使用网址检查工具测试 Google 看到的网页样貌。请确保您的网页可供 Google 访问,不会因 robots.txt 文件、
noindex
标记或登录要求而被屏蔽。如果网页看起来没有问题,您可以请求 Google 重新抓取您的网址。 - 为了让 Google 随时了解日后发生的更改,我们建议您提交站点地图。Search Console Sitemap API 可以帮助您自动执行此操作。
Examples
Occupation example
The following JSON-LD example shows a simple Occupation
with salary estimate data:
<html> <head> <title>Software Developer, Applications</title> <script type="application/ld+json"> { "@context": "https://schema.org/", "@type": "Occupation", "name": "Software Developer, Applications", "mainEntityOfPage": { "@type": "WebPage", "lastReviewed": "2024-07-23T14:20:00-05:00" }, "description": "Develops information systems by designing, developing, and installing software solutions", "estimatedSalary": [ { "@type": "MonetaryAmountDistribution", "name": "base", "currency": "USD", "duration": "P1Y", "percentile10": "100000.5", "percentile25": "115000", "median": "120000.28", "percentile75": "130000", "percentile90": "150000" } ], "occupationLocation": [ { "@type": "City", "name": "Mountain View" } ] } </script> </head> <body> </body> </html>
Occupation Aggregation by Employer example
The following JSON-LD example shows a more complex example of
OccupationAggregationByEmployer
with salary estimate data:
<html> <head> <title>App/Web App Developer</title> <script type="application/ld+json"> { "@context": "https://schema.googleapis.com/", "@type": "OccupationAggregationByEmployer", "name": "App/Web App Developer", "mainEntityOfPage": { "@type": "WebPage", "lastReviewed": "2024-07-23T14:20:00-05:00" }, "description": "Develops information systems by designing, developing, and installing software solutions.", "estimatedSalary": [ { "@type": "MonetaryAmountDistribution", "name": "base", "currency": "USD", "duration": "P1Y", "percentile10": "100000.5", "percentile25": "115000", "median": "120000.28", "percentile75": "130000", "percentile90": "150000" }, { "@type": "MonetaryAmountDistribution", "name": "bonus", "currency": "USD", "duration": "P1Y", "percentile10": "10000", "percentile25": "20000", "median": "25000", "percentile75": "27000", "percentile90": "60000" } ], "occupationLocation": [ { "@type": "State", "name": "Oregon" }, { "@type": "State", "name": "Washington" }, { "@type": "State", "name": "California" } ], "hiringOrganization": { "@type": "Organization", "name": "Google LLC" }, "sampleSize":1000, "industry": "Technology", "jobBenefits": "6 weeks paid vacation every year", "yearsExperienceMin": 3, "yearsExperienceMax": 7 } </script> </head> <body> </body> </html>
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
orOccupationAggregationByEmployer
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.
- Only specify properties 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 differentoccupationLocation
. - 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 must 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"
- Don't be too broad:
Structured data type definitions
This section describes the structured data types related to salary estimates.
You must include the required properties for your content to be eligible for display the job experience on Google and rich results. You can also include the recommended properties to add more information about your content, which could provide a better user experience.
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.
The Google-supported properties are the following:
Required properties | |
---|---|
estimatedSalary |
Array of The estimated salary for this occupation in the given
The following example shows an estimated salary range: "estimatedSalary": [{ "@type": "MonetaryAmountDistribution", "name": "base", "currency": "USD", "duration": "P1Y", "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 Here's an example with a bonus: "estimatedSalary": [ { "@type": "MonetaryAmountDistribution", "name": "base", "currency": "USD", "duration": "P1Y", "minValue": "100000", "maxValue": "150000", "median": "124900" }, { "@type": "MonetaryAmountDistribution", "name": "bonus", "currency": "USD", "duration": "P1Y", "minValue": "0", "maxValue": "34500", "median": "4450" } ] |
estimatedSalary.duration |
The period of time that it takes to earn the estimated salary in ISO 8601 date format. For example, if the estimated salary is earned over the course of one year, use |
estimatedSalary.name |
The type of value. You must specify the base salary. Other types of compensation are optional. For example, "Base", "Bonus", "Commission". |
name |
The title of the occupation. This property allows unstructured text. For example, "Software Engineer". Best practices:
|
occupationLocation |
Array of The place for which this occupational description applies. Define the location
at the city, state, or country level on the one Granular example (recommended) "occupationLocation": { "@type": "City", // Maximum level of granularity (recommended) "name": "Mountain View, CA, US" // City, State, and Country inputted on same property } Less granular examples Here are two examples with less granularity that are still acceptable:
"occupationLocation": { "@type": "State", "name": "CA, US" } "occupationLocation": { "@type": "Country", "name": "US" } Best practices:
|
Recommended properties | |
---|---|
description |
The description of the occupation. The Additional guidelines:
|
estimatedSalary.currency |
The ISO 4217 3-letter currency code for the value. For example, "USD" or "CAD". |
estimatedSalary.median |
The median (or "middle") value. For example, half of the salaries for this occupation are at or below this value. |
estimatedSalary.percentile10 |
The 10th percentile value. For example, 10% of the salaries for this occupation are at or below this value. |
estimatedSalary.percentile25 |
The 25th percentile value. For example, 25% of the salaries for this occupation are at or below this value. |
estimatedSalary.percentile75 |
The 75th percentile value. For example, 75% of the salaries for this occupation are at or below this value. |
estimatedSalary.percentile90 |
The 90th percentile value. For example, 90% of the salaries for this occupation are at or below this value. |
mainEntityOfPage |
The main thing being described on the page. |
mainEntityOfPage.lastReviewed |
The date when the estimated salary information was produced, in ISO 8601 format. For example: "mainEntityOfPage": { "@type": "WebPage", "lastReviewed": "2017-07-23T14:20:00-05:00" } |
OccupationAggregationByEmployer
The OccupationAggregationByEmployer
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.
The Google-supported properties are the following:
Required properties | |
---|---|
estimatedSalary |
Array of The estimated salary for this occupation in the given
The following example shows an estimated salary range: "estimatedSalary": [{ "@type": "MonetaryAmountDistribution", "name": "base", "currency": "USD", "duration": "P1Y", "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 Example with a bonus "estimatedSalary": [ { "@type": "MonetaryAmountDistribution", "name": "base", "currency": "USD", "duration": "P1Y", "minValue": "100000", "maxValue": "150000", "median": "124900" }, { "@type": "MonetaryAmountDistribution", "name": "bonus", "currency": "USD", "duration": "P1Y", "minValue": "0", "maxValue": "34500", "median": "4450" } ] |
estimatedSalary.duration |
The period of time that it takes to earn the estimated salary in ISO 8601 date format. For example, if the estimated salary is earned over the course of one year, use |
estimatedSalary.name |
The type of value. You must specify the base salary. Other types of compensation are optional. For example, "Base", "Bonus", "Commission". |
hiringOrganization |
The organization offering a position of this occupation. Set the @context to "https://schema.org/".
The "hiringOrganization": { "@context": "https://schema.org/", "@type": "Organization", "name": "Google LLC" } |
name |
The title of the occupation. This property allows unstructured text. For example, "Software Engineer". Best practices:
|
occupationLocation |
Array of The place for which this occupational description applies. Define the location
at the city, state, or country level on the one Granular example (recommended) "occupationLocation": { "@type": "City", // Maximum level of granularity (recommended) "name": "Mountain View, CA, US" // City, State, and Country inputted on same property } Less granular examples Here are two examples with less granularity that are still acceptable:
"occupationLocation": { "@type": "State", "name": "CA, US" } "occupationLocation": { "@type": "Country", "name": "US" } Best practices:
|
Recommended properties | |
---|---|
description |
The description of the occupation. The Additional guidelines:
|
estimatedSalary.currency |
The ISO 4217 3-letter currency code for the value. For example, "USD" or "CAD". |
estimatedSalary.median |
The median (or "middle") value. For example, half of the salaries for this occupation are at or below this value. |
estimatedSalary.percentile10 |
The 10th percentile value. For example, 10% of the salaries for this occupation are at or below this value. |
estimatedSalary.percentile25 |
The 25th percentile value. For example, 25% of the salaries for this occupation are at or below this value. |
estimatedSalary.percentile75 |
The 75th percentile value. For example, 75% of the salaries for this occupation are at or below this value. |
estimatedSalary.percentile90 |
The 90th percentile value. For example, 90% of the salaries for this occupation are at or below this value. |
industry |
The industry that's associated with the job position. |
jobBenefits |
The description of benefits that are associated with the job. |
mainEntityOfPage |
The main thing being described on the page. |
mainEntityOfPage.lastReviewed |
The date when the estimated salary information was produced, in ISO 8601 format. For example: "mainEntityOfPage": { "@type": "WebPage", "lastReviewed": "2017-07-23T14:20:00-05:00" } |
sampleSize |
The number of data points contributing to the aggregated salary data. For example: "sampleSize": 42 |
yearsExperienceMax |
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 |
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 |
Troubleshooting
If you're having trouble implementing or debugging structured data, here are some resources that may help you.
- If you're using a content management system (CMS) or someone else is taking care of your site, ask them to help you. Make sure to forward any Search Console message that details the issue to them.
- Google does not guarantee that features that consume structured data will show up in search results. For a list of common reasons why Google may not show your content in a rich result, see the General Structured Data Guidelines.
- You might have an error in your structured data. Check the list of structured data errors and the Unparsable structured data report.
- If you received a structured data manual action against your page, the structured data on the page will be ignored (although the page can still appear in Google Search results). To fix structured data issues, use the Manual Actions report.
- Review the guidelines again to identify if your content isn't compliant with the guidelines. The problem can be caused by either spammy content or spammy markup usage. However, the issue may not be a syntax issue, and so the Rich Results Test won't be able to identify these issues.
- Troubleshoot missing rich results / drop in total rich results.
- Allow time for re-crawling and re-indexing. Remember that it may take several days after publishing a page for Google to find and crawl it. For general questions about crawling and indexing, check the Google Search crawling and indexing FAQ.
- Post a question in the Google Search Central forum.