Merchant shipping policy (ShippingService) structured data
Many merchants have shipping policies that outline the process of shipping purchased products for customers.
When you add ShippingService structured data to your site, Google Search can use this information to
display shipping information alongside your products and in knowledge panels in Search results.
ShippingService lets you specify details such as shipping costs and delivery times depending on product characteristics such as product weight, dimensions, or delivery location.
A standard shipping policy for your business that applies to most or all products you sell can be specified using
the ShippingService structured data type nested under the Organization
structured data type using the hasShippingService property.
How to add structured data
Structured data is a standardized format for providing information about a page and classifying the page content. If you're new to structured data, you can learn more about how structured data works.
Here's an overview of how to build, test, and release structured data.
- Add the required properties. Based on the format you're using, learn where to insert structured data on the page.
- Follow the guidelines.
- Validate your code using the Rich Results Test and fix any critical errors. Consider also fixing any non-critical issues that may be flagged in the tool, as they can help improve the quality of your structured data (however, this isn't necessary to be eligible for rich results).
- Deploy a few pages that include your structured data and use the URL Inspection tool to test how Google sees the page. Be sure that your page is
accessible to Google and not blocked by a robots.txt file, the
noindextag, or login requirements. If the page looks okay, you can ask Google to recrawl your URLs. - To keep Google informed of future changes, we recommend that you submit a sitemap. You can automate this with the Search Console Sitemap API.
Examples
This example shows for the US and Canada there is free 2-day shipping for orders over $29.99, otherwise 3-day shipping for $3.49. For Mexico, there is no shipping for orders under $50, otherwise there is 4-day shipping with a 10% shipping cost.
<html>
<head>
<title>Our shipping policy</title>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "https://schema.org/Organization",
"hasShippingService": {
"@type": "ShippingService",
"@id": "#us_ca_mx_standard_shipping",
"name": "Standard shipping policies for US, Canada and Mexico",
"description": "US and Canada: Free 2-day shipping for orders over $29.99,
otherwise 3-day shipping for $3.49.
Mexico: No shipping to Mexico for orders under $50,
otherwise 10% shipping cost and 4-day shipping.",
"fulfillmentType": "FulfillmentTypeDelivery",
"handlingTime": {
"@type": "ServicePeriod",
"cutoffTime": "14:30:00-07:00",
"duration": {
"@type": "QuantitativeValue",
"minValue": "0",
"maxValue": "1",
"unitCode": "DAY"
},
"businessDays": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
]
},
"shippingConditions": [
{
"@type": "ShippingConditions",
"shippingDestination": [
{
"@type": "DefinedRegion",
"addressCountry": "US"
},
{
"@type": "DefinedRegion",
"addressCountry": "CA"
}
],
"orderValue": {
"@type": "MonetaryAmount",
"minValue": "0",
"maxValue": "29.99",
"currency": "USD"
},
"shippingRate": {
"@type": "MonetaryAmount",
"value": "3.49",
"currency": "USD"
},
"transitTime": {
"@type": "ServicePeriod",
"duration": {
"@type": "QuantitativeValue",
"minValue": "1",
"maxValue": "2",
"unitCode": "DAY"
},
"businessDays": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
]
}
},
{
"@type": "ShippingConditions",
"shippingDestination": [
{
"@type": "DefinedRegion",
"addressCountry": "US"
},
{
"@type": "DefinedRegion",
"addressCountry": "CA"
}
],
"orderValue": {
"@type": "MonetaryAmount",
"minValue": "30",
"currency": "USD"
},
"shippingRate": {
"@type": "MonetaryAmount",
"value": "0",
"currency": "USD"
},
"transitTime": {
"@type": "ServicePeriod",
"duration": {
"@type": "QuantitativeValue",
"minValue": "1",
"maxValue": "1",
"unitCode": "DAY"
},
"businessDays": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
]
}
},
{
"@type": "ShippingConditions",
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "MX"
},
"orderValue": {
"@type": "MonetaryAmount",
"minValue": "0",
"maxValue": "49.99",
"currency": "USD"
},
"doesNotShip": true
},
{
"@type": "ShippingConditions",
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "MX"
},
"orderValue": {
"@type": "MonetaryAmount",
"minValue": "50",
"currency": "USD"
},
"shippingRate": {
"@type": "ShippingRateSettings",
"orderPercentage": "0.10"
},
"transitTime": {
"@type": "ServicePeriod",
"duration": {
"@type": "QuantitativeValue",
"minValue": "2",
"maxValue": "3",
"unitCode": "DAY"
},
"businessDays": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
]
}
}
]
}
// Other Organization-level properties
// ...
}
</script>
</head>
<body>
</body>
</html>Guidelines
For your shipping policy markup to be eligible for usage in Google Search, you must follow these guidelines:
Technical guidelines
-
We recommend placing shipping policy information on a single page on your site that describes the
shipping policy of your business. You don't need to include it on every page of your site. Include the
ShippingServicestructured data type under theOrganizationstructured data type. Refer also to the Organization markup for more information. -
If you have a non-standard shipping policy for a specific product, specify the
OfferShippingDetailsstructured data type directly under theOfferstructured data type. Note that the properties supported for offer-level shipping policies are a subset of the properties supported for organization-level shipping policies. See merchant listing markup for the subset of properties that are supported for product-level shipping policies.
Structured data type definitions
You must include the required properties for your structured data to be eligible for usage in Google Search. You can also include recommended properties to add more information about your return policies, which could provide a better user experience.
ShippingService (nested under Organization
using the hasShippingService property)
Use the following properties to describe the standard shipping services for your business.
| Required properties | |
|---|---|
shippingConditions |
Specify the shipping cost and/or delivery times that apply for a particular set of conditions, for example,
a product weight range, product dimensions, order value, or delivery location. A |
| Recommended properties | |
|---|---|
name |
A unique name for your shipping service, if applicable. For example, "Standard Shipping". |
description |
A description of your shipping service, if applicable. This is typically more comprehensive than the name. |
fulfillmentType |
How the product is delivered to the customer for this shipping service, if applicable.
|
handlingTime |
Optional information about handling times (for example, in a warehouse) after receiving an order, if applicable. See also the list ofServicePeriod
properties under ShippingService supported by Google.
|
validForMemberTier |
The loyalty program and tier that this shipping service is valid for, if applicable. You can specify multiple member tiers if the shipping settings are the same for all of the tiers.
If you use the
The loyalty programs and tiers that you offer for your business can either be
defined in your Merchant Center account or using the Here's an example of the "validForMemberTier": { "@type": "MemberProgramTier", "name": "silver", "isTierOf": { "@type": "MemberProgram", "name": "member-plus" } } Here's an example of the "validForMemberTier": { "@id": "https://www.example.com/com/member-plus#tier_silver" } |
ServicePeriod (for handling times)
To specify shipping handling times use class ServicePeriod.
Here's an example of a ServicePeriod object where orders are processed Monday through Friday,
with a cutoff time of 10:30 PM Eastern Standard Time. The duration of the handling time is between 0 and 2 days
(where a handling time of 0 means orders are processed the same day if received before the cutoff time).
"handlingTime": { "@type": "ServicePeriod", "businessDays": [ "https://schema.org/Monday", "https://schema.org/Tuesday", "https://schema.org/Wednesday", "https://schema.org/Thursday", "https://schema.org/Friday" ], "cutoffTime": "22:30:00-05:00", "duration": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 2, "unitCode": "DAY" } }
| Recommended properties | |
|---|---|
businessDays |
The days of the week when received orders are processed, if applicable. |
cutoffTime |
The time after which orders received on a day are not processed that same day, if applicable. For orders processed after cutoff time, one day gets added to the delivery time estimate. The time is indicated using the ISO-8601 time format, for example "23:30:00-05:00" represents 6:30 pm Eastern Standard Time (EST) which is 5 hours behind Coordinated Universal Time (UTC). |
duration |
The delay between the receipt of an order and the goods leaving the warehouse, if applicable. |
QuantitativeValue (for shipping handling times)
Class QuantitativeValue is used to represent minimum and maximum order handling times.
You must provide either value (for a fixed handling time) or maxValue
(for an upper bound for handling time) together with the unitCode. minValue can optionally be provided to specify a lower bound for handling time.
| Recommended properties | |
|---|---|
maxValue |
The maximum number of days. The value must be a non-negative, whole number. |
minValue |
The minimum number of days, if applicable. The value must be a non-negative, whole number. |
unitCode |
The units of the minimum/maximum values. The value must be |
value |
The exact number of handling days, if known. The value must be a non-negative, whole number.
If provided, |
ShippingConditions (nested under ShippingService
using the shippingConditions property)
Use the following properties to describe the conditions and associated costs and transit times for a shipping service.
If no shipping destination is specified, the shipping conditions are applicable to all shipping destinations worldwide.
| Recommended properties | |
|---|---|
shippingOrigin |
Indicates shipping origin, if applicable. See the list of |
shippingDestination |
Indicates shipping destination, if applicable. See the list of |
weight |
The package's weight range for this shipping conditions object, if applicable.
See also the list of |
numItems |
The range of the number of products in the order for this shipping conditions object, if applicable.
See also the list of |
orderValue |
The range of the cost of the order for this shipping conditions object, if applicable.
See also the list of |
doesNotShip |
If applicable, set this to |
transitTime |
If applicable, use to specify the expected transit time between leaving the shipping origin (typically a warehouse)
and arriving at the shipping destination (typically the customer). Applies to
shipments from a location in the specified |
shippingRate |
If applicable, use this property to specify the shipping cost for
shipments from a location in the specified |
seasonalOverride |
If applicable, use this property to specify a limited time period for which this shipping conditions object is valid.
See also the list of |
DefinedRegion
DefinedRegion is used to create custom areas so that accurate shipping costs
and transit times can be set across multiple shipping services.
| Required properties | |
|---|---|
addressCountry |
The two-letter country code, in ISO 3166-1 alpha-2 format. |
| Recommended properties | |
|---|---|
addressRegion |
The country-specific region code, if applicable. The region must be a 2- or 3-character ISO 3166-2
subdivision code, without country prefix. Google Search only supports
the US, Australia, and Japan. Examples: Do not provide both a region and postal code information. |
postalCode |
The country-specific postal code, if applicable. For example, |
ServicePeriod (for transit times)
ServicePeriod is used to represent ranges of transit times for an order.
Example:
"transitTime": { "@type": "ServicePeriod", "businessDays": [ "https://schema.org/Monday", "https://schema.org/Tuesday", "https://schema.org/Wednesday", "https://schema.org/Thursday", "https://schema.org/Friday" ], "duration": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 2, "unitCode": "DAY" } }
| Recommended properties | |
|---|---|
businessDays |
The days of the week when an order is an active transit, if applicable. If your organization's business days are Monday through Saturday, you don't need to add this property. |
duration |
The number of business days in transit, if applicable.
See also the list of |
QuantitativeValue (for shipping transit times)
Class QuantitativeValue is used to represent minimum and maximum order transit times.
You must provide either value (for a fixed transit time) or maxValue
(for an upper bound for transit time) together with the unitCode. minValue
can optionally be provided to specify a lower bound for transit time.
| Recommended properties | |
|---|---|
maxValue |
The maximum number of days. The value must be a non-negative, whole number. |
minValue |
The minimum number of days, if applicable. The value must be a non-negative, whole number. |
value |
The exact number of transit days, if known. The value must be a non-negative, whole number.
If provided, |
unitCode |
The transit time unit. The value must be |
QuantitativeValue (in the context of shipping packing dimensions)
QuantitativeValue is used in the context of ShippingConditions to
represent ranges of values of shipping packing dimensions (weight and numItems) for which a particular
shipping rate and transit time apply.
Either minValue or maxValue must be provided. minValue
defaults to 0 and maxValue defaults to infinity when not provided.
| Recommended properties | |
|---|---|
maxValue |
The maximum number for the dimension ( |
minValue |
The minimum number for the dimension ( |
unitCode |
A unit relevant to the dimension (
|
MonetaryAmount (in the context of shipping conditions)
MonetaryAmount is used in the context of shipping conditions to represent
ranges of order values for which a particular shipping rate and delivery time apply.
Either minValue or maxValue must be provided. minValue
defaults to 0 and maxValue defaults to infinity when not provided.
Note that the MonetaryAmount type is also used in a different format to
specify shipping costs.
| Required properties | |
|---|---|
maxValue |
The maximum value of the order. Defaults to infinity when not provided. |
minValue |
The minimum value of the order. Defaults to 0 when not provided. |
currency |
The currency code for the order value in ISO 4217 format. |
MonetaryAmount (in the context of shipping rate)
MonetaryAmount is used in the context of shipping rates to specify a specific or maximum
shipping rate for a given shipping condition. MonetaryAmount is used as a simpler alternative to
the more complex ShippingRateSettings and can be used when you just need to specify a
specific or maximum shipping rate. Either maxValue or value must be provided together
with currency.
| Required properties | |
|---|---|
maxValue |
The maximum shipping cost for the given shipping condition. Do not specify |
value |
The fixed shipping cost for the given shipping condition. For free shipping, use |
currency |
The currency code for the shipping cost in ISO 4217 format. |
ShippingRateSettings (in the context of shipping rate)
ShippingRateSettings is used in the context of shipping rates to specify the
shipping rate for a given shipping condition as a percentage of the order value or weight of
the ordered goods. Either orderPercentage or weightPercentage must
be provided when using ShippingRateSettings.
| Recommended properties | |
|---|---|
weightPercentage |
The shipping cost for the given shipping condition as a fraction of the weight of the shipped goods.
Use a value between |
orderPercentage |
The shipping cost for the given shipping condition as a fraction of the order value.
Use a value between |
OpeningHoursSpecification (in the context of seasonal shipping overrides)
OpeningHoursSpecification is used in the context of shipping conditions to
represent when the condition is valid, for example due to seasonal holidays. At least one of
validFrom and validThrough must be provided when using
OpeningHoursSpecification.
| Recommended properties | |
|---|---|
validFrom |
The first date when the shipping condition is valid, in ISO 8601 format. |
validThrough |
The last date when the shipping condition is valid, in ISO 8601 format. |
Alternative approach to configuring shipping settings with Google
Retailer shipping policies can get complicated and may change frequently. If you're having trouble indicating and keeping your shipping details up-to-date with markup and have a Google Merchant Center account, consider configuring your delivery settings in Google Merchant Center. You can alternatively configure account-level shipping policies in Search Console, which get automatically added to Merchant Center.
Combining multiple shipping configurations
If you're combining various shipping configurations, keep in mind how you can override your policy information based on the order of precedence. For example, if you provide both shipping policy markup on your site and shipping policy settings in Search Console, Google will only use the information provided in Search Console.
Google uses the following order of precedence (from strongest to weakest):
- Content API for Shopping (account level shipping settings)
- Settings in Merchant Center or Search Console
- Product-level merchant listing markup
- Organization-level markup
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.