Skip to content

feat(site): framework-specific SEO metadata for docs#541

Merged
decepulis merged 7 commits intomainfrom
feat/seo-metadata
Feb 18, 2026
Merged

feat(site): framework-specific SEO metadata for docs#541
decepulis merged 7 commits intomainfrom
feat/seo-metadata

Conversation

@decepulis
Copy link
Copy Markdown
Collaborator

@decepulis decepulis commented Feb 17, 2026

closes #340

Summary

Adds SEO keyword targeting across the site so high-value search terms like "open source video player", "React video player", and "HTML video player" appear in page titles, meta descriptions, and body content.

Before → After examples

Page titles — pattern: PAGE | Video.js | Open Source [Framework] Video Player

Page Before After
Homepage Video.js 10 Video.js | Open Source Video Player
React docs PlayButton | Docs | Video.js 10 PlayButton | Video.js | Open Source React Video Player
HTML docs media-play-button | Docs | Video.js 10 media-play-button | Video.js | Open Source HTML Video Player
Blog Blog | Video.js 10 Blog | Video.js | Open Source Video Player

Meta descriptions:

Page Before After
Homepage For over 15 years, Video.js has been the world's web video player. Now rebuilt in v10 for modern development and performance. The open-source video player for React and HTML. Lightweight, accessible components built for performance and streaming.
Installation (React) Get started quickly with Video.js by building your first embed code Install Video.js and build your first player with streaming support and accessible controls — Video.js React Video Player.
PlayButton (React) A button component for playing and pausing media playback Accessible play/pause button with keyboard support and customizable rendering — Video.js React Video Player.
Blog index Articles, announcements, news, updates, and more News and updates from the Video.js open-source video player project

Body content — Installation page now shows framework-specific intros:

  • React: "Video.js is a React video player component library — composable primitives, hooks, and TypeScript types..."
  • HTML: "Video.js is an HTML video player built on custom elements — lightweight, framework-free components..."

Changes

  • consts.ts — Split SITE_TITLE into brand name (Video.js) and SEO_SUFFIX (Open Source Video Player); updated SITE_DESCRIPTION
  • Base.astro — New suffix prop for page title construction: Page | Video.js | suffix. Defaults to SEO_SUFFIX, docs pages override with framework-specific suffix
  • Docs.astro — Passes suffix="Open Source ${framework} Video Player" to Base, injects framework into title and description
  • index.astro — Homepage subtitle matches new site description
  • installation.mdx — Framework-specific intro via <FrameworkCase>, updated description
  • 13 docs MDX files — Rewrote description frontmatter to remove "Video.js v10" version references, add benefit language (accessible, customizable, keyboard support)
  • blog/[...page].astro — Updated description in layout prop and visible subtitle
  • schemas.ts — Added about: SoftwareApplication to JSON-LD TechArticle schema, updated blog collection description

Test plan

  • pnpm -F site build passes
  • All page titles follow Page | Video.js | Open Source [Framework] Video Player pattern
  • Titles stay under ~60 characters (check truncation in search results)
  • <meta name="description"> includes framework-specific suffix on docs pages
  • OG and Twitter meta tags inherit the correct title and description
  • Homepage title is Video.js | Open Source Video Player
  • Blog index description updated in both visible text and meta tags
  • Installation page shows framework-specific intro (React vs HTML)
  • frameworkTitle overrides still apply to the first title segment

🤖 Generated with Claude Code

Automatically generate framework-aware titles and descriptions for all
docs pages using the existing FRAMEWORK_LABELS map and route context.

Before: "Play Button | Docs | Video.js 10"
After:  "Play Button | React Video Player | Video.js 10"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel bot commented Feb 17, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
vjs-10-demo-react Ignored Ignored Preview Feb 18, 2026 4:18pm

Request Review

@netlify
Copy link
Copy Markdown

netlify bot commented Feb 17, 2026

Deploy Preview for vjs10-site ready!

Name Link
🔨 Latest commit 130f9e4
🔍 Latest deploy log https://app.netlify.com/projects/vjs10-site/deploys/6995e6355f88f900084b2b93
😎 Deploy Preview https://deploy-preview-541--vjs10-site.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 17, 2026

📦 Bundle Size Report

Package Size Diff %
@videojs/core 5.37 kB 0 B ░░░░░░░░ 0%
@videojs/element 1.60 kB 0 B ░░░░░░░░ 0%
@videojs/html 8.64 kB 0 B ░░░░░░░░ 0%
@videojs/icons 6.40 kB 0 B ░░░░░░░░ 0%
@videojs/react 8.20 kB 0 B ░░░░░░░░ 0%
@videojs/store 1.94 kB 0 B ░░░░░░░░ 0%
@videojs/utils 2.35 kB 0 B ░░░░░░░░ 0%

Total: 34.51 kB · 0 B · 0%


Entry Breakdown

Subpath sizes are the additional bytes on top of the root entry point, measured by bundling root + subpath together and subtracting the root-only size.

@videojs/core
Entry Base PR Diff %
. 2.77 kB 2.77 kB 0 B 0%
./dom 2.60 kB 2.60 kB 0 B 0%
total 5.37 kB 5.37 kB 0 B 0%
@videojs/element
Entry Base PR Diff %
. 817 B 817 B 0 B 0%
./context 823 B 823 B 0 B 0%
total 1.60 kB 1.60 kB 0 B 0%
@videojs/icons
Entry Base PR Diff %
./react 4.77 kB 4.77 kB 0 B 0%
./html 1.64 kB 1.64 kB 0 B 0%
total 6.40 kB 6.40 kB 0 B 0%
@videojs/react
Entry Base PR Diff %
. 7.67 kB 7.67 kB 0 B 0%
./audio 267 B 267 B 0 B 0%
./background 40 B 40 B 0 B 0%
./video 244 B 244 B 0 B 0%
total 8.20 kB 8.20 kB 0 B 0%
@videojs/store
Entry Base PR Diff %
. 1.29 kB 1.29 kB 0 B 0%
./html 468 B 468 B 0 B 0%
./react 199 B 199 B 0 B 0%
total 1.94 kB 1.94 kB 0 B 0%
@videojs/utils
Entry Base PR Diff %
./array 104 B 104 B 0 B 0%
./dom 684 B 684 B 0 B 0%
./events 227 B 227 B 0 B 0%
./function 197 B 197 B 0 B 0%
./object 119 B 119 B 0 B 0%
./predicate 265 B 265 B 0 B 0%
./string 110 B 110 B 0 B 0%
./style 63 B 63 B 0 B 0%
./time 478 B 478 B 0 B 0%
./number 158 B 158 B 0 B 0%
total 2.35 kB 2.35 kB 0 B 0%

ℹ️ How to interpret

Sizes are minified + brotli, measured with esbuild.
Package totals are computed as root size + marginal subpath costs.
Subpath marginal cost = (root + subpath bundled together) − root alone.

Icon Meaning
No change
🔺 Increased ≤ 10%
🔴 Increased > 10%
🔽 Decreased
🆕 New (no baseline)

Run pnpm size locally to check current sizes.

Update SITE_TITLE, SITE_DESCRIPTION, page descriptions, and body content
to target high-value search terms like "open source video player",
"React video player", and "HTML video player". Add framework-specific
intro to installation page and SoftwareApplication structured data to
JSON-LD TechArticle schema.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@decepulis decepulis requested a review from heff February 17, 2026 19:25
decepulis and others added 5 commits February 17, 2026 14:04
Split SITE_TITLE into brand name ("Video.js") and SEO suffix
("Open Source Video Player"). Docs pages inject the framework name
into the suffix ("Open Source React Video Player"). Keeps all titles
under 60 characters so keywords aren't truncated in search results.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@decepulis decepulis merged commit e936ea4 into main Feb 18, 2026
12 checks passed
@decepulis decepulis deleted the feat/seo-metadata branch February 18, 2026 17:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Metadata keyword optimization

1 participant