版本记录

v2.4.0

GEO 第二輪改善:WebSite Schema、速度比較表、方法論、Footer 法律連結

Schema 結構化數據

  • 全站新增 WebSite JSON-LD + SearchAction(搜尋速度測試頁面)
  • Person schema 增強:新增 jobTitle、worksFor、sameAs(速度測試國家頁面)

內容 + E-E-A-T

  • 速度測試 Hub 新增 8 國速度比較表(國家、最高速度、平均速度、網絡、地點數)
  • 速度測試 Hub 新增測試方法論 section(裝置、App、條件、來源)
  • 速度測試 Hub 國家卡標題改為問題式(如「日本 5G 有幾快?」)
  • 新增 16 個翻譯鍵 × 11 語言(比較表、方法論、問題式標題、法律連結)

品牌 + 信任

  • SocialBar 新增 LinkedIn 連結及圖示
  • 新建 Footer 組件,取代 inline footer
  • Footer 新增私隱政策及服務條款連結(指向 b4travel.shop)

v2.3.0

GEO 優化:AI 爬蟲指令、速度測試日期、Article Schema、安全標頭

技術 GEO

  • robots.txt 新增 9 個 AI 爬蟲明確 Allow 指令(GPTBot、ClaudeBot、PerplexityBot、ChatGPT-User、Google-Extended、CCBot、OAI-SearchBot、anthropic-ai、cohere-ai)
  • firebase.json 新增安全標頭:X-Content-Type-Options、X-Frame-Options、Content-Security-Policy
  • llms.txt 新增 LinkedIn 公司連結

內容 E-E-A-T

  • 所有速度測試數據新增測試日期標示(testDate 欄位)
  • 每個國家頁面顯示「數據最後更新」日期
  • 速度表格每行顯示測試日期

Schema 結構化數據

  • 速度測試頁面新增 Article schema(datePublished、dateModified、author Person、publisher Organization)
  • 速度測試頁面新增 speakable 屬性(SpeakableSpecification)
  • Organization sameAs 新增 LinkedIn 公司頁面
  • Store schema 新增 image(商戶 Logo URL)同 url(門市詳情頁連結)
  • 非中文版 Organization schema 從簡化版升級為完整版(含 sameAs、contactPoint、description)

v2.2.1

修復缺失商店數據:新增比動力 + Teledom 升級為星級商戶

背景

  • cleanup-v1.7.0-backup 分支曾正確包含比動力及 Teledom 升級改動(commit ec8fcd3、9174f26)
  • 當 main 分支用 608b423 Initial commit from Astro 重建時,links.ts 從頭寫起,遺失了 backup 分支嘅商店數據
  • 比動力完全無被加入 main 分支,Teledom 被放回合作商戶(應為星級商戶)
  • 本版本從 backup 分支還原呢兩項遺失嘅改動

新增商店

  • 新增比動力(Bepower)到星級合作商戶 — 葵芳葵涌廣場一樓 B78
  • 地址:葵芳葵涌廣場一樓B78|電話:9345 1473
  • 營業時間:星期一至六 12:00-20:00
  • 社交媒體:Instagram @bepower_b78|WhatsApp 852-9345-1473
  • 新增 bepower.webp Logo(從 backup 分支 PNG 轉換為 WebP,8.25 KB)
  • 產品標籤:eSIM + 實體卡(全系列)

商店升級

  • Teledom 從合作商戶升級為星級合作商戶(荔枝角)
  • Teledom 產品標籤從「實體卡」升級為「eSIM + 實體卡」(全系列產品)
  • 新增荔枝角(Lai Chi Kok)地區到星級合作商戶
  • 從合作商戶移除荔枝角地區(Teledom 為該區唯一商戶)

數據變更

  • 星級合作商戶:15 間 → 17 間(+2)
  • 合作商戶:6 間 → 5 間(-1,Teledom 升級)
  • 總門市數:21 間 → 22 間(+1,新增比動力)
  • 星級地區:10 個 → 12 個(+2:葵芳新增比動力、新增荔枝角區)
  • 總頁面數:352 → 363(+11,新增 kwai-fong-bepower 頁面 × 11 語言)

v2.2.0

清理 Cloud Run 部署系統,統一使用 Firebase Hosting

移除

  • 完全移除 Cloud Run 部署系統
  • 刪除 deploy.sh — Cloud Run 部署腳本
  • 刪除 Dockerfile — Docker 容器配置
  • 刪除 nginx.conf — Nginx 伺服器配置
  • 刪除 .dockerignore — Docker 忽略規則
  • 停用 GCP Cloud Run 服務
  • 清理 40+ 個舊容器映像(保留最後 3 個版本作備份)

改進

  • 統一部署流程 — 僅使用 Firebase Hosting
  • 簡化部署:執行 ./deploy-firebase.sh 即可
  • 移除 Docker 和容器化相關複雜性
  • 部署時間從 2 分鐘減少到 30 秒
  • 內建全球 CDN、自動 SSL 證書

備份

  • Git 標籤 v1.6.4-with-cloud-run 保留清理前完整代碼
  • Git 分支 backup/cloud-run-deployment-system 可用於緊急恢復
  • Cloud Run 配置已備份(可於 15 分鐘內恢復)

原因

  • 靜態網站不需要容器化
  • Firebase Hosting 提供更簡單、快速的部署體驗
  • 減少維護複雜度
  • 更低的營運成本

v2.1.0

11 語言國際化 + SEO 全面升級

國際化(i18n)

  • 全站從 2 種語言(中/英)擴展至 11 種語言 — 中文(香港)、English、Français、Nederlands、Deutsch、日本語、한국어、繁體中文(台灣)、简体中文、Español、Português
  • 採用 Subpath Routing 架構 — 每種語言擁有獨立 URL(如 /en/、/fr/、/ja/),為 Google 推薦的最佳 SEO 做法
  • 全站頁面由 32 頁擴展至 352 頁(32 頁 × 11 種語言),全部為 Astro SSG 預先生成的靜態 HTML
  • 新增集中式翻譯系統(src/data/translations.ts)— 超過 80 個翻譯鍵值 × 11 種語言,涵蓋 UI 標籤、國家名稱、FAQ 內容
  • 新增 i18n 工具模組(src/data/i18n.ts)— 包含 localePath()、isChinese()、stripLocale()、getNonDefaultLocales() 等輔助函數
  • 新增語言選擇器組件(LangSelector.astro)— 取代舊有中英切換按鈕,支援 11 種語言即時切換
  • 移除舊有 CSS 語言切換機制 — 不再使用 lang-zh/lang-en CSS class 及 data-lang 屬性
  • 移除 localStorage 語言偏好儲存 — 每個 URL 即代表一種語言,無需 JavaScript 切換
  • 所有組件重構支援 locale prop — ProfileHeader、LinkButton、LinkSection、SpeedtestSection、MapView、Breadcrumb 全部接受 locale 參數
  • 地圖組件多語言化 — 所有 popup 文字、按鈕標籤、距離顯示、定位提示均按語言翻譯
  • 中文地址智能判斷 — zh(香港)、tw(台灣)、sc(簡體)顯示中文地址,其他語言顯示英文地址

SEO 改進

  • 每頁 HTML head 包含 11 個 hreflang 標籤 + x-default — 告知 Google 所有語言版本的對應關係
  • 動態生成 sitemap.xml — 由靜態 31 URL 升級為動態 352 URL,每個 URL 包含 xhtml:link hreflang 標注(雙重 hreflang 信號)
  • og:site_name 按語言翻譯 — 中文顯示「B4travel 電話卡」、英文顯示「B4travel SIM Cards」、日文顯示「B4travel SIMカード」等
  • og:image:alt 按語言翻譯 — 提升社交媒體分享的無障礙性
  • apple-mobile-web-app-title 按語言翻譯 — PWA 安裝名稱本地化
  • meta keywords 精簡化 — 移除過長的中文關鍵字列表,改用簡潔通用關鍵字
  • og:locale 動態設定 — 每個語言頁面設定正確的 Open Graph locale(如 zh_HK、en、ja)
  • canonical URL 每語言獨立 — 確保 Google 正確索引每個語言版本

頁面路由架構

  • 中文(香港)作為預設語言 — 保持根路徑 /(無前綴),其他語言使用 /{lang}/ 前綴
  • 新增 [lang]/ 動態路由目錄 — 包含 index、speedtest/index、speedtest/[country]、store/[slug]、changelog/index
  • 每個 [lang] 頁面使用 getStaticPaths() 搭配 getNonDefaultLocales() 自動生成 10 種語言版本
  • 根路徑頁面硬編碼 locale="zh" — 確保預設語言不帶前綴
  • Sitemap 由靜態 public/sitemap.xml 遷移至動態 Astro endpoint(src/pages/sitemap.xml.ts)

v2.0.0

多頁面 SEO 大升級

新功能

  • 全站從 1 頁擴展至 31 頁 — 使用 Astro SSG 動態路由(getStaticPaths)自動生成獨立靜態頁面
  • 新增速度測試 Hub 頁面(/speedtest)— 展示 8 個國家速度概覽卡片,包含最高速度、平均速度、測試地點數
  • 新增 8 個國家速度測試獨立頁面(/speedtest/japan、/speedtest/korea 等)— 每頁包含完整城市速度表格、統計欄、FAQ、其他國家交叉連結
  • 新增 21 個門市獨立頁面(/store/kwai-fong-anlander 等)— 每頁包含地址、電話、營業時間、Google Maps 連結、社交媒體按鈕、同區門市連結
  • 新增麵包屑導航組件(Breadcrumb.astro)— 所有子頁面顯示層級導航
  • 新增版本號顯示於頁尾(連結至 /changelog)
  • 新增更新日誌頁面(/changelog)— 詳細記錄所有版本變更

SEO 改進

  • 每個國家頁面獨立 Dataset JSON-LD 結構化數據(針對該國速度測試關鍵詞)
  • 每個國家頁面獨立 FAQPage JSON-LD(3 條 FAQ)
  • 每個門市頁面獨立 LocalBusiness JSON-LD(比 Store 更適合本地 SEO)
  • 所有子頁面獨立 BreadcrumbList JSON-LD
  • 每頁獨立 canonical URL 及 OG URL(BaseLayout 支援 url prop)
  • Sitemap 從 1 個 URL 擴展至 31 個真實 URL
  • 主頁新增內部連結區塊 — 連結到所有國家速度測試頁面
  • 主頁 JSON-LD Dataset URL 從 fragment(#)改為真實頁面路徑
  • Hub-and-spoke 內部連結架構 — 主頁作為 Hub,國家頁及門市頁互相交叉連結

資料結構

  • 速度測試數據抽取至獨立共享檔案(src/data/speedtest.ts)— 主頁及國家頁面共用
  • 新增每國 slug、description(中英文)、networkOperator 欄位
  • 新增 speedNum 數值欄位用於計算統計(最高速度、平均速度)
  • 新增 getCountryStats() 輔助函數
  • 門市數據新增 getAllStores() 輔助函數(src/data/links.ts)

v1.6.3

WebP 圖片壓縮 + 安全標頭

效能

  • 所有 28 個商戶 Logo 由 PNG/JPEG 轉換為 WebP 格式(Python PIL quality=80)
  • 圖片大小由 436KB 縮減至 88KB(減少 80%)

安全

  • Firebase Hosting 部署配置新增 Referrer-Policy: strict-origin-when-cross-origin
  • Firebase Hosting 部署配置新增 Permissions-Policy: geolocation=(self), microphone=(), camera=()

v1.6.2

深度優化 — 關鍵 Bug 修復 + 效能 + 無障礙

關鍵修復

  • 修復 astro.config.mjs 網站 URL 缺少 "s"(location → locations)— 影響所有 canonical URL 及 OG 標籤
  • 移除 sitemap.xml 中無效的 fragment(#)URL — Google 完全忽略 fragment URL

效能

  • Leaflet 地圖延遲載入 — 由靜態載入改為動態 script 注入(節省首次載入 ~320KB)
  • 新增 GA4 preconnect hint

SEO

  • 新增 OG image 尺寸(width/height)及 alt 屬性
  • Twitter card 由 summary 改為 summary_large_image
  • 新增 hreflang en 語言標記

無障礙

  • 社交媒體按鈕(Facebook/Instagram/WhatsApp)新增 aria-label
  • 分享按鈕新增 aria-label
  • 提升文字對比度(opacity 0.5→0.7 / 0.75→0.8)
  • 完善 manifest.json(scope、orientation、lang、categories、maskable icons)

v1.6.1

GA4 分析 + 強化 SEO 結構化數據

新功能

  • 新增 Google Analytics GA4(G-NVWBJCR5XY)追蹤代碼
  • 新增 8 個國家獨立 Dataset JSON-LD(每國包含城市速度數據)
  • 新增 BreadcrumbList JSON-LD 結構化數據
  • 速度測試區域新增國家錨點 ID(speedtest-japan、speedtest-korea 等)

v1.6.0

安全修復 + SEO 基礎建設

安全

  • MapView.astro 新增 XSS 防護(escapeHtml + safeUrl 函數)
  • index.astro hash 驗證新增正則白名單(防止注入攻擊)

SEO

  • 新增 Organization + WebPage JSON-LD 結構化數據
  • 新增 Store JSON-LD(所有門市地址、電話、營業時間、座標)
  • 新增 FAQPage JSON-LD(4 條常見問題)
  • 更新 title 及 description 加入 5G 關鍵詞及實測速度數據
  • 擴展 meta keywords

v1.5.x

Firebase Hosting 遷移 + 自訂域名

基礎設施

  • 由 Google Cloud Run + nginx 遷移至 Firebase Hosting
  • 設定自訂域名 locations.b4travel.shop(SSL 自動配置)
  • 建立 deploy-firebase.sh 部署腳本(Firebase REST API,無需 firebase login)
  • 建立 GitHub repo(git@github.com:Stoneip/locations.b4travel.shop.git)

v1.4.x

商戶資料完善 + Logo 壓縮

內容

  • 新增門市社交媒體按鈕(Facebook / Instagram / WhatsApp)
  • 新增門市詳細資料(地址、電話、營業時間)
  • 新增線上零售商資料
  • 商戶 Logo 壓縮(4.3MB → 480KB)
  • 更新多間門市地址及連結

v1.0.0

初始版本

功能

  • Astro v5 靜態網站生成器
  • 門市資訊展示(星級合作商戶 + 合作商戶)
  • 互動地圖(Leaflet.js)
  • 速度測試數據展示(8 國 70+ 地點)
  • 中英文雙語切換
  • PWA 支援(Service Worker + manifest.json)
  • 地區篩選功能