My Tool Studio
Schema Markup·4 min read

Podcast Structured Data: Episodes, Series and RSS

Every podcast already publishes machine-readable data, just not for search. Your RSS feed serves Apple and Spotify; your website pages are what search engines read, and those pages are usually bare. This guide covers PodcastSeries and PodcastEpisode markup for the pages on your own domain, how it relates to the feed, a worked example, and the mistakes that make the effort pointless. One thing up front: Google has no podcast rich result, so the aim is clear description, not a special listing.

{"@type": "PodcastEpisode","name": "…","url": "…"}RICH RESULTPodcastEpisode

Schema on top of RSS: why show sites stay invisible

The problem with a player and some notes.

The typical podcast site is built fast: a homepage with a player, a page per episode, show notes pasted in. Traffic comes from the directories, and search contributes little, because to a crawler each episode page is a block of text with an audio player it can't interpret.

Podcast markup changes what those pages declare. The show page states it's a PodcastSeries with a genre, a language, a publisher and a feed. Each episode page states its number, its date, its length and where the audio file lives. That gives search engines and other tools a clear picture that a show exists here and how its episodes fit together.

PodcastSeries and PodcastEpisode: two page shapes

Two types, two templates.

The split maps directly onto your site. PodcastSeries belongs on the show's home: name, description, cover image, genre, inLanguage and webFeed pointing at the RSS URL. The generator also adds a ListenAction aimed at the feed, or at your website when no feed is given.

PodcastEpisode belongs on each episode page, carrying the episode number, datePublished, duration and an associatedMedia MediaObject describing the audio file. The partOfSeries property ties every episode back to the show by name and URL, which lets a crawler assemble eighty scattered pages into one show instead of eighty orphans.

RSS and schema: two channels, two audiences

Parallel outputs, not competitors.

Both carry the same facts, which is why people confuse them. The difference is the reader. RSS is a subscription format: directories poll it, take in new episodes and build their listings from it. Search engines don't treat your feed as your website.

Schema is page-level description for crawlers. It can't get you into Apple Podcasts, and RSS can't tell a search engine what your episode page contains. A complete setup runs both from the same source data, and webFeed tells crawlers where the feed lives.

The Podcast Schema Generator uses that overlap directly. Paste your feed URL and press Import feed: the series form fills from the channel, and the episode form fills from the newest episode, including the audio file, publish date, duration and episode number. Pick any other episode from the dropdown, or set Bulk to the newest 5, 10, 25, 50 or all episodes and use Download all to get every episode block in one file.

A worked PodcastEpisode with audio and series link

Episode 41, fully declared.

For a freelancing show's pricing episode, the essential block reads: {"@type": "PodcastEpisode", "name": "Episode 41: Pricing Freelance Work", "episodeNumber": "41", "associatedMedia": {"@type": "MediaObject", "contentUrl": "https://cdn.example.com/ep41.mp3"}, "partOfSeries": {"@type": "PodcastSeries", "name": "The Solo Desk"}}.

The generator fills in what this fragment leaves out: a datePublished built from date, time and time zone with a live ISO 8601 preview, a duration, and the encodingFormat inside the MediaObject, which it sets from the file extension so an .mp3 carries audio/mpeg. Duration can be typed as PT25M30S, as a clock value like 25:30, or as seconds, and it is converted to ISO 8601 either way.

Tips for podcast markup that stays accurate

Automate or it rots.

Template the episode block into your CMS so every new episode ships with markup from the data you already enter, because hand-pasting JSON per episode tends to stop by episode twelve. For the back catalog, the Bulk option creates the older blocks in one go. Keep the series name and URL in partOfSeries identical across all episodes; small variations make one show look like several.

Point contentUrl at the permanent audio file, not a redirecting tracking URL that may break or be blocked for crawlers. Imported publish times are converted to UTC with a +00:00 offset; the moment in time is the same, but you can switch to local time if you prefer. Take durations from the exported file rather than the planned runtime.

Podcast schema mistakes that undercut the effort

Seen on real show sites.

The recurring problems:

  • Series markup pasted onto every episode page instead of episode markup.
  • No associatedMedia, describing an episode while hiding the one thing that makes it audio.
  • datePublished in a local date format instead of ISO 8601 with an offset.
  • Episode numbers that restart each season with no season context, producing several episode ones.
  • A webFeed URL pointing at an old host's feed that now redirects.

Podcast Schema Generator next to the related generators

When the format shifts.

Shows that publish full video episodes on their site can use the Video Schema Generator for those pages, since Google does show video results for watch pages. Long written show notes that stand alone as articles can carry markup from the Article Schema Generator alongside the episode block.

For an archive page listing the whole back catalog, the ItemList Schema Generator structures the list itself while individual pages keep their episode markup.

Try it now

Open Podcast Schema Generator

The tool is one click away. No sign up, no upload, no payment.

Open Podcast Schema Generator