diff --git a/README.md b/README.md
index 183bf1ae..252773a8 100644
--- a/README.md
+++ b/README.md
@@ -639,6 +639,52 @@ Parameters:
It has the other parameters of the `paige/figure` shortcode.
+### YouTube
+
+The `paige/youtube` shortcode provides a responsive YouTube video.
+
+```
+{{< paige/youtube
+ autoplay=false
+ controls=true
+ end=20
+ fullscreen=true
+ list=PL2WkvfelorAFjpzGUWc4OWAWmiJpwL97L
+ loop=true
+ mute=true
+ start=10
+ title="My title"
+ video="dQw4w9WgXcQ"
+>}}
+```
+
+Inner content: None.
+
+Parameters:
+
+
+ autoplay
+ - Optional. Boolean. Automatically play the video.
+ controls
+ - Optional. Boolean. Show video controls. Default is
true
.
+ end
+ - Optional. Integer. Elapsed seconds. Stop the video here.
+ fullscreen
+ - Optional. Boolean. Enable full screen. Default is
true
.
+ list
+ - Optional. String. Playlist ID.
+ loop
+ - Optional. Boolean. Loop the video.
+ mute
+ - Optional. Boolean. Mute the video.
+ start
+ - Optional. Integer. Elapsed seconds. Start the video here.
+ title
+ - Optional. String. Video description. Used for screen readers. Default is
YouTube video
.
+ video
+ - Optional. Position 0. String. Video ID.
+
+
## Customize
If `partials/paige/head-last.html` exists in the site, it is included at the end of the head tag.
diff --git a/exampleSite/content/blog/youtube.md b/exampleSite/content/blog/youtube.md
new file mode 100644
index 00000000..db7b6aa0
--- /dev/null
+++ b/exampleSite/content/blog/youtube.md
@@ -0,0 +1,59 @@
+---
+categories: [paige]
+date: 2023-01-20
+description: Demonstration of the Paige YouTube shortcode.
+tags: [shortcodes, videos]
+title: YouTube Shortcode
+---
+
+Code:
+
+```go-text-template
+{{* paige/youtube "dQw4w9WgXcQ" */>}}
+```
+
+Result:
+
+{{< paige/youtube "dQw4w9WgXcQ" >}}
+
+---
+
+Code:
+
+```go-text-template
+{{* paige/youtube video="dQw4w9WgXcQ" */>}}
+```
+
+Result:
+
+{{< paige/youtube video="dQw4w9WgXcQ" >}}
+
+---
+
+Code:
+
+```go-text-template
+{{* paige/youtube
+ controls=true
+ end=20
+ fullscreen=true
+ loop=true
+ mute=true
+ start=10
+ title="My title"
+ video="dQw4w9WgXcQ"
+*/>}}
+```
+
+Result:
+
+{{< paige/youtube
+ controls=true
+ end=20
+ fullscreen=true
+ loop=true
+ mute=true
+ start=10
+ title="My title"
+ video="dQw4w9WgXcQ"
+>}}
diff --git a/layouts/shortcodes/paige/youtube.html b/layouts/shortcodes/paige/youtube.html
new file mode 100644
index 00000000..805b73a6
--- /dev/null
+++ b/layouts/shortcodes/paige/youtube.html
@@ -0,0 +1,62 @@
+{{ $autoplay := .Get "autoplay" }}
+{{ $controls := .Get "controls" | default true }}
+{{ $end := .Get "end" }}
+{{ $fullscreen := .Get "fullscreen" | default true }}
+{{ $list := .Get "list" }}
+{{ $loop := .Get "loop" }}
+{{ $mute := .Get "mute" }}
+{{ $start := .Get "start" }}
+{{ $title := .Get "title" | default "YouTube video" }}
+{{ $video := .Get 0 | default (.Get "video") | default "dQw4w9WgXcQ" }}
+
+{{ $host := cond .Page.Site.Config.Privacy.YouTube.PrivacyEnhanced "www.youtube-nocookie.com" "www.youtube.com" }}
+
+{{ $path := "" }}
+
+{{ if $list }}
+ {{ $path = printf "embed?list=%v&listtype=playlist" $list }}
+{{ else }}
+ {{ $path = printf "embed/%v" $video }}
+{{ end }}
+
+{{ $params := slice (printf "hl=es" (.Site.LanguageCode | default .Site.Language.Lang)) "modestbranding=1" }}
+
+{{ if $autoplay }}
+ {{ $params = $params | append "autoplay=1" | append "mute=1" }}
+{{ end }}
+
+{{ if not $controls }}
+ {{ $params = $params | append "controls=0" }}
+{{ end }}
+
+{{ with $end }}
+ {{ $params = $params | append (printf "end=%v" .) }}
+{{ end }}
+
+{{ if not $fullscreen }}
+ {{ $params = $params | append "fs=0" }}
+{{ end }}
+
+{{ if $loop }}
+ {{ $params = $params | append "loop=1" }}
+
+ {{ if $video }}
+ {{ $params = $params | append (printf "playlist=%v" $video) }}
+ {{ end }}
+{{ end }}
+
+{{ if $mute }}
+ {{ $params = $params | append "mute=1" }}
+{{ end }}
+
+{{ with $start }}
+ {{ $params = $params | append (printf "start=%v" .) }}
+{{ end }}
+
+{{ if $params }}
+ {{ $params = delimit (uniq (sort $params)) "&" }}
+{{ end }}
+
+
+
+