npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@playkit-js/seo

v1.0.11

Published

[![Build Status](https://github.com/kaltura/playkit-js-seo/actions/workflows/run_canary_full_flow.yaml/badge.svg)](https://github.com/kaltura/playkit-js-seo/actions/workflows/run_canary_full_flow.yaml) [![](https://img.shields.io/npm/v/@playkit-js/seo/lat

Downloads

160

Readme

Build Status

playkit-js-seo

playkit-js-seo is a kaltura player plugin that provides search engine optimization (SEO) capabilities for video content played by kaltura player SDK and managed in Kaltura Management Console (KMC). It integrates structured data (Schema.org) into the player to improve discoverability and visibility of video content on search engines.

This plugin automatically generates structured data based on the video metadata, including properties such as name, description, thumbnail URL, upload date, expiration date, duration, transcript, and chapters (if available). The structured data is then either injected directly into the player or communicated to the parent frame if the player is embedded within an iframe.

By incorporating structured data, the plugin helps search engines understand and interpret video content more effectively. This can lead to improved SEO rankings and enhanced visibility in search engine results.

It relies on kaltura player core API for getting video metadata and listing for player events.

playkit-js-seo is written in TypeScript (*.ts) (strongly typed superset of ES6), and transpiled in ECMAScript5 using Webpack.

Webpack is used to build the distro bundle and serve the local development environment.

Features

The plugin can be activated in two modes:

Basic Mode

In this mode, the SEO plugin will automatically generate structured data based on the basic video metadata, including properties such as name, description, thumbnail URL, upload date, expiration date, and duration.

  • This mode requires no additional settings nor any additional dependency and works out of the box.

Enhanced Mode

In this mode, the SEO plugin includes Chapters and Transcript properties in the structured data. Chapters enables key moments feature which is a way for users to navigate video segments like chapters in a book, which can help users engage more deeply with your content. Transcript provides richer search results with relevant keywords This mode requires:

  • 'preload' option must be set to 'auto' in the playback config (config.playback.preload = auto).

  • Cue Points Manager Dependency: The plugin depends on the Cue Points Manager plugin to handle the cue points for chapters and transcript. Make sure the Cue Points Manager package is included and properly integrated into your application and configured in plugins section in player config.

in either case No Configuration Required

The Plugin will consistently and automatically strive to include the fullest range of available data (enhanced mode), contingent upon the presence of chapters and transcripts, and provided that the 'preload' mode is enabled.

Iframe embed VS Dynamic embed

The generated SEO structured data is either injected directly into the player or communicated to the parent frame if the player is embedded within an iframe,

In the latter, a supplementary code integration is required to be added on the parent frame (see Customers Integration Guide)

The Generated JSON-LD Data Structure

the generated SEO data to be injected would look like this:

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "Nice Video Clip",
  "description": "",
  "thumbnailUrl": "https://cfvod.kaltura.com/p/1887631/sp/1765100/thumbnail/entry_id/1_r62bdgz/version/100222/height/360/width/640",
  "uploadDate": "2016-09-27T07:09:43+00:00",
  "duration": "PDT00H12M21S",
  "contentUrl": "https://cdnapisec.kaltura.com/p/4587/sp/479/playManifest/entryId/1_z63gj3gz/protocol/https/format/mpegdash/1_e4myapi8/a.mpd",
  "expires": "2040-12-26T09:07:18+00:00",
  "hasPart": [
    {
      "@type": "Clip",
      "name": "chapter 1",
      "startOffset": 0,
      "endOffset": 24,
      "url": "https://www.example.com/example?t=0"
    },
    {
      "@type": "Clip",
      "name": "chapter 2",
      "startOffset": 24,
      "endOffset": 700,
      "url": "https://www.example.com/example?t=24.101"
    }
  ],
  "transcript": "The grass is always greener on the other side of the fence..."
}

Getting started with development

# First, checkout the repository and install the required dependencies
git clone https://github.com/kaltura/playkit-js-seo.git

# Navigate to the repo dir
cd playkit-js-seo

# Run dev-server for demo page (recompiles on file-watch, and write to actual dist fs artifacts)
npm run dev

# Before submitting a PR - Run the pre commit command
npm run pre:commit

# this command will run:

# 1. types check
# 2. lint check
# 3. generate/update types
# 4. generate/update docs

The dev server will host files on port 8000. Once started, the demo can be found running at http://localhost:8000/.

Before submitting a PR, please see our contribution guidelines.

Linter (ESlint)

Run linter:

npm run lint:check

Run linter with auto-fix mode:

npm run lint:fix

Formatting Code

Run prettier to format code

npm run prettier:fix

Type Check

Run type-check to verify TypeScript types

npm run types:check

Automated tests (Mocha/Karma)

Run all tests at once:

npm test

Run unit tests in watch mode:

npm run test:watch

Design

An overview of this project's design, can be found here.

API Docs

API docs

Usage Guide (for Playkit Maintainers)

Usage Guide

Customers Integration Guide

Customers Integration Guide

Demo

https://kaltura.github.io/playkit-js-seo/demo/canary/index.html

Compatibility

playkit-js-seo is only compatible with browsers supporting MediaSource extensions (MSE) API with 'video/MP4' mime-type inputs.

playkit-js-seo is supported on:

  • Chrome 39+ for Android
  • Chrome 39+ for Desktop
  • Firefox 41+ for Android
  • Firefox 42+ for Desktop
  • IE11 for Windows 8.1+
  • Edge for Windows 10+
  • Safari 8+ for MacOS 10.10+
  • Safari for ipadOS 13+

License

playkit-js-seo is released under Apache 2.0 License