Index: src/assets/js/embed-player.js
===================================================================
--- src/assets/js/embed-player.js	(revision 976d36d3c69935825ec16dcd39929fc55ad51ea3)
+++ src/assets/js/embed-player.js	(revision b56afa72e85e0b0e9069a678f867ead0c9ffb621)
@@ -233,7 +233,20 @@
     let preMuteVol = 100;
     // Audio-only YouTube: zet de thumbnail als albumhoes op de audio-kaart.
+    let ytTitle = '';  // echte videotitel (via same-origin oEmbed-proxy)
     if (audioOnly && ytThumb) {
       const art0 = el.querySelector('.pcms-embed-art');
       if (art0) { art0.style.backgroundImage = `url('${ytThumb}')`; art0.classList.add('has-art'); }
+      // Haal de echte titel op (server-proxy, want YT-oEmbed heeft geen CORS) en
+      // toon 'm i.p.v. "YouTube".
+      fetch('/audio/yt-title?url=' + encodeURIComponent(url))
+        .then((r) => (r.ok ? r.json() : null))
+        .then((d) => {
+          if (d && d.title) {
+            ytTitle = d.title;
+            const tt = el.querySelector('.pcms-embed-title');
+            if (tt) tt.textContent = d.title;
+          }
+        })
+        .catch(() => {});
     }
 
@@ -314,5 +327,5 @@
       // én doorspelen bij navigeren. De inline-kaart is enkel de launcher.
       if (audioOnly && window.pcmsAudioPlayer && typeof window.pcmsAudioPlayer.playYouTube === 'function') {
-        window.pcmsAudioPlayer.playYouTube({ id: ytId(ref, url), cover: ytThumb, postUrl: location.pathname + location.search });
+        window.pcmsAudioPlayer.playYouTube({ id: ytId(ref, url), title: ytTitle || undefined, cover: ytThumb, postUrl: location.pathname + location.search });
         el.classList.add('pcms-embed-elsewhere');
         return;
Index: src/routes/audio.js
===================================================================
--- src/routes/audio.js	(revision 976d36d3c69935825ec16dcd39929fc55ad51ea3)
+++ src/routes/audio.js	(revision b56afa72e85e0b0e9069a678f867ead0c9ffb621)
@@ -158,3 +158,29 @@
 });
 
+// Same-origin proxy voor de YouTube-titel (oEmbed). YouTube's oEmbed stuurt geen
+// CORS-header, dus de browser kan 'm niet direct fetchen — wij halen 'm server-
+// side op (geen CORS) en cachen 't. Gebruikt door de audio-only YT-embed om de
+// echte videotitel te tonen i.p.v. "YouTube".
+const ytTitleCache = new Map();
+router.get('/yt-title', async (req, res) => {
+  const url = String(req.query.url || '');
+  if (!/^https:\/\/(www\.)?(youtube\.com|youtu\.be|youtube-nocookie\.com)\//i.test(url)) {
+    return res.status(400).json({ error: 'bad url' });
+  }
+  if (ytTitleCache.has(url)) return res.json({ title: ytTitleCache.get(url) });
+  try {
+    const ac = new AbortController();
+    const timer = setTimeout(() => ac.abort(), 6000);
+    const r = await fetch('https://www.youtube.com/oembed?format=json&url=' + encodeURIComponent(url), { signal: ac.signal });
+    clearTimeout(timer);
+    if (!r.ok) { ytTitleCache.set(url, ''); return res.json({ title: '' }); }
+    const d = await r.json();
+    const title = (d && d.title) ? String(d.title).slice(0, 200) : '';
+    ytTitleCache.set(url, title);
+    res.json({ title });
+  } catch (e) {
+    res.status(502).json({ error: 'fetch failed' });
+  }
+});
+
 export default router;
Index: src/views/shell.ejs
===================================================================
--- src/views/shell.ejs	(revision 976d36d3c69935825ec16dcd39929fc55ad51ea3)
+++ src/views/shell.ejs	(revision b56afa72e85e0b0e9069a678f867ead0c9ffb621)
@@ -303,5 +303,5 @@
 <!-- Eigen custom media-embeds (YouTube/SoundCloud/Spotify) via de echte
      player-API's + gedeelde mutual-exclusion registry met de site-speler. -->
-<script src="/assets/js/embed-player.js?v=10" defer></script>
+<script src="/assets/js/embed-player.js?v=11" defer></script>
 <% if (site && site.enable_audio_player && audioTracks && audioTracks.length > 0) { %>
   <script>window.PCMS_SITE_TRACKS = <%- JSON.stringify(audioTracks) %>;</script>
