Which loyalty tier benefits does Google support in structured data?

The Citead team, updated

In short. Use TierBenefitLoyaltyPoints or TierBenefitLoyaltyPrice in hasTierBenefit, with membershipPointsEarned for points.

Definition: hasTierBenefit is a repeated property on MemberProgramTier that names the benefits attached to a loyalty tier. For Google's documented Search implementation, the listed values are loyalty points and a member-only price.

Key facts

What does hasTierBenefit describe?

Google's loyalty-program guide, last updated 8 September 2026, defines MemberProgramTier as a tier under MemberProgram and says a program can have multiple tiers. The required hasTierBenefit value identifies a benefit for members of that tier, and Google allows a tier to have multiple benefits.

Schema.org describes MemberProgramTier as a tier under a loyalty or member program, with hasTierBenefit pointing to TierBenefitEnumeration. The property therefore describes the kind of benefit, while the tier's name identifies the membership level.

Which values can you enter?

Google's accepted-value list contains two entries:

  • https://schema.org/TierBenefitLoyaltyPoints means that members earn loyalty points. When this value is used, Google also instructs you to provide membershipPointsEarned.
  • https://schema.org/TierBenefitLoyaltyPrice means that the tier has a member-only price.

Google also supports the short names without the URL prefix, such as TierBenefitLoyaltyPoints. The full URLs are clearer in JSON-LD because they identify the Schema.org enumeration members directly.

Schema.org's current development page lists TierBenefitLoyaltyReturns and TierBenefitLoyaltyShipping alongside the points and price members. Google's loyalty-program table does not include those two names in its documented hasTierBenefit values, so this entry treats the two Google-listed values as the supported set for Google's Search feature.

How should the JSON-LD look?

The following pattern follows Google's example for a tier that offers both benefits. The points value is paired with membershipPointsEarned, which Google defines as the number of loyalty points earned per currency unit spent.

{
  "@type": "MemberProgramTier",
  "name": "gold",
  "hasTierBenefit": [
    "https://schema.org/TierBenefitLoyaltyPrice",
    "https://schema.org/TierBenefitLoyaltyPoints"
  ],
  "membershipPointsEarned": 10
}

hasTierBenefit is repeated in the sense that it accepts multiple values in the array. If a tier offers points alone, keep the points value and its membershipPointsEarned property together. If it offers the member-only price alone, use the price value without the points property.

How should you check the implementation?

Google's implementation workflow says to include required properties, follow its structured-data guidelines, validate the code with the Rich Results Test, and then use URL Inspection after deployment. Check that each tier has a name and at least one hasTierBenefit value, and that a points benefit has its accompanying membershipPointsEarned value.

FAQ

Can one tier have both loyalty points and a member-only price?

Yes. Google's example places TierBenefitLoyaltyPrice and TierBenefitLoyaltyPoints in the same hasTierBenefit array and includes membershipPointsEarned for the points benefit.

Do I have to write the full Schema.org URLs?

No. Google documents that the short names without the URL prefix are also supported, including TierBenefitLoyaltyPoints. The full URLs remain the form shown in Google's JSON-LD example.

Are returns and shipping Google-supported values here?

Schema.org lists TierBenefitLoyaltyReturns and TierBenefitLoyaltyShipping as enumeration members. Google's loyalty-program documentation lists points and member-only price for hasTierBenefit, so those two additional Schema.org members are outside the values documented on that Google page.

Sources

  1. Google Search Central, "Loyalty program (MemberProgram) structured data", 8 September 2026
  2. Schema.org, "MemberProgramTier", 16 September 2026
  3. Schema.org, "TierBenefitEnumeration", 16 September 2026

Check how a page reads to answer engines. Open the GEO score analyzer

Test a page and see what to fix first

The analysis usually takes less than 10 seconds and needs no account.

400,000+ pages scored in the public benchmark