Google Introduces Media Actions, Powered by JSON-LD Data Feeds

by Aaron Bradley on June 15, 2018

in Search Engines, Semantic Web, SEO

Google Introduces Media Actions, Powered by JSON-LD Structured 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 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 properties like name, description and url that can be applied to all types (all types of Thing). Examples of content type-specific properties include the byArtist property for MusicAlbum, and director for Movie.

For all content and action markup, the value for the JSON-LD @context key is not, but rather is Google's de facto subdomain for extending (an "external extension" in lingo). They've previously employed this subdomain to host extensions to 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 the requestor is redirected to (https://) (via a 302 redirect). For example a request for redirects to One would expect that, for properties not already in, Google would use the declared @context to return the item from, but I've not yet found a property or type in the markup that exists only in to validate this assumption.

The example markup does, however, declare both enumeration members that lead to a 404 (e.g., as well as enumeration members that subsequently redirect to and … 404 (e.g. ¯\_(ツ)_/¯

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 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 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 TVEpisode.

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.

Actions on Google Data Feed Validation Tool results for a data feed

And here's details of the errors and warnings returned for the dataFeedElement Movie.

Actions on Google Data Feed Validation Tool results for a movie inside a data feed, showing markup errors and warnings

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.

Actions on Google Data Feed Validation Tool, with the Dining vertical selected

Previous post:

Next post: