01UI、UX 與資訊架構
第六章已完成 GitHub 版本控制與 Cloudflare Pages 部署,網站現在可以透過公開網址讓其他人使用。然而,網站能夠上線,不代表網站已經成熟——若沒有清楚的分類與導覽,使用者可能找不到工具;若只在桌面正常顯示,手機使用者可能無法操作;若沒有正確設定 SEO,內容充實也可能長期無法被搜尋到;若沒有流量分析,管理者無法知道哪些工具真正有人使用。
| 概念 | 包含範圍 | 核心關注 |
|---|---|---|
| UI 使用者介面 使用者直接看到與操作的元件 | 導覽列與下拉選單、按鈕、輸入欄位、卡片與表格、色彩、字體、圖示、圖表 | 畫面是否清楚、元件是否一致、操作是否直觀 |
| UX 使用者體驗 使用者完成任務的整體感受 | 找到工具是否容易、輸入後結果是否清楚、錯誤訊息是否有幫助、手機上是否順暢操作 | 使用者從進入網站到完成目標的整個過程 |
| 資訊架構 IA 網站內容的分類、命名與層級 | 導覽分類決策、哪些內容在首頁、下拉選單層級、頁面之間的關聯 | 使用者是否能找到所需內容,系統是否有邏輯 |
常見誤解:UI 好看不代表 UX 好。一個設計美觀但使用者找不到入口的網站,UX 評分仍低。金融網站更需要注意:計算結果若沒有清楚解析,使用者無法判斷數字意義,UX 仍然失敗。
02金融網站的主要使用者類型
| 使用者類型 | 主要需求 | 設計對應 |
|---|---|---|
| 學生 | 考照題庫、課程講義、互動測驗、複利計算 | 明顯的「開始學習」入口,題庫分類清楚 |
| 金融從業人員 | 金融科技新知、AI 案例、永續金融、法規文章 | 文章分類完整,支援關鍵字搜尋 |
| 一般投資人 | 複利試算、債券評價、退休規劃、風險分析 | 工具卡片直覺,計算結果有解析 |
| 教師/創作者 | 教材、題庫、案例、可嵌入工具 | 提供下載或嵌入功能,授權說明清楚 |
網站架構應同時考慮不同使用者的入口路徑。若只為一種使用者設計,其他族群可能找不到所需內容。可在首頁提供多個明確的「開始點」,讓不同使用者快速分流。
03金融網站導覽架構設計
反面教材:十五個項目的導覽列
首頁、文章、AI、ESG、金融科技、考照、書籍、Podcast、 影片、遊戲、債券、股票、選擇權、退休、關於 問題: → 手機版需左右滑動 → 使用者無法判斷哪個分類包含所需內容 → 重要入口不突出(債券和書籍同層) → 視覺上造成認知負擔
建議主導覽架構(六個分類)
| 主導覽 | 下拉子項目 | 設計說明 |
|---|---|---|
| 首頁 | (無下拉) | 平台定位、核心入口、熱門工具 |
| 學習專區 | 最新文章、學習影片、PDF 與 PPT 講義 | 可以廣泛,重要性次於工具 |
| 金融考照 | CFP/AFP、模擬考題、互動測驗、題庫解鎖 | 證照是核心流量入口,需獨立分類 |
| 金融工具 | 複利試算、時間價值、債券評價、股票分析 | 本書 1–5 章的核心工具 |
| 閱讀與影音 | 書籍、文學作品、Podcast、影劇作品 | 閱讀相關,低頻但高價值 |
| 關於與合作 | 平台介紹、作者介紹、課程合作、聯絡 | 放末尾,低頻使用 |
首頁四層內容架構
| 層次 | 內容 | 目的 |
|---|---|---|
| 第一層:定位 | 平台標語、核心說明文字 | 讓使用者 3 秒內知道這是什麼網站 |
| 第二層:入口 | 「開始學習」「練習考題」「使用金融工具」三個按鈕 | 依使用者類型快速分流 |
| 第三層:熱門 | 最新 3–6 篇文章、熱門 3 個工具、精選書籍與題庫 | 展示核心內容,降低跳出率 |
| 第四層:信任 | 平台特色、適合讀者、作者簡介、訂閱入口 | 建立信任,引導訂閱或深入使用 |
04建立金融網站導覽列
<header class="site-header">
<div class="header-container">
<a href="index.html" class="site-logo" aria-label="金融知識平台首頁">金融知識平台</a>
<!-- 手機版選單按鈕(桌面隱藏,手機顯示)-->
<button type="button" id="menuButton" class="menu-button"
aria-expanded="false" aria-controls="mainNavigation">選單</button>
<nav id="mainNavigation" class="main-navigation" aria-label="主要導覽">
<a href="index.html">首頁</a>
<!-- 有下拉選單的分類 -->
<div class="nav-group">
<button type="button" class="nav-group-button" aria-expanded="false">學習專區</button>
<div class="dropdown-menu">
<a href="articles.html">最新文章</a>
<a href="videos.html">學習影片</a>
</div>
</div>
<a href="exam.html">金融考照</a>
<a href="books.html">閱讀與影音</a>
<a href="about.html">關於與合作</a>
</nav>
</div>
</header>
CSS:桌面下拉選單 + 手機收合
/* ── 頁首底色與位置 ─────────────────── */
.site-header {
position: sticky; /* 頁面捲動時固定在頂部 */
top: 0;
z-index: 1000; /* 確保在其他內容上方 */
background: #ffffff;
border-bottom: 1px solid #d9e1e8;
}
/* ── 下拉選單(桌面版) ─────────────── */
.nav-group { position: relative; }
.dropdown-menu {
position: absolute; top: calc(100% + 12px); left: 0;
min-width: 210px; padding: 10px;
display: none; /* 預設隱藏 */
border: 1px solid #d9e1e8; border-radius: 10px;
background: #ffffff; box-shadow: 0 10px 30px rgba(0,0,0,0.10);
}
.nav-group:hover .dropdown-menu,
.nav-group:focus-within .dropdown-menu { display: grid; }
/* ── 手機選單按鈕(桌面隱藏)────────── */
.menu-button { display: none; min-height: 44px; padding: 8px 14px; }
/* ── RWD 斷點:860px 以下改為手機版 ─── */
@media (max-width: 860px) {
.menu-button { display: inline-flex; align-items: center; }
.main-navigation { width: 100%; display: none; flex-direction: column; }
.main-navigation.open { display: flex; } /* 展開 */
.dropdown-menu {
position: static; /* 手機版下拉改為正常流 */
display: grid; /* 手機版直接展開 */
border: none; box-shadow: none; background: transparent;
}
}
JavaScript:手機選單開關
"use strict";
const menuButton = document.getElementById('menuButton');
const mainNavigation = document.getElementById('mainNavigation');
menuButton.addEventListener('click', function () {
// classList.toggle:有 'open' 就移除,沒有就加入
const isOpen = mainNavigation.classList.toggle('open');
// 更新 aria-expanded 讓輔助科技知道選單狀態
menuButton.setAttribute('aria-expanded', String(isOpen));
});
| 技術細節 | 說明 |
|---|---|
| position: sticky | 頁首固定在頁面頂部,不隨捲動消失 |
| z-index: 1000 | 確保導覽列在所有內容上方(含下拉選單) |
| focus-within | 鍵盤使用者 Tab 進入 nav-group 時也能打開下拉 |
| aria-expanded | 輔助科技(螢幕閱讀器)可讀取選單目前是否展開 |
| classList.toggle | 一個方法同時處理展開與收合(不需 if/else) |
05金融工具卡片設計
卡片應包含的五個元素
| 元素 | 說明 | HTML 對應 |
|---|---|---|
| 工具分類標籤 | 如「理財規劃」「固定收益」 | <p class='tool-category'> |
| 工具名稱 | 清楚描述工具的標題 | <h3>複利終值計算器</h3> |
| 一行說明 | 告訴使用者可以得到什麼結果 | <p>輸入本金...試算資產成長。</p> |
| 行動按鈕 | 導向工具頁面 | <a class='tool-link'>開始試算</a> |
| 視覺層級 | 按鈕永遠置底 | flex-direction: column + margin-top: auto |
<article class="tool-card"> <p class="tool-category">理財規劃</p> <h3>複利終值計算器</h3> <p>輸入本金、報酬率與年數,試算資產長期成長結果。</p> <a href="index.html" class="tool-link">開始試算</a> </article>
.tool-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr)); /* 桌面:3欄 */
gap: 22px;
}
.tool-card { display: flex; flex-direction: column; padding: 24px;
border: 1px solid #d9e1e8; border-radius: 14px; }
.tool-link {
margin-top: auto; /* 按鈕永遠對齊卡片底部 */
min-height: 46px; /* ≥ 44px 保障手機點擊範圍 */
}
/* ── 平板(900px 以下):2 欄 ─────── */
@media (max-width: 900px) { .tool-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* ── 手機(620px 以下):1 欄 ─────── */
@media (max-width: 620px) { .tool-grid { grid-template-columns: 1fr; } }
06RWD 響應式網頁設計
| 設定 | 程式碼 | 作用 |
|---|---|---|
| Viewport meta | <meta name="viewport" content="width=device-width, initial-scale=1.0"> | 告訴手機瀏覽器依裝置寬度顯示,不縮小成桌面版 |
| Media Query | @media (max-width: 700px) {...} | 螢幕寬度 ≤ 700px 時套用額外 CSS 規則 |
| 相對單位 | width: min(1180px, 92%) | 不使用固定像素,版面自動縮放 |
常見 RWD 斷點參考
| 寬度範圍 | 裝置 | 本書主要調整 |
|---|---|---|
| 1200px 以上 | 大型桌面電腦 | 正常顯示(3 欄工具卡、完整導覽) |
| 900–1199px | 一般桌面、大型平板 | 工具卡片改 2 欄 |
| 619px 以下 | 手機 | 工具卡片改 1 欄、導覽收合、表單 1 欄 |
手機版金融表格處理——金融網站常有債券資料表、題庫表格等複雜表格,在手機上無法完整顯示:
/* HTML:table 外層加 wrapper */
<div class="table-wrapper">
<table>...</table>
</div>
/* CSS */
.table-wrapper { overflow-x: auto; }
table { min-width: 720px; } /* 確保表格不擠壓 */
手機版按鈕最小高度應為 44px(Apple HIG 與 Google Material 的建議標準),確保手指點擊不易誤觸。
07SEO 搜尋引擎最佳化
SEO 的目的是讓搜尋引擎找到網站、理解內容、建立索引,並在適當搜尋情境中呈現頁面。SEO 不是保證排名第一,也不是大量塞入關鍵字。
SEO 三個層次
| 技術 SEO | 內容 SEO | 使用體驗 |
|---|---|---|
| 網站可正常開啟、HTTPS、手機版、robots.txt、sitemap.xml、頁面速度、內部連結無失效 | 每頁不同 title、meta description 具體、標題層級清楚、內容回答真實問題、關鍵字自然、lastmod 正確 | 導覽清楚、易讀、手機操作正常、無失效連結、工具有清楚解析、內容可信、能自然延伸閱讀 |
三個層次同等重要。技術 SEO 是地基,沒做好會讓爬蟲找不到頁面;內容 SEO 是主體,好內容才有排名機會;使用體驗是衡量標準,Google 越來越重視 Core Web Vitals 等使用體驗指標。
08title 與 meta description
| 頁面 | 建議 title | 不好的寫法 |
|---|---|---|
| 首頁 | 金融知識平台|考照題庫、金融工具與投資教材 | 金融知識平台 |
| 複利計算 | 複利終值計算器|本金、報酬率與投資年數試算 | 計算器 |
| 債券資料庫 | 債券資料庫|票面利率、信用評等與到期年限 | 金融知識平台 |
title 設計原則——準確描述頁面主題、每頁不同、重要主題放前面、不要堆疊關鍵字、可在末尾加入品牌名稱。
meta description 設計原則——概括頁面(約 120–160 字)、鼓勵點擊、不完全相同、自然包含主題、不保證顯示(搜尋引擎可能自動選用其他文字)。
09Canonical 與 Open Graph 設定
若同一內容有多個網址(如 pages.dev 與自有網域),可用 canonical 告訴搜尋引擎主要版本,避免被判定為重複內容。當連結分享到 Facebook、LINE 或其他平台時,Open Graph 控制分享標題、說明、圖片與連結。
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ① 頁面標題(每頁不同)-->
<title>金融知識平台|考照題庫、金融工具與投資教材</title>
<!-- ② 頁面說明(搜尋結果摘要)-->
<meta name="description"
content="整合金融考照、複利試算、債券分析、股票工具、AI 金融與永續金融教材。">
<!-- ③ 指定主要網址(避免重複內容)-->
<link rel="canonical" href="https://example.com/">
<!-- ④ Open Graph(社群分享效果)-->
<meta property="og:type" content="website">
<meta property="og:title" content="金融知識平台">
<meta property="og:description" content="金融考照、投資工具與互動教材。">
<meta property="og:url" content="https://example.com/">
<meta property="og:image" content="https://example.com/images/og-cover.jpg">
<!-- ↑ og:image 必須是完整 HTTPS 網址,圖片需公開可存取 -->
<link rel="stylesheet" href="css/main.css">
</head>
og:image 常見錯誤:使用相對路徑(images/og-cover.jpg)或本機路徑。社群平台在解析 OG 標籤時,必須能直接存取完整 HTTPS 網址。
10robots.txt 與 sitemap.xml
User-agent: * Allow: / Sitemap: https://example.com/sitemap.xml # 若有後台,可禁止爬蟲進入: User-agent: * Disallow: /admin/ Disallow: /private/
robots.txt 不是安全機制!它只是建議性的爬蟲指引,知道網址的人仍可直接開啟頁面。機密內容絕對不能只靠 robots.txt 保護。
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<!-- 首頁:最高優先度,週更新 -->
<url>
<loc>https://example.com/</loc>
<lastmod>2026-06-23</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<!-- 核心工具頁:次高優先度,月更新 -->
<url>
<loc>https://example.com/time-value.html</loc>
<lastmod>2026-06-23</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
| sitemap 欄位 | 說明 | 金融網站建議值 |
|---|---|---|
| <loc> | 頁面完整網址(必填) | 使用自有網域的 HTTPS 網址 |
| <lastmod> | 最後修改日期 YYYY-MM-DD | 更新文章或工具時同步更新 |
| <priority> | 站內相對重要性(0.0–1.0) | 首頁 1.0、核心頁 0.8、文章 0.6 |
sitemap 不列後台頁面、測試頁、404 頁或只供登入用戶看到的頁面。priority 是站內相對重要性,不代表搜尋排名保證。
11Google Search Console
| 功能 | 說明 | 金融網站應用 |
|---|---|---|
| 索引狀況 | 哪些頁面已被 Google 建立索引 | 確認所有工具頁都被找到 |
| 搜尋分析 | 曝光、點擊、平均排名、查詢關鍵詞 | 了解使用者搜尋什麼詞進入 |
| Sitemap 提交 | 提交後監控是否成功讀取所有頁面 | 網站上線後必做步驟 |
- 進入 search.google.com/search-console
- 選擇「網域」(驗證整個網域,含 www 與非 www)
- 複製 TXT 記錄值 → 在 Cloudflare DNS 新增 TXT 記錄 → 驗證
- 驗證成功後,左側選單 → 網站地圖 → 貼上 sitemap.xml 網址 → 提交
- 等待 Google 索引(通常數天至數週)
提交 sitemap 不代表立即出現在搜尋結果!Google 仍依網站品質、內容價值與外部連結決定抓取與排名。
12GA4 流量分析
| 分析維度 | 可以知道的資訊 | 金融網站應用 |
|---|---|---|
| 流量來源 | 搜尋、社群、直接、推薦 | 了解哪個管道帶來最多使用者 |
| 使用裝置 | 手機/桌面/平板比例 | 確認手機版佔比,決定 RWD 優先度 |
| 事件 | 點擊、計算、下載、訂閱等自訂事件 | 了解工具是否真正被使用 |
<!-- 替換 G-XXXXXXXXXX 為您的 Measurement ID -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX');
</script>
GA4 資料可能延遲,也可能受瀏覽器廣告阻擋影響。分析應著重趨勢與行為,不應把每個數字視為絕對精確。測試流量(自己開啟頁面)建議過濾掉。
13Cloudflare Web Analytics
| 比較項目 | GA4 | Cloudflare Web Analytics |
|---|---|---|
| 詳細事件追蹤 | ✅ 強 | ⚡ 基本 |
| 設定複雜度 | 🔵 較高 | 🟢 較低 |
| 隱私保護 | 需視 Cookie 設定 | 通常較簡單(無 Cookie) |
| 與 Cloudflare 整合 | 無特別優勢 | ✅ 高,部署後自動整合 |
建議搭配使用:Cloudflare Web Analytics 觀察基本流量趨勢;GA4 分析金融工具點擊、計算完成等自訂事件。兩者不互斥。
14GA4 事件追蹤
| 追蹤類型 | 能知道什麼 | 不能知道什麼 |
|---|---|---|
| 頁面瀏覽(page_view) | 使用者開啟了哪個頁面 | 使用者有沒有使用工具 |
| 自訂事件 | 使用者做了什麼操作(點擊、計算、完成) | 使用者的個人資料 |
"use strict";
// ── 報酬率分組(不傳送精確數值)────────────────────
function getRateGroup(ratePercent) {
if (ratePercent < 0) return 'negative';
if (ratePercent <= 5) return '0_to_5';
if (ratePercent <= 10) return '5_to_10';
return 'above_10';
}
// ── 追蹤複利計算事件 ────────────────────────────────
function trackCompoundCalculation(years, ratePercent) {
if (typeof gtag !== 'function') return; // 先確認 GA4 已載入
gtag('event', 'compound_calculation', {
investment_years: years,
annual_rate_group: getRateGroup(ratePercent),
// ⚠️ 不傳送:精確本金、精確報酬率、使用者名稱 / Email
});
}
金融工具建議事件命名規則
| 事件名稱 | 說明 | 參數 |
|---|---|---|
| compound_calculation | 複利計算完成 | investment_years、annual_rate_group |
| bond_filter_used | 債券篩選條件使用 | filter_type(rating/maturity/keyword) |
| exam_completed | 完成一輪測驗 | score_percent(分數百分比) |
GA4 事件絕對不應傳送:使用者姓名、Email、身分證號、電話、銀行帳號、精確資產金額或完整投資組合。使用分類後的「區間」資料(如 annual_rate_group: '5_to_10'),而非原始數值。
15金融網站核心分析指標
| 指標類別 | 重要指標 | 用來判斷 |
|---|---|---|
| 流量 | 使用者數、頁面瀏覽、回訪比例、手機比例、流量來源 | 整體規模與成長趨勢 |
| 工具使用 | 工具頁瀏覽、計算按鈕點擊、成功計算次數、完成率 | 工具是否真正被使用 |
| 內容導流 | 工具→文章→題庫→課程→購買的路徑轉換率 | 內容能否引導深度參與 |
只看「頁面瀏覽」不夠,需同時追蹤工具完成率、測驗完成率等行為指標。一個有 10,000 次瀏覽但 0 次計算的工具頁面,代表入口正確但功能設計有問題。
16SEO 內容品質原則
// ✗ 關鍵字堆疊(可能被搜尋引擎降低評分) 債券、債券投資、債券價格、債券評價、債券教學、 債券網站、最好債券工具、債券推薦、台灣債券...... // ✓ 回答使用者真實問題的標題 市場利率上升時,債券價格為什麼下跌? 如何使用存續期間估算債券價格變動? 十年後要累積 100 萬元,每月需要投入多少?
建立主題群組(Topic Cluster)
| 主題 | 包含內容 |
|---|---|
| 債券主題群組 | 債券入門文章(支柱頁)+ 債券定價工具 + 殖利率曲線圖 + 存續期間教材 + 債券選擇題 |
| 複利主題群組 | 複利基礎文章 + 複利計算器 + 複利 vs 單利圖表 + 退休規劃計算 + 72 法則說明 |
主題群組讓相關頁面彼此連結,有助於搜尋引擎理解網站的主題深度,也讓使用者在一個主題下自然延伸閱讀,降低跳出率。
17頁面速度與效能優化
| 常見問題 | 改善方式 |
|---|---|
| 圖片檔案過大 | 使用適當尺寸;照片用 JPG,圖示用 PNG,可考慮 WebP 格式 |
| 非首屏圖片阻擋載入 | 加入 loading="lazy" 延遲載入 |
| 首頁載入全部資料 | 只顯示精選與最新內容(文章 6 篇、工具 3 個) |
| Plotly HTML 過大 | 使用 include_plotlyjs="cdn" 而非內嵌整份 JS 程式庫 |
<!-- 使用 WebP 格式、加入 alt 與 lazy loading --> <img src="images/bond-cover.webp" alt="債券投資教材封面,介紹票面利率與信用評等基礎概念" loading="lazy" width="400" height="260" > <!-- width/height 屬性幫助瀏覽器預先保留空間,減少版面位移(CLS) -->
18無障礙設計要點
| 要點 | 說明 | 程式碼範例 |
|---|---|---|
| 圖片 alt | 螢幕閱讀器讀出圖片描述 | <img alt="本金十萬元..."> |
| 表單 label | 每個輸入欄位都需有對應 label | <label for="principal"> |
| 顏色不唯一 | 錯誤提示不能只靠紅色,需有文字 | 本金必須大於 0(紅色 + 文字) |
| 鍵盤操作 | 所有互動元件應可 Tab 鍵操作 | 導覽列、按鈕、下拉選單都需支援 |
| 標題層級 | 每頁一個 h1,依序 h2/h3 | 不要只因字體大小而亂用 h1 |
19完整 SEO 專案結構
financial-platform/ ├─ index.html ← 含 title/description/canonical/OG ├─ time-value.html ← 含獨立的 title/description ├─ bond-database.html ← 含獨立的 title/description ├─ visualization.html ← 含獨立的 title/description ├─ robots.txt ← 放在根目錄 ├─ sitemap.xml ← 放在根目錄 ├─ css/ │ ├─ main.css ← 全域樣式 │ ├─ navigation.css ← 導覽列樣式 │ └─ responsive.css ← RWD 斷點 ├─ js/ │ ├─ navigation.js ← 手機選單 JS │ └─ analytics.js ← GA4 事件追蹤 └─ images/ └─ og-cover.jpg ← Open Graph 分享圖片
20實務案例
(一)導覽列過度擁擠(十五個項目)
某金融網站導覽列放入十五個同層項目,手機使用者必須左右滑動。改善:保留五至六個主分類,使用下拉選單,手機版使用收合按鈕,首頁提供核心入口卡片。
(二)所有頁面 title 完全相同
網站所有頁面都使用「金融知識平台」作為 title,搜尋引擎難以區分各頁差異。改善:債券頁 →「債券資料庫|票面利率、信用評等與到期年限」;考照頁 →「金融考照題庫|CFP、AFP 模擬練習」。
(三)有內容但 Google 找不到
可能原因:尚未驗證 Search Console、沒有 sitemap、頁面無內部連結(孤立頁面)、robots.txt 錯誤設定了 Disallow、網站使用 pages.dev 與自有網域造成重複內容、或網站剛上線尚未被索引。
(四)GA4 有流量但不知道工具是否被使用
只有 page_view 無法判斷使用者是否完成計算。應增加 compound_calculation、bond_filter_used 等事件,才能知道工具的真實使用情況與完成率。
(五)事件追蹤傳送個人金融資料(資料治理問題)
某退休工具將使用者年齡、資產、收入、Email 全部傳送到 GA4。正確做法:只追蹤年齡區間、資產區間、工具類型、是否完成計算,不傳送任何可辨識個人的資料。
(六)手機版按鈕太小(44px 標準)
桌面版按鈕高度 20px,在手機上難以精準點擊。改善:設定 min-height: 44px,同時保留足夠間距。
21常見錯誤與除錯
| 症狀 | 最可能原因 | 修正方式 |
|---|---|---|
| 手機選單無法開啟 | JS 未載入或 id 不一致 | F12 Console 查看錯誤;確認 menuButton id 一致 |
| 下拉選單被其他內容遮住 | z-index 不足或父層 overflow:hidden | header z-index: 1000;移除不必要的 overflow:hidden |
| robots.txt 無法存取 | 檔案不在根目錄 | 確認 https://example.com/robots.txt 可開啟 |
| GA4 即時報表沒有資料 | Measurement ID 錯誤或廣告阻擋 | 確認 ID 正確;使用無痕視窗測試 |
| 社群分享沒有圖片 | og:image 使用相對路徑或圖片不公開 | 改為完整 HTTPS 網址且圖片需公開可存取 |
22關鍵字
23實作練習
- 將現有導覽列整理為六個主要分類,加入「金融工具」下拉選單(含四個連結)
- 建立手機版選單按鈕,確認 860px 以下時選單可收合
- 建立三張金融工具卡片(Grid 三欄),確認 620px 以下改為單欄
- 為每個頁面設定不同的 <title>,確認每頁 title 都描述該頁主題
- 建立 robots.txt 與 sitemap.xml,確認可在 https://你的網域/robots.txt 開啟
- 加入 GA4 追蹤碼,在瀏覽器即時報表中確認頁面瀏覽事件
- 手機選單展開時,按鈕文字從「選單」改為「關閉」
- 為目前頁面的導覽連結加入高亮(aria-current 或 active class)
- 為每張工具卡片加入 GA4 點擊事件(tool_card_clicked)
- 在複利計算器的計算完成後加入 compound_calculation 事件
- 為非首屏圖片加入 loading='lazy',並設定 width/height 屬性
- 使用 Python 自動產生 sitemap.xml(讀取 data/ 資料夾產生對應網址)
- 建立結構化資料(JSON-LD)標記,讓 Google 顯示豐富搜尋結果
- 建立麵包屑導覽(breadcrumb)提升頁面層級清楚度
- 設定 GA4 自訂漏斗:工具頁 → 計算完成 → 閱讀相關文章
上面「功能修改」的第一項,正是本章挑戰任務(04 分頁)任務一的原型——導覽列的手機選單邏輯是純前端 JavaScript,可以在瀏覽器裡真的執行,所以挑戰任務延續第一~三、五章的「真實執行」模式。SEO/meta 標籤/GA4 的部分則是設定與檢查清單,沒有可執行的程式邏輯,留在教材導讀中完整呈現。
本章結語——本章將已上線的金融網站進一步優化為容易使用、容易搜尋並能持續分析的平台。在網站介面方面,讀者重新整理資訊架構、建立主導覽與下拉選單、設計金融工具卡片,並使用 RWD 讓網站在桌面、平板與手機上正常操作。
在 SEO 方面,讀者完成 title、meta description、canonical、Open Graph、robots.txt 及 sitemap.xml,並了解 Google Search Console 如何協助網站建立索引及分析搜尋表現。在流量分析方面,讀者理解 GA4 與 Cloudflare Web Analytics 的分工,並建立複利計算、債券篩選、測驗完成等自訂事件。
下一章進入 Streamlit 金融網站管理後台。讀者將使用 Python 建立新增、修改、上架、排序、圖片上傳與 GitHub 發布等管理功能,讓網站管理者不必直接修改 JSON,也能持續更新金融文章、題庫、書籍與工具內容。
—金融網站導覽列(教材原始範例)
把瀏覽器縮小到 860px 以下(或直接在手機上開啟),可以看到導覽列自動收合成漢堡選單;滑鼠移到「學習專區」「金融工具」上會看到下拉選單。這就是課本第四~五節的導覽列與工具卡片完全對應的成品,等一下的挑戰任務就是在這份程式碼上動手修改。
—觀念測驗
共 15 題選擇題,涵蓋本章所有核心觀念。每題作答後會立即顯示解析。
挑戰任務:修改程式碼,讓工具自己告訴你哪裡錯
手機選單的開關邏輯是純前端 JavaScript,可以在瀏覽器中真的執行。下面三個練習都是「真的會執行」的程式碼,修改完成後按下「執行測試」,系統會把你的程式碼放進真實瀏覽器環境中運行,並用白話文告訴你哪裡不對。
任務一:功能修改
對應教材「二十三、實作練習(二)功能修改」
- 點擊選單按鈕展開選單後,按鈕文字應從「選單」變成「關閉」
提示(卡住了再打開)
menuButton.setAttribute("aria-expanded", ...) 之後,加入一行文字切換邏輯。
💡 查看範例解答(建議自己先試過再打開)
看完解答後,可以按「還原初始程式碼」重新自己動手做一次,或按「換一題再練習」挑戰另一個類似的任務。
任務二:抓出隱藏的錯誤
對應教材「二十一、常見錯誤與除錯」— 手機選單無法開啟
- 這份程式碼交接自另一位同學,點擊選單按鈕完全沒有反應
- 找出問題並修正,讓選單恢復正常運作
提示(卡住了再打開)
document.getElementById("...") 抓到的是 null。若沒有紅字錯誤但點擊完全沒反應,檢查 addEventListener 裡的事件名稱是不是打錯字了。
💡 查看範例解答(建議自己先試過再打開)
看完解答後,可以按「還原初始程式碼」重新自己抓一次,或按「換一題再練習」練習抓另一個錯誤。
任務三:無障礙標記與畫面狀態不一致
對應教材「四、(三)JavaScript:手機選單開關」— aria-expanded
- 這份程式碼可以正常執行、選單也能正常開關,但螢幕閱讀器會收到錯誤的狀態資訊
- 選單展開後,aria-expanded 屬性應該要是 "true",但沒有正確反映
- 找出問題所在並修正
提示(卡住了再打開)
isOpen 這個變數是「在切換之前」讀取的,還是「切換之後」的最新狀態,或者 aria-expanded 有沒有被寫死成固定值。
💡 查看範例解答(建議自己先試過再打開)
看完解答後,可以按「還原初始程式碼」重新自己抓一次,或按「換一題再練習」練習抓另一種不一致的成因。