XooCode(){

ParcelDelivery

ParcelDelivery is an Intangible that describes a shipment of one or more items from an origin address to a delivery address. It is the canonical schema.org type for shipping notification emails: Gmail's package tracking (the "track package" button in shipment emails) reads ParcelDelivery directly. It also appears on Order.orderDelivery to link the order to its shipment.

ParcelDelivery has 11 direct properties: trackingNumber (Text), trackingUrl (URL), provider (the carrier Organization), expectedArrivalFrom / expectedArrivalUntil (DateTime range), hasDeliveryMethod (ParcelService / OnSitePickup / DHL / FedEx / UPS / etc.), itemShipped (Product), deliveryAddress (PostalAddress), originAddress (PostalAddress), partOfOrder (Order), and deliveryStatus (DeliveryEvent). Gmail's tracking pane fires on the presence of trackingNumber + provider + expectedArrivalFrom/Until.

Full example of schema.org/ParcelDelivery json-ld markup

The markup is verified as valid with Rich Results Test from Google.

Highlight legend:Required by GoogleRecommendedOptional
schema.org/ParcelDelivery
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ParcelDelivery",
  "trackingNumber": "1Z999AA10123456784",
  "trackingUrl": "https://www.ups.com/track?tracknum=1Z999AA10123456784",
  "provider": { "@type": "Organization", "name": "United Parcel Service", "url": "https://www.ups.com" },
  "hasDeliveryMethod": "https://schema.org/ParcelService",
  "itemShipped": { "@type": "Product", "name": "XooTee Classic - size M - heather gray", "sku": "XTEE-M-HTHR" },
  "deliveryAddress": {
    "@type": "PostalAddress",
    "name": "Priya Chen",
    "streetAddress": "2184 Shattuck Ave",
    "addressLocality": "Oakland",
    "addressRegion": "CA",
    "postalCode": "94704",
    "addressCountry": "US"
  },
  "originAddress": {
    "@type": "PostalAddress",
    "streetAddress": "14 Riverfront Pl",
    "addressLocality": "Dunmore",
    "addressRegion": "PA",
    "postalCode": "18512",
    "addressCountry": "US"
  },
  "expectedArrivalFrom": "2026-04-17T10:00:00-07:00",
  "expectedArrivalUntil": "2026-04-17T20:00:00-07:00",
  "partOfOrder": {
    "@type": "Order",
    "orderNumber": "XCS-2026-04-14-1182",
    "merchant": { "@type": "Organization", "name": "Xoo Code Shop" }
  }
}
</script>

provider vs hasDeliveryMethod vs carrier

All three sound similar and all three appear on ParcelDelivery. provider is the Organization actually carrying the parcel (FedEx, UPS, Royal Mail). hasDeliveryMethod is the DeliveryMethod enum (a classification: ParcelService, OnSitePickup, LockerDelivery). The old carrier property is deprecated in favour of provider; do not use it in new markup.

Status updates

The deliveryStatus property points to a DeliveryEvent, which carries availableFrom, availableThrough, and an HasDeliveryEventStatus. For a simple "out for delivery" email the full DeliveryEvent is overkill; most senders omit deliveryStatus and just update expectedArrivalFrom/Until instead.

Minimal valid version

The smallest markup that still produces a valid ParcelDelivery entity. Use it as the floor. Reach for the advanced example above when you want search engines and AI agents to understand more about your content.

schema.org/ParcelDelivery (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ParcelDelivery",
  "trackingNumber": "1Z999AA10123456784",
  "provider": { "@type": "Organization", "name": "United Parcel Service" },
  "expectedArrivalFrom": "2026-04-17T10:00:00-07:00",
  "expectedArrivalUntil": "2026-04-17T20:00:00-07:00"
}
</script>

Google rich results this unlocks

Markup matching this example makes your page eligible for the following Google Search rich results. The primary target drives the required / recommended property classification in the advanced code block above.

Common ParcelDelivery mistakes

Mistakes that pass validation but silently fail to earn rich results or mislead consumers walking the graph. Avoid these and your markup will be ahead of most sites in the wild.

  1. 01

    Missing expectedArrivalFrom/Until

    Wrong
    ParcelDelivery with only trackingNumber and provider
    Right
    Include expectedArrivalFrom and expectedArrivalUntil as a DateTime range

    Gmail's tracking card surfaces the delivery window prominently. Without the range, Gmail cannot render the ETA and may skip the rich display altogether.

  2. 02

    Using the deprecated carrier property

    Wrong
    "carrier": { "@type": "Organization", "name": "UPS" }
    Right
    "provider": { "@type": "Organization", "name": "United Parcel Service" }

    schema.org/ParcelDelivery.carrier is a legacy property superseded by provider. Google's documentation uses provider exclusively; carrier may be ignored.

  3. 03

    hasDeliveryMethod as a carrier name

    Wrong
    "hasDeliveryMethod": "UPS Ground"
    Right
    "hasDeliveryMethod": "https://schema.org/ParcelService" (the DeliveryMethod enum) with the carrier on provider

    hasDeliveryMethod is an enum of delivery modes (ParcelService, OnSitePickup, LockerDelivery, direct-download), not a carrier name. Put the carrier on provider.

About the example data

A shipping notification for a XooTee Classic order from the Xoo Code Shop in Dunmore, PA, shipped via UPS Ground to a customer in Oakland.

Comments

Loading comments...

Leave a comment