Set up analytics tailored for media sites, news publications, blogs, and content platforms.
Media Analytics Overview
Key Media Metrics
| Metric | Definition | Why It Matters |
|---|---|---|
| Pageviews | Content consumption | Volume |
| Unique Visitors | Audience size | Reach |
| Time on Page | Engagement depth | Quality |
| Scroll Depth | Content consumption | Engagement |
| Recirculation | Pages/session | Stickiness |
| Return Visitors | Loyalty | Audience building |
Media-Specific Challenges
- High traffic volumes - Need efficient tracking
- Content decay - Articles lose relevance
- Real-time events - Breaking news spikes
- Multiple content types - Articles, video, podcasts
- Subscription models - Paywalls and metering
Setting Up Media Tracking
Basic Implementation
<script
defer
data-tracking-code="YOUR_TRACKING_CODE"
src="https://api.zenovay.com/z.js">
</script>
Page views and scroll depth are tracked automatically by the snippet — no extra configuration is required. For everything beyond pageviews (article metadata, video plays, paywall hits), send custom events with the zenovay('track', ...) call shown below.
Article Metadata Tracking
Pass article metadata for rich analytics:
// Track article view with metadata
zenovay('track','article_viewed', {
article_id: 'art_12345',
title: 'Breaking: Major Event Unfolds',
author: 'Jane Smith',
category: 'news',
subcategory: 'politics',
publish_date: '2025-01-15',
word_count: 1250,
content_type: 'article',
tags: ['breaking', 'politics', 'national'],
is_premium: false
});
Content Type Tracking
Different content types need different tracking:
// Video content
zenovay('track','video_started', {
video_id: 'vid_789',
title: 'Interview with CEO',
duration_seconds: 420,
category: 'interviews'
});
zenovay('track','video_progress', {
video_id: 'vid_789',
percent_watched: 50,
watch_time_seconds: 210
});
// Podcast/Audio
zenovay('track','audio_started', {
podcast_id: 'pod_456',
episode: 'EP 42: Tech Trends',
duration_seconds: 1800
});
// Photo gallery
zenovay('track','gallery_viewed', {
gallery_id: 'gal_123',
images_count: 25,
images_viewed: 12
});
Author Analytics
Track Author Performance
// Include author in article tracking
zenovay('track','article_viewed', {
article_id: 'art_12345',
author_id: 'author_jane',
author_name: 'Jane Smith',
// ... other metadata
});
Analyzing Author Performance
Zenovay doesn't ship a dedicated "Authors" dashboard, but once you attach author_id / author_name to your article events you can break down performance by author yourself:
- Filter the Analytics tab of your website's dashboard (
/domains/{id}?tab=analytics) using the event-property filters to isolate a single author. - On Scale, use Query Studio (the SQL tab in Configure & Explore) to run ad-hoc reports across authors — for example, total views and average time on page grouped by
author_name.
A typical author breakdown looks like this:
| Author | Articles | Views | Avg Time | Engagement |
|---|---|---|---|---|
| Jane Smith | 45 | 125K | 4:30 | 78% |
| John Doe | 38 | 98K | 3:15 | 65% |
| Sarah Chen | 52 | 180K | 5:10 | 82% |
Category Analytics
Track Categories
// Category hierarchy
zenovay('track','article_viewed', {
category: 'technology',
subcategory: 'startups',
topic: 'funding'
});
Category Performance
| Category | Pageviews | Share | Trend |
|---|---|---|---|
| News | 450K | 35% | +5% |
| Sports | 320K | 25% | +2% |
| Opinion | 180K | 14% | -3% |
| Tech | 150K | 12% | +12% |
Real-Time Analytics
Breaking News Tracking
Monitor real-time during events:
// Track breaking news engagement
zenovay('track','breaking_news', {
story_id: 'breaking_001',
title: 'Election Results',
start_time: new Date().toISOString(),
priority: 'high'
});
Live View
Open your website's dashboard and select the Live View tab (under Audience, /domains/{id}?tab=live-view) to watch activity as it happens:
- Current visitors on the site
- The pages they're viewing right now
- Where they came from
- Geographic distribution
The Globe tab (under Behavior) gives the same real-time picture on a 3D map. Live View is available on Pro and above.
Traffic Alerts
Open your website's Settings and go to the Automation tab to create action rules that notify you when traffic moves. Available triggers include:
- Traffic spike — fires when traffic exceeds a multiplier of the normal baseline (e.g. 3×)
- Traffic drop — fires when traffic falls by a chosen percentage
Each rule can send an email, post to Slack, or call a webhook so your team can react to breaking-news surges in real time.
Scroll Depth Analytics
Why Scroll Matters
For content sites, scroll depth shows:
- How much content consumed
- Where readers drop off
- Article length optimization
Track Scroll Milestones
// Scroll depth is tracked automatically by the snippet — nothing to enable.
// You can also send your own scroll milestone events:
zenovay('track','scroll_milestone', {
article_id: 'art_12345',
milestone: 75, // percent
word_count_read: 940
});
Scroll Depth Report
| Depth | % Readers | Insight |
|---|---|---|
| 25% | 85% | Good hook |
| 50% | 62% | Content engaging |
| 75% | 41% | Some drop-off |
| 100% | 28% | Completed |
Benchmark: 25%+ completing is good for long-form.
Engagement Scoring
Calculate Article Engagement
// Track engagement score
zenovay('track','article_engagement', {
article_id: 'art_12345',
time_on_page: 245, // seconds
scroll_depth: 85, // percent
shares: 12,
comments: 5,
engagement_score: 78 // calculated
});
Engagement Formula
Engagement Score =
(Time Weight × Time Score) +
(Scroll Weight × Scroll Score) +
(Action Weight × Action Score)
Segment by Engagement
| Segment | Engagement | % Traffic | Focus |
|---|---|---|---|
| Deep Readers | 80-100 | 15% | Subscription target |
| Engaged | 50-79 | 35% | Newsletter signup |
| Scanners | 25-49 | 30% | Content format |
| Bouncers | 0-24 | 20% | Reduce |
Traffic Source Analysis
Media-Specific Sources
| Source | Visitors | Engaged | Notes |
|---|---|---|---|
| Google News | 180K | 42% | Algorithm-driven |
| Google Search | 150K | 55% | Intent-driven |
| 120K | 25% | Social discovery | |
| Twitter/X | 80K | 35% | Breaking news |
| Apple News | 60K | 48% | Curated |
| Direct | 90K | 68% | Loyal readers |
Social Referral Tracking
// Track social referral
zenovay('track','social_referral', {
platform: 'twitter',
post_id: 'tweet_123',
article_id: 'art_12345',
campaign: 'breaking_news'
});
Newsletter Integration
Track Newsletter Signups
// Newsletter signup from article
zenovay('track','newsletter_signup', {
location: 'article_footer',
article_id: 'art_12345',
newsletter_type: 'daily_digest'
});
Newsletter-Driven Traffic
Track readers from newsletters:
https://yoursite.com/article?utm_source=newsletter&utm_campaign=daily_2025_01_15
Content Recommendations
Track Recommendation Clicks
// Recommendation widget impressions
zenovay('track','recommendations_shown', {
article_id: 'art_12345',
recommendations: ['art_456', 'art_789', 'art_012'],
position: 'article_end'
});
// Recommendation click
zenovay('track','recommendation_clicked', {
from_article: 'art_12345',
to_article: 'art_789',
position: 2
});
Recirculation Rate
Recirculation = Sessions with 2+ pageviews ÷ Total sessions
Benchmark: 40%+ is good for media sites.
Paywall & Subscription Tracking
Meter Tracking
// Track meter status
zenovay('track','meter_status', {
articles_read: 3,
limit: 5,
period: 'month',
user_id: 'anon_123'
});
// Paywall hit
zenovay('track','paywall_shown', {
article_id: 'art_12345',
trigger: 'meter_limit',
offer: 'subscribe_50_off'
});
Subscription Funnel
- Free reader
- Registered (email)
- Hitting paywall
- Conversion
See Media Subscription Conversion for detailed tracking.
CMS Integration
WordPress
// Pass article data to Zenovay
add_action('wp_footer', function() {
global $post;
if (is_single()) {
$categories = get_the_category();
$author = get_the_author();
?>
<script>
zenovay('track','article_viewed', {
article_id: '<?php echo $post->ID; ?>',
title: '<?php echo esc_js(get_the_title()); ?>',
author: '<?php echo esc_js($author); ?>',
category: '<?php echo esc_js($categories[0]->name); ?>',
publish_date: '<?php echo get_the_date('Y-m-d'); ?>',
word_count: <?php echo str_word_count(get_the_content()); ?>
});
</script>
<?php
}
});
Headless CMS
Include metadata in your frontend:
// Next.js example
export default function Article({ article }) {
useEffect(() => {
zenovay('track','article_viewed', {
article_id: article.id,
title: article.title,
author: article.author.name,
category: article.category.slug,
publish_date: article.publishedAt,
word_count: article.wordCount
});
}, [article]);
}
Best Practices
For Media Sites
-
Track article metadata
- Author, category, publish date
- Enables rich analysis
-
Monitor real-time
- React to trending content
- Manage capacity
-
Measure engagement, not just pageviews
- Time on page
- Scroll depth
- Recirculation
-
Segment by content type
- Different metrics for video vs text
- Category-specific benchmarks