diff --git a/modules/ad_banner/_ad_banner_widget2_video.html.erb b/modules/ad_banner/_ad_banner_widget2_video.html.erb
index 0bf52df..d9dd883 100644
--- a/modules/ad_banner/_ad_banner_widget2_video.html.erb
+++ b/modules/ad_banner/_ad_banner_widget2_video.html.erb
@@ -11,7 +11,7 @@
data-cycle-timeout="{{timeout}}"
data-cycle-fx="{{ad_fx}}"
data-pager=".banner_caption_{{subpart-id}}"
- data-cycle-pager-template="
"
+ data-cycle-pager-template="
"
data-pager-active-class="active-slide"
data-cycle-youtube="true"
data-cycle-youtube-autostart="false"
@@ -559,16 +559,38 @@ function fixBannerPagerA11y($pager) {
// 外層補 tablist role
$pager.attr('role', 'tablist').attr('aria-label', '輪播影片選擇');
+ // 取得對應 banner 的所有 slide
+ var $banner = $pager.closest('.w-ad-banner');
+ var $slides = $banner.find('.w-ad-banner__slide');
+
// 每個 li 補 role/tabindex/aria-label/aria-selected
$pager.find('li').each(function(i) {
var $li = $(this);
- // 取得影片標題:優先用 template 已帶入的 aria-label,其次用 img alt,最後 fallback 第N張
- var existingLabel = ($li.attr('aria-label') || '').trim();
- var imgAlt = ($li.find('img').attr('alt') || '').trim();
- var label = (existingLabel && existingLabel !== '第' + (i + 1) + '張')
- ? existingLabel
- : (imgAlt ? imgAlt : '第' + (i + 1) + '張影片');
+ // 從對應 slide 取得標題
+ // 優先順序:data-title > overlay caption 文字 > iframe title > 第N張影片
+ var $slide = $slides.eq(i);
+ var slideTitle = '';
+
+ // 1. 嘗試從 slide 的 data-title 取得
+ slideTitle = ($slide.attr('data-title') || '').trim();
+
+ // 2. 嘗試從 overlay caption 文字取得
+ if (!slideTitle) {
+ slideTitle = ($slide.find('.w-ad-banner__caption_text').text() || '').trim();
+ }
+
+ // 3. 嘗試從 iframe title 取得
+ if (!slideTitle) {
+ slideTitle = ($slide.find('iframe').attr('title') || '').trim();
+ // 排除無意義的 iframe title
+ if (slideTitle.toLowerCase() === 'youtube' || slideTitle.toLowerCase() === 'video') {
+ slideTitle = '';
+ }
+ }
+
+ // 4. fallback
+ var label = slideTitle || ('第' + (i + 1) + '張影片');
$li
.attr('role', 'tab')