Media and content apps (news, video, podcasts, blogs, magazines) generate vast amounts of indexable content. Each article, video, or episode is a potential search result that can drive users directly into your app. The challenge is scale: a news app publishes dozens of articles daily, a video platform hosts millions of clips, and a podcast app aggregates thousands of shows.
This guide covers the specific structured data, deep link patterns, and indexing strategies for media apps. For the general app indexing setup, see app indexing and SEO for mobile apps. For getting app content into search, see app content in search results.
Content Types and Schema Markup
Articles and News
For news and blog apps, use Article or NewsArticle schema:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "NewsArticle",
"headline": "Tech Industry Earnings Report Q2 2026",
"author": {"@type": "Person", "name": "Sarah Johnson"},
"datePublished": "2026-06-17T09:00:00Z",
"dateModified": "2026-06-17T10:30:00Z",
"publisher": {
"@type": "Organization",
"name": "YourNewsApp",
"logo": {
"@type": "ImageObject",
"url": "https://www.yournewsapp.com/logo.png"
}
},
"image": "https://www.yournewsapp.com/images/tech-earnings.jpg",
"description": "Major tech companies report mixed Q2 results as AI spending continues to climb",
"mainEntityOfPage": "https://www.yournewsapp.com/articles/tech-earnings-q2-2026",
"potentialAction": {
"@type": "ViewAction",
"target": "https://www.yournewsapp.com/articles/tech-earnings-q2-2026"
}
}
</script>
For news apps, also implement Google News Publisher Center to appear in the Top Stories carousel.
Videos
Video content has strong search presence through Video structured data:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "How to Make Sourdough Bread",
"description": "Step-by-step guide to making sourdough bread at home",
"thumbnailUrl": "https://www.yourvideoapp.com/thumbs/sourdough.jpg",
"uploadDate": "2026-05-20",
"duration": "PT12M30S",
"contentUrl": "https://www.yourvideoapp.com/videos/sourdough-bread",
"embedUrl": "https://www.yourvideoapp.com/embed/sourdough-bread",
"interactionStatistic": {
"@type": "InteractionCounter",
"interactionType": {"@type": "WatchAction"},
"userInteractionCount": 45000
},
"potentialAction": {
"@type": "ViewAction",
"target": "https://www.yourvideoapp.com/videos/sourdough-bread"
}
}
</script>
Videos with this markup can appear in Google's video carousel, video search results, and Google Discover.
Podcasts
For podcast apps, use PodcastEpisode and PodcastSeries:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "PodcastEpisode",
"name": "The Future of AI in Healthcare",
"url": "https://www.yourpodcastapp.com/episodes/ai-healthcare",
"datePublished": "2026-06-15",
"duration": "PT45M",
"description": "Dr. Smith discusses how AI is transforming diagnosis and treatment",
"associatedMedia": {
"@type": "MediaObject",
"contentUrl": "https://cdn.yourpodcastapp.com/episodes/ai-healthcare.mp3"
},
"partOfSeries": {
"@type": "PodcastSeries",
"name": "Tech Health Talks",
"url": "https://www.yourpodcastapp.com/shows/tech-health-talks"
},
"potentialAction": {
"@type": "ListenAction",
"target": "https://www.yourpodcastapp.com/episodes/ai-healthcare"
}
}
</script>
Music
For music streaming apps, use MusicRecording and MusicAlbum:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "MusicRecording",
"name": "Track Title",
"byArtist": {"@type": "MusicGroup", "name": "Artist Name"},
"inAlbum": {"@type": "MusicAlbum", "name": "Album Title"},
"duration": "PT3M42S",
"potentialAction": {
"@type": "ListenAction",
"target": "https://www.yourmusicapp.com/tracks/track-id"
}
}
</script>
Deep Link Patterns for Media Content
URL Structure
Use clean, descriptive URLs that work as both web pages and deep links:
Articles: /articles/{slug}
Videos: /videos/{slug}
Podcasts: /episodes/{slug}
Channels: /channels/{channel-name}
Playlists: /playlists/{playlist-id}
Search: /search?q={query}
Handling Content Updates
Media content changes frequently. Articles are updated, videos are re-uploaded, podcast episodes are corrected. Your deep links must handle versioning:
class ArticleActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val slug = intent.data?.lastPathSegment ?: return
viewModel.loadArticle(slug).observe(this) { result ->
when (result) {
is Success -> showArticle(result.article)
is Redirected -> {
// Article slug changed; redirect to new URL
val newIntent = Intent(Intent.ACTION_VIEW, Uri.parse(result.newUrl))
startActivity(newIntent)
finish()
}
is NotFound -> showArticleFeed()
}
}
}
}
Ephemeral Content
Some media content is temporary (live streams, breaking news). Handle expiration gracefully:
- In the app: Show a "This content is no longer available" message with related content suggestions.
- On the web: Return HTTP 410 (Gone) so Google removes the expired page from the index.
- In the sitemap: Remove expired content URLs promptly.
Scale Considerations
Sitemap Management
Media apps generate content continuously. Automate sitemap generation:
// Generate sitemaps for the last 7 days of content
async function generateRecentSitemap() {
const sevenDaysAgo = new Date(Date.now() - 7 * 86400000).toISOString();
const recentContent = await db.query(
'SELECT slug, updated_at, type FROM content WHERE updated_at > ? ORDER BY updated_at DESC',
[sevenDaysAgo]
);
// Generate sitemap XML with app link annotations
return buildSitemap(recentContent);
}
// Regenerate daily
setInterval(generateRecentSitemap, 86400000);
Use separate sitemaps for different content types (articles, videos, podcasts) and time ranges (this week, this month, archive).
Indexing Frequency
Google crawls content at different rates:
- Breaking news: Can be crawled within minutes (if using IndexNow or ping).
- Regular articles: Crawled within hours to days.
- Evergreen content: Crawled less frequently.
For time-sensitive content, use the Indexing API to request immediate indexing:
async function requestIndexing(url) {
const response = await indexingApi.urlNotifications.publish({
requestBody: {
url,
type: 'URL_UPDATED'
}
});
return response.data;
}
Content Freshness
Google values fresh content for news and trending topics. Ensure your web pages reflect the latest version:
- Update
dateModifiedin structured data when articles are edited. - Use
<lastmod>in sitemaps to signal content freshness. - Publish new web pages for new content immediately (do not batch).
On-Device Indexing for Media Apps
iOS: CoreSpotlight for Viewed Content
Index content that the user has consumed for Spotlight search:
import CoreSpotlight
func indexViewedArticle(_ article: Article) {
let attributes = CSSearchableItemAttributeSet(contentType: .text)
attributes.title = article.headline
attributes.contentDescription = article.summary
attributes.thumbnailData = article.thumbnailData
attributes.contentCreationDate = article.publishedDate
let item = CSSearchableItem(
uniqueIdentifier: "article-\(article.id)",
domainIdentifier: "com.yournewsapp.articles",
attributeSet: attributes
)
item.expirationDate = Calendar.current.date(byAdding: .day, value: 30, to: Date())
CSSearchableIndex.default().indexSearchableItems([item])
}
Android: On-Device Search
Use Android's search APIs to make recently viewed content searchable:
// Index viewed content for on-device search
fun indexArticle(article: Article) {
val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
// Add to search suggestions
val contentValues = ContentValues().apply {
put(SearchManager.SUGGEST_COLUMN_TEXT_1, article.headline)
put(SearchManager.SUGGEST_COLUMN_TEXT_2, article.summary)
put(SearchManager.SUGGEST_COLUMN_INTENT_DATA, "https://www.yournewsapp.com/articles/${article.slug}")
}
contentResolver.insert(SEARCH_SUGGESTIONS_URI, contentValues)
}
Tolinku for Media Apps
Tolinku handles deep link routing for content URLs. Configure routes like /articles/:slug and /videos/:slug in the Tolinku dashboard and Tolinku manages verification files, fallback routing, and analytics.
For smart banners on media sites, see smart banners for media apps. For the broader app indexing strategy, see app indexing and SEO for mobile apps.
Get deep linking tips in your inbox
One email per week. No spam.