Google Introduces Media Actions, Powered by JSON-LD Data Feeds
On 12 June Google introduced a new section on its Developers site, Media Actions. These actions “enable users to initiate media content (e.g. songs, albums, movies) on content provider applications via Google Search and the Google Assistant.” This Media Action page, which replaces both the Music and TV and Movies Google Search feature guide pages, is chiefly a pointer to a new section on Google Actions.
At this time Google cautions that “these solutions are for partners only”, and that publishers who want “to create Actions using these solutions” need to request access.
This is a significant change to how Google employs structured data for audio and video content, which has chiefly been used to generate rich results in the search engine result pages (SERPs). Now Google is leveraging structured data to facilitate users’ ability to launch media content directly, both from traditional search results and from Google Assistant (the latter powering Google Home and voice search on Android mobile devices).
With Media Actions Google is chiefly leveraging existing schema.org vocabulary, and especially the Action hierarchy, to extend the functionality of audio and video content on the web.
It is similarly extending the functionality of a now well-established structured data syntax, JSON-LD, by introducing a “data feed for structured data”. This marks the first time that Google has supported an standalone feed of structured data, having until this point only ingested structured data embedded on a web page.
There are, as outlined by Google, three parts to Media Actions: the creation of deeplinks to content; the generation of structured data markup for a publisher’s content catalog and deeplinks; and the provision of structured data markup to Google in the form of a data feed.
Deeplinks for media content and action behavior
Deeplinks are generally expected by Google to initiate the playback of a publisher’s content. There is some difference between the Google-prescribed behavior for Listen Actions (for audio content) and Watch Actions (for video content) and the subsets of different types of audio and video content, but the broad strokes of Google’s expectations for deeplink behavior is similar across different scenarios.
- Content should autoplay on most platforms.
- If the content resides behind a sign-in, the initiated action should begin as soon as the user has authenticated.
- When a user initiates an action on a mobile platform for which they lack an app, they are either directed to a web page where the action can be completed or directed to a location where they can install the app.
The specific behavior of deeplinks is governed by the use of Action markup properties.
Structured data content and action markup
Content markup describes the content itself, including “general attributes, such as name, as well as attributes specific to the content type such as episode and season numbers for TV episodes.”
These “general attributes” include standard schema.org properties like
url that can be applied to all schema.org types (all types of
Thing). Examples of content type-specific properties include the
byArtist property for
For all content and action markup, the value for the JSON-LD
@context key is not schema.org, but rather schema.googleapis.com. schema.googleapis.com is Google’s de facto subdomain for extending schema.org (an “external extension” in schema.org lingo). They’ve previously employed this subdomain to host extensions to schema.org used by the Google Knowledge Graph Search API, allowing them to use properties like
EntitySearchResult in the JSON-LD payload returned for an API query.
Where a referenced property or type already exists in schema.org the requestor is redirected to (https://) schema.org (via a 302 redirect). For example a request for http://schema.googleapis.com/description redirects to https://schema.org/description. One would expect that, for properties not already in schema.org, Google would use the declared
@context to return the item from schema.googleapis.com, but I’ve not yet found a property or type in the markup that exists only in schema.googleapis.com to validate this assumption.
The example markup does, however, declare both schema.org enumeration members that lead to a 404 (e.g. http://schema.org/DesktopWebPlatform), as well as schema.googleapis.com enumeration members that subsequently redirect to schema.org and … 404 (e.g. http://schema.googleapis.com/GoogleVideoCast). ¯\_(ツ)_/¯
The (structured) data feed for media actions
With Media Actions Google has also introduced the concept of a structured data feed. Back in 2015 they alluded to such a feed in their structured data specifications for Local Businesses, which spoke of providing a “a schema.org data feed” for businesses with multiple location, but the linked-to “data feed” returned a 404 and the copy referencing it subsequently disappeared from the page.
The data feed itself consists of two elements. A “DataFeed Envelope” that uses the schema.org
DataFeed type to wrap all of the feed content, and then individual data items that represent each individual entity in the publisher’s catalog, like a
The Actions Data Feed Validation Tool
With all of this comes yet another structured markup validation tool, the Actions on Google Data Feed Validation Tool.
Here’s what the Tool looks like when validating Google’s “simplified feed example“, which lacks required Action properties.
And here’s details of the errors and warnings returned for the dataFeedElement Movie.
Bizzarely, in addition to “Watch Action” and “Listen Action” you can also attempt to validate against the vertical “Dining”. I invite the Internet to speculate of what a “Dining Data Feed” might look like.