EmployerAggregateRating schema: employer ratings in Google job search

EmployerAggregateRating schema summarizes what many users think of a company as a place to work: an overall score and how many ratings it comes from. It is meant for sites where people rate employers, such as job boards, career communities and workplace review sites, and it feeds the ratings shown in Google's job search experience.

The rule that decides eligibility is about where ratings come from. Users must be able to post their own ratings on your site, your site must host them, and the count and score must reflect those real ratings. A company can't publish a score about itself, and a job board can't copy a rating from another site.

JSON-LD example

Copy this into a <script type="application/ld+json"> tag and replace the values with your own.

json
{
  "@context": "https://schema.org",
  "@type": "EmployerAggregateRating",
  "itemReviewed": {
    "@type": "Organization",
    "name": "Harbor Street Bakery Co.",
    "sameAs": "https://harborstreetbakery.example.com"
  },
  "ratingValue": 4.2,
  "bestRating": 5,
  "worstRating": 1,
  "ratingCount": 318
}

Properties

PropertyStatusWhat it is
itemReviewedRequiredThe Organization being rated, with its name. The rating must be about one specific hiring organization.
ratingValueRequiredThe score: a number, a fraction or a percentage, such as 4.2, "6 / 10" or "84%".
ratingCount or reviewCountRequiredAt least one. ratingCount is the number of ratings on your site; reviewCount counts people who left a review, with or without a score.
bestRatingRecommendedThe top of your scale. Google assumes 5 when it's missing.
worstRatingRecommendedThe bottom of your scale. Google assumes 1 when it's missing.
itemReviewed.sameAsRecommendedThe employer's own website, which helps Google match the rating to the right company.

The three content rules

Google's content guidelines for this type fit in three lines:

  1. Users must be able to post their own ratings on your site, and your site must host them.
  2. The number of ratings must reflect ratings users actually gave.
  3. The overall score must be calculated correctly from those ratings.

The technical rules add that the ratings must be visible on the page carrying the markup, obviously enough that a visitor can see it's a ratings page, and that the rating must be about one employer. "Top 10 places to work in Denver" or "tech companies" are categories, not hiring organizations, so list pages don't qualify.

Scales, fractions and percentages

Google converts other scales to its five-star display. If your site rates employers out of 10 or 100, say so with bestRating and worstRating; Google's own example uses 91 on a 1 to 100 scale. Fractions like "6 / 10" and percentages like "60%" carry their scale with them, so no extra properties are needed.

Choose the count carefully. ratingCount is the number of scores. reviewCount is the number of people who wrote a review, whether or not they gave a score. If your site allows written reviews without stars, the two numbers differ, and the one you publish should match the one shown on the page.

Company pages on a WordPress job board

Job board plugins typically store employers as a taxonomy or custom post type, and review add-ons store ratings per company. The markup belongs on the company's profile page, next to the visible ratings, not on each job listing.

Build it from the stored ratings so the numbers update with every new rating, and add it with Hydrogen SEO's hydrogen_seo_schemas filter:

php
add_filter( 'hydrogen_seo_schemas', function ( $schemas ) {
    if ( is_tax( 'job_company' ) ) {
        $term  = get_queried_object();
        $stats = my_board_rating_stats( $term->term_id ); // Your code: average and count from stored ratings.
        if ( $stats['count'] > 0 ) {
            $schemas[] = [
                '@context'     => 'https://schema.org',
                '@type'        => 'EmployerAggregateRating',
                'itemReviewed' => [ '@type' => 'Organization', 'name' => $term->name ],
                'ratingValue'  => round( $stats['average'], 1 ),
                'ratingCount'  => $stats['count'],
            ];
        }
    }
    return $schemas;
} );

Use your plugin's actual taxonomy name in place of job_company, and skip companies with no ratings rather than printing a zero.

How it relates to JobPosting and review snippets

EmployerAggregateRating describes the employer; JobPosting describes one vacancy. A job board usually needs both: JobPosting on each listing and the rating on the company page. Earlier in the feature's life Google told sites to use review snippet markup for employer ratings; it now recommends moving from review snippets to this dedicated type. Don't print both for the same company.

Common questions

Can an employer add ratings to its own careers page?

Only ratings that users post and your site hosts count, and they must reflect real ratings. A company-chosen score about itself doesn't meet that rule.

Do I need ratingCount and reviewCount?

One of them is required. Use whichever matches the number shown on the page.

What scale does Google assume?

A five-point scale from 1 to 5 unless you set bestRating and worstRating.

Can I use ratings imported from another review site?

No. Google says the ratings must be posted by users on your site and hosted there.