In short. A Product can link one 3DModel through subjectOf, with a MediaObject in encoding and a glTF URL in encoding.contentUrl.
Definition: A product page can link a 3D model in its
Productstructured data by assigning a3DModelobject tosubjectOf. Inside that object,encodingcontains aMediaObjectwhosecontentUrlpoints to the model definition file, as shown in Google's merchant listing structured data documentation.
Key facts
- Google's merchant listing example uses
subjectOfto link a product to a3DModelobject. - Schema.org describes a
3DModelas 3D content that may have encodings in one or moreMediaObjectinstances. - Schema.org defines
subjectOfas a property whose value can be aCreativeWorkor anEvent. - Schema.org defines
contentUrlas the actual bytes of a media object and expects a URL on aMediaObject.
What does Google require for the product markup?
Google's merchant listing documentation presents a product example with subjectOf and the 3DModel type. The guide says to specify at most one 3DModel value. It lists encoding as required and defines it as the media for the 3D model.
The relevant structure is:
{
"@context": "https://schema.org/",
"@type": "Product",
"subjectOf": {
"@type": "3DModel",
"encoding": {
"@type": "MediaObject",
"contentUrl": "https://example.com/sofa.gltf"
}
}
}
Google states that only models in glTF format are currently supported. It requires encoding.contentUrl to be a URL for a glTF model definition file, with a .gltf or .glb suffix.
How do subjectOf, 3DModel, and encoding relate?
Schema.org's subjectOf definition describes the property as a CreativeWork or Event about a Thing. In the Google pattern, the value is the 3DModel object. Schema.org describes 3DModel as 3D content that may have encodings in one or more MediaObject instances. The nested encoding object therefore identifies the media representation used for the model.
The type chain in the example has distinct roles: Product identifies the item for sale, 3DModel identifies the 3D content, and MediaObject identifies the file representation. The URL sits inside contentUrl on that MediaObject.
What should encoding.contentUrl contain?
Schema.org defines contentUrl as the actual bytes of the media object, such as an image file or video file. Google applies that property to the 3D model example by requiring a URL to the model definition file. Use the URL of the accessible .gltf or .glb resource in the MediaObject object.
The URL and the file suffix are separate checks: the property value is a URL, while the documented suffix requirement identifies the resource as a glTF definition file. The Google documentation does not list another supported 3D format.
How can you check the markup?
Google says to validate the code with the Rich Results Test and fix critical errors. After deploying pages with the structured data, its guide says to use the URL Inspection tool to test how Google sees the page. Check that the JSON-LD contains one 3DModel, a nested MediaObject, and a contentUrl ending in .gltf or .glb.
Related terms
FAQ
Can subjectOf contain more than one 3D model?
Google's merchant listing documentation says to specify at most one 3DModel value for the product.
Is contentUrl the product page URL?
No. contentUrl identifies the actual media object bytes. In this pattern, it is the URL of the glTF model definition file nested in encoding.
Which file suffixes does Google document?
Google documents .gltf and .glb suffixes for the model definition file.
Sources
- Google Search Central, "Merchant listing (Product, Offer) structured data", 8 September 2026
- Schema.org, "3DModel", 16 September 2026
- Schema.org, "subjectOf", 16 September 2026
- Schema.org, "contentUrl", 16 September 2026
Check how a page reads to answer engines. Open the GEO score analyzer