What Is priceComponentType Schema?
priceComponentType identifies the role of a UnitPriceSpecification that forms one component of an offer’s total price. It uses a PriceComponentTypeEnumeration value to distinguish components such as an activation fee, cleaning fee, distance fee, downpayment, installment, or subscription charge.
The property is designed for price decomposition. Instead of placing a base subscription, setup charge, and installments into one ambiguous amount, an offer can connect multiple unit price specifications and classify what each component represents.
| Question | Answer | Example |
|---|---|---|
| What does it classify? | A price component within an offer total | ActivationFee |
| Where is it used? | UnitPriceSpecification | One component object per fee role |
| What value type is expected? | PriceComponentTypeEnumeration | Subscription or Installment |
- Use it for a real line-item role.
- Keep every amount and currency explicit.
- Match visible pricing, checkout, and invoice components.
The property classifies composition: priceComponentType explains what a particular price component contributes to the overall offer.
Which priceComponentType Values Are Available?
The current PriceComponentTypeEnumeration includes ActivationFee, CleaningFee, DistanceFee, Downpayment, Installment, and Subscription. Choose only the value that matches the visible and billable role of the component; do not invent new enumeration URLs or force unrelated charges into the nearest label.
The vocabulary is still marked as a new Schema.org area, so implementation feedback and future expansion remain possible. Store component meaning in your own pricing model and map it deliberately to supported enumeration members rather than hardcoding assumptions throughout templates.
| Member | Meaning | Typical offer |
|---|---|---|
| ActivationFee | Activation or initial enablement fee | Telecom or software setup |
| CleaningFee | Cleaning component of total price | Vacation rental |
| DistanceFee | Charge based on distance | Rental car or delivery |
| Downpayment | Up-front portion before later payments | Financed purchase |
| Installment | Periodic payment component | Payment plan |
| Subscription | Recurring subscription component | SaaS plan |
- Identify the invoice role.
- Match it to an exact supported member.
- Leave the property out when no member fits.
- Monitor vocabulary changes before expanding mappings.
Use the exact vocabulary, not a guess: an unsupported fee label should remain visibly described rather than falsely classified.
How Does priceComponentType Work in UnitPriceSpecification?
priceComponentType works by classifying one UnitPriceSpecification connected to an Offer, while the specification’s other properties describe its amount, currency, billing interval, quantity, and validity. Multiple component objects can represent a composite price when each is independently understandable.
A software offer could have a $99 monthly subscription and a $200 activation fee. One UnitPriceSpecification uses Subscription; another uses ActivationFee. The Offer connects them, and visible pricing shows whether both are mandatory.
| Component | Type | Amount | Cadence |
|---|---|---|---|
| Platform access | Subscription | $99 | Monthly |
| Account activation | ActivationFee | $200 | One time |
| Optional financing | Installment | Defined payment | Per installment |
- Use separate objects for components with different roles or cadence.
- Connect each component to the same relevant offer.
- Do not imply that an optional component is mandatory.
See UnitPriceSpecification Schema for the parent type.
Composition should remain legible: every component needs one role, one amount, and one relationship to the total offer.
priceComponentType vs priceType: What Is the Difference?
priceComponentType explains what part of the total price a component represents, while priceType explains the commercial kind of a price, such as list, sale, or manufacturer suggested retail price. Component role and price status are different dimensions.
A subscription component may have a regular list price and a temporary sale price. Subscription is the component type; sale price is the price type. Treating them as interchangeable destroys the distinction between “what is being charged” and “what pricing status this amount has.”
| Dimension | priceComponentType | priceType |
|---|---|---|
| Main question | What component is this? | What kind of price is this? |
| Example value | Subscription | Sale price |
| Primary use | Break down total cost | Distinguish price status |
| Common mistake | Using “sale” as a component | Using “activation fee” as price status |
- First identify the line-item role.
- Then determine whether the amount is list, sale, invoice, or another price type.
- Use both only when both dimensions are truthful.
- Keep visible labels consistent with each meaning.
Read priceType Schema for the price-status dimension.
Remember “part” versus “status”: priceComponentType identifies the charge component; priceType identifies the price’s commercial category.
How Do You Add priceComponentType in JSON-LD?
Add priceComponentType to a UnitPriceSpecification using the canonical URL of the matching PriceComponentTypeEnumeration member. Keep the component object inside the relevant Offer and provide the amount, currency, and cadence needed to understand the charge.
{
"@context": "https://schema.org",
"@type": "Offer",
"priceSpecification": [
{
"@type": "UnitPriceSpecification",
"price": "99.00",
"priceCurrency": "USD",
"priceComponentType": "https://schema.org/Subscription"
},
{
"@type": "UnitPriceSpecification",
"price": "200.00",
"priceCurrency": "USD",
"priceComponentType": "https://schema.org/ActivationFee"
}
]
}| Check | Correct | Incorrect |
|---|---|---|
| Expected value | Supported enumeration member | Free-text “setup” |
| Parent | UnitPriceSpecification | Unrelated Organization |
| Component separation | Different roles use different objects | One amount combines every fee |
| Visibility | Same components appear in pricing terms | Hidden mandatory fee |
Use Novaverb Site Audit to inspect final deployed JSON-LD across offer templates.
The snippet should reconstruct the bill: every component object must correspond to a visible, correctly classified charge.
How Should Subscription, Activation, and Installment Components Be Modeled?
Model subscriptions, activation fees, downpayments, and installments as separate UnitPriceSpecification objects when their role, timing, or recurrence differs. Do not collapse a one-time payment and recurring payment into one amount that obscures the buyer’s first and later bills.
A financed annual software contract might require a downpayment, monthly installments, and a recurring subscription renewal. The page must clarify whether the installment pays down a fixed purchase, while the subscription continues independently.
| Component | Timing | Buyer question |
|---|---|---|
| ActivationFee | Usually one time | Is setup mandatory? |
| Downpayment | Up front | What balance remains? |
| Installment | Scheduled payments | How many payments and how often? |
| Subscription | Recurring | When does it renew or cancel? |
- State the first invoice total.
- State later recurring amounts.
- Show installment count and schedule.
- Separate refundable deposits from downpayments.
Timing is part of price meaning: classify and disclose each component so a buyer can predict the first bill and every later payment.
How Should Cleaning and Distance Fees Be Modeled?
Use CleaningFee for the cleaning component of a total price and DistanceFee for a distance-based component, with each UnitPriceSpecification showing its own amount, currency, quantity basis, and applicability. These values are not general labels for every service fee.
A vacation rental can have a fixed cleaning charge. A vehicle rental can have a distance charge per mile after an allowance. When distance pricing uses increments, connect the unit and billing step to the same component.
| Offer | Component type | Needed context | Main risk |
|---|---|---|---|
| Vacation rental | CleaningFee | Per stay or per booking | Hiding it from total |
| Car rental | DistanceFee | Per mile or kilometer | Missing included allowance |
| Delivery | DistanceFee when genuinely distance-based | Origin, destination, and unit | Using it for a flat delivery fee |
| Housekeeping subscription | Do not assume CleaningFee | Offer may be a subscription service | Confusing service product with fee component |
- Identify whether the charge is fixed or measured.
- State the unit and billing increment when measured.
- Show mandatory fees before checkout.
- Verify the invoice uses the same calculation.
See billingIncrement Schema for charge steps.
Classify the actual line item: the enum describes a fee component, not the general industry of the offer.
How Do You Validate priceComponentType Markup?
Validate priceComponentType by checking the enumeration member, UnitPriceSpecification placement, component amount, currency, cadence, optionality, total-price reconciliation, and invoice agreement. Syntax alone cannot prove that a fee is correctly classified or disclosed.
| Layer | Evidence | Pass condition |
|---|---|---|
| Vocabulary | Enumeration URL | Supported exact member |
| Graph | Entity relationship | Value belongs to UnitPriceSpecification |
| Amount | Pricing configuration | Component price and currency match |
| Timing | Billing terms | One-time or recurring cadence is clear |
| Total | Calculator and checkout | Mandatory components reconcile |
| Invoice | Final line items | Roles and amounts match markup |
- Test offers with one component and multiple components.
- Test optional and mandatory fees separately.
- Test first invoice and renewal invoice.
- Re-crawl after pricing or billing changes.
Connect component evidence with the broader Novaverb SEO tools system.
Validation ends at reconciliation: structured components must add up in the same way visible pricing and invoices do.
How Can Price Components Support CTR and Pricing Clarity?
Clear price components can support CTR and conversion by showing US buyers the real first payment, recurring charge, and mandatory fees, but priceComponentType does not guarantee rankings or a rich result. The gain comes from matching the search promise to the total cost.
“SEO software for $99/month” is incomplete if every account requires a $500 activation fee. A title or description can emphasize “no setup fee” only when pricing data and checkout confirm it. When a fee exists, the landing page should present it beside the subscription rather than behind a modal.
| Surface | Action | Measure |
|---|---|---|
| Search snippet | Frame the actual recurring and initial cost | CTR by pricing-intent query |
| Pricing page | Separate mandatory components | Plan comparison engagement |
| Checkout | Reconcile first and later payments | Checkout completion |
| Invoice | Use understandable line-item names | Billing support contacts |
Search Console is authoritative for clicks, impressions, CTR, and position. Novaverb’s crawl is authoritative for the pricing content actually present. Use the free backlink checker for one off-page signal.
Track qualified trials or purchases beside CTR. A clearer total price may lower low-intent clicks while improving buyer quality and reducing billing disputes.
For an SEO SaaS offer, build a price-component matrix before writing search copy. Put the base subscription, onboarding or activation fee, optional managed-service component, usage overage, discount, and tax treatment in separate rows. Only map rows to priceComponentType when an official enumeration member fits. This prevents a generic “from $99” claim from hiding the first-month total or presenting an optional service as part of every account.
CTR experiments should compare messages such as “no activation fee,” “monthly subscription,” or “installment option” only when those distinctions are durable and visible. Record the exact page state and billing configuration alongside the Search Console window. Then compare qualified trials, first-invoice completion, and billing questions. A component message is commercially useful when it attracts buyers whose expected payment schedule matches the actual offer.
Transparent composition attracts the right click: buyers should know what they pay now, later, and only when a condition applies.
priceComponentType Schema FAQ
priceComponentType classifies supported line-item roles within UnitPriceSpecification and should not be used as free-form fee text. These answers address the implementation choices most likely to cause invalid or misleading component markup.
What values can priceComponentType use?
Can I use “setupFee” as a custom value?
Is priceComponentType the same as priceType?
Can an Offer contain several components?
Should optional fees be marked up?
Can a subscription have an activation fee?
Does this property guarantee a search feature?
When should components be audited?
| Requirement | Ready when |
|---|---|
| Member | Exact supported enumeration fits |
| Parent | Value belongs to UnitPriceSpecification |
| Amount | Price and currency match the component |
| Visibility | Mandatory and optional roles are clear |
| Reconciliation | Checkout and invoice reproduce components |
The final rule is line-item truth: every classified component must correspond to a real, visible, and reconcilable part of the offer’s total price.