
Grab your gear: The official Sanity swag store
Read Grab your gear: The official Sanity swag storeGreat question! The performance issue you're experiencing is common when embedding YouTube videos via iframes - they load immediately and can significantly slow down your page. Here are several strategies to optimize your YouTube embeds:
react-lite-youtube-embed (Recommended)The best solution is to use a facade/lite embed approach. Install react-lite-youtube-embed:
npm install react-lite-youtube-embedThen update your YouTubeEmbed.tsx:
import LiteYouTubeEmbed from 'react-lite-youtube-embed';
import 'react-lite-youtube-embed/dist/LiteYouTubeEmbed.css'
type YouTubeEmbedProps = {
id: string;
};
const YouTubeEmbed: React.FC<YouTubeEmbedProps> = ({ id }) => (
<div className="youtube-player mt-8 mb-8 justify-center flex">
<LiteYouTubeEmbed
id={id}
title="YouTube video player"
/>
</div>
);
export default YouTubeEmbed;This loads a lightweight thumbnail initially and only loads the full iframe when users click to play, reducing initial page load by ~500KB per video.
If you prefer to stick with native iframes, add loading="lazy":
<iframe
width="560"
height="315"
src={`https://www.youtube.com/embed/${id}`}
title="YouTube video player"
frameBorder="0"
loading="lazy" // Add this
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowFullScreen
/>For even better performance, dynamically import your component:
// In RichTextComponents.tsx
import dynamic from 'next/dynamic';
import getYouTubeID from "get-youtube-id";
const YouTubeEmbed = dynamic(() => import('./YouTubeEmbed'), {
loading: () => <div className="h-[315px] w-[560px] bg-gray-200 animate-pulse" />
});
export const RichTextComponents = {
types: {
youtube: ({ value }: any) => {
const id = getYouTubeID(value.url);
return id ? <YouTubeEmbed id={id} /> : null;
},
},
// ... rest of your components
};If you want full control, create a lazy-loading wrapper using Intersection Observer, but the lite-embed library above handles this better.
The react-lite-youtube-embed approach (option 1) will give you the biggest performance boost - it's what most high-performance sites use. It reduces initial load time, improves Lighthouse scores, and provides a better user experience by loading the full iframe only when needed.
Sanity is the developer-first content operating system that gives you complete control. Schema-as-code, GROQ queries, and real-time APIs mean no more workarounds or waiting for deployments. Free to start, scale as you grow.
Content operations
Content backend


The only platform powering content operations
By Industry


Tecovas strengthens their customer connections
Build and Share

Grab your gear: The official Sanity swag store
Read Grab your gear: The official Sanity swag store