Unique Titles
Every page should have a unique, descriptive title under 60 characters.
Search engine optimization (SEO) helps your content get discovered organically through Google, Bing, and other search engines. Vidori provides tools to optimize your web app for maximum visibility.
Vidori automatically generates SEO-friendly pages for your web app:
Configure default meta tags for your entire site:
| Field | Description | Example |
|---|---|---|
| Site Title | Default title suffix | ”Your Brand - Stream Movies & Shows” |
| Site Description | Default description | ”Watch thousands of movies and shows…” |
| Default Image | Fallback social image | Your logo or hero image |
| Site Name | Open Graph site name | ”Your Brand” |
| Twitter Handle | Your Twitter username | ”@yourbrand” |
Each content type generates its own meta tags:
Video pages include:
<title>Video Title | Your Brand</title><meta name="description" content="Video description..."><meta property="og:title" content="Video Title"><meta property="og:type" content="video.movie"><meta property="og:image" content="https://...thumbnail.jpg"><meta property="og:video" content="https://...preview.mp4">Series pages include:
<title>Series Title | Your Brand</title><meta name="description" content="Series description..."><meta property="og:type" content="video.tv_show"><script type="application/ld+json">{ "@type": "TVSeries", "name": "Series Title", "numberOfSeasons": 3, "numberOfEpisodes": 24}</script>Live channel pages include:
<title>Channel Name - Live | Your Brand</title><meta name="description" content="Watch Channel Name live..."><meta property="og:type" content="video.other">Override meta tags for specific content:
Vidori automatically generates JSON-LD structured data for rich search results:
{ "@context": "https://schema.org", "@type": "VideoObject", "name": "Video Title", "description": "Video description", "thumbnailUrl": "https://...thumbnail.jpg", "uploadDate": "2024-01-15", "duration": "PT1H30M", "contentUrl": "https://...video.m3u8", "embedUrl": "https://...embed/abc123"}{ "@context": "https://schema.org", "@type": "TVSeries", "name": "Series Title", "description": "Series description", "numberOfSeasons": 3, "containsSeason": [ { "@type": "TVSeason", "seasonNumber": 1, "numberOfEpisodes": 10 } ]}Your brand information for knowledge panel:
Vidori automatically generates XML sitemaps for search engines.
/sitemap.xml → Sitemap index/sitemap-videos.xml → All video pages/sitemap-series.xml → Series and seasons/sitemap-channels.xml → Live channels/sitemap-pages.xml → Static pages| Setting | Description | Default |
|---|---|---|
| Include videos | Add videos to sitemap | Yes |
| Include series | Add series pages | Yes |
| Include channels | Add channel pages | Yes |
| Include unpublished | Include draft content | No |
| Update frequency | changefreq value | Weekly |
| Regeneration | How often to rebuild | Daily |
After your sitemap is configured:
https://yourapp.com/sitemap.xmlControl how search engines crawl your site:
User-agent: *Allow: /Disallow: /api/Disallow: /admin/Disallow: /account/Disallow: /checkout/
Sitemap: https://yourapp.com/sitemap.xmlAdd custom rules for specific crawlers or paths:
| Directive | Description | Example |
|---|---|---|
| Allow | Permit crawling | Allow: /movies/ |
| Disallow | Block crawling | Disallow: /private/ |
| Crawl-delay | Rate limiting | Crawl-delay: 1 |
| User-agent | Target specific bots | User-agent: Googlebot |
Prevent duplicate content issues with canonical URLs:
Vidori automatically sets canonical URLs:
https://yourapp.com/watch/{id}https://yourapp.com/series/{id}https://yourapp.com/live/{id}Override canonicals for specific cases:
Use cases for custom canonicals:
Configure how your content appears when shared on Facebook, LinkedIn, and other platforms:
| Tag | Description | Auto-generated |
|---|---|---|
og:title | Share title | Yes - from content title |
og:description | Share description | Yes - from content description |
og:image | Share image | Yes - from thumbnail |
og:type | Content type | Yes - video.movie, video.tv_show |
og:url | Canonical URL | Yes |
Configure Twitter-specific sharing:
| Setting | Options | Recommended |
|---|---|---|
| Card type | Summary, Large Image, Player | Player (for videos) |
| Twitter handle | Your @username | Required for analytics |
| Player URL | Video embed URL | Auto-generated |
Validate your social cards before sharing:
Vidori web apps are optimized for Google’s Core Web Vitals:
| Metric | Target | Vidori Default |
|---|---|---|
| LCP (Largest Contentful Paint) | < 2.5s | ~1.5s |
| FID (First Input Delay) | < 100ms | ~50ms |
| CLS (Cumulative Layout Shift) | < 0.1 | ~0.05 |
Vidori automatically optimizes images for performance:
Track Core Web Vitals in Analytics → Performance:
Vidori detects search engine crawlers and serves optimized content:
| Bot | Optimization |
|---|---|
| Googlebot | Full SSR, structured data |
| Bingbot | Full SSR, structured data |
| Facebookbot | Open Graph tags, preview images |
| Twitterbot | Twitter Cards, player embeds |
| LinkedInBot | Open Graph tags |
For premium/gated content, configure crawler access:
Connect Google Search Console for search analytics:
Monitor SEO performance in Analytics → SEO:
| Metric | Description |
|---|---|
| Indexed pages | Pages in search index |
| Search impressions | Times shown in search |
| Search clicks | Clicks from search results |
| Average position | Ranking position |
| Top queries | Search terms driving traffic |
Unique Titles
Every page should have a unique, descriptive title under 60 characters.
Quality Descriptions
Write compelling meta descriptions (150-160 chars) that encourage clicks.
Optimized Images
Use high-quality thumbnails with descriptive alt text for all content.
Fast Loading
Monitor Core Web Vitals and address performance issues promptly.