[Lv2] SEO 進階優化:動態 Meta Tags 與追蹤整合
在多品牌平台專案中,實作動態 SEO 管理機制:動態 Meta Tags 注入、第三方追蹤整合(Google Analytics、Facebook Pixel),以及集中化的 SEO 設定管理。
1. 面試回答主軸
- 動態 Meta Tags 注入:實作可透過後台 API 動態更新 Meta Tags 的機制,支援多品牌/多站點配置。
- 第三方追蹤整合:整合 Google Tag Manager、Google Analytics 和 Facebook Pixel,支援非同步載入不阻塞頁面。
- 集中化管理:使用 Pinia Store 集中管理 SEO 設定,易於維護和擴展。
2. 動態 Meta Tags 注入機制
2.1 為什麼需要動態 Meta Tags?
問題情境:
- 多品牌平台,每個品牌需要不同的 SEO 設定
- 需要透過後台管理系統動態更新 SEO 內容
- 避免每次修改都要重新部署前端
解決方案: 實作動態 Meta Tags 注入機制
2.2 實作細節
檔案位置: src/common/hooks/useTrafficAnalysis.ts
// 第 38-47 行
case TRAFFIC_ANALYSIS.Enums.meta_tag:
Object.keys(trafficAnalysisConfig).forEach((name) => {
const metaObj = trafficAnalysisConfig as { [key: string]: string }
const content = metaObj[name]
const meta = document.createElement("meta")
meta.setAttribute("name", name)
meta.setAttribute("content", content)
document.head.appendChild(meta)
})
break
功能說明:
- 支援動態注入多種 meta tags
- 可透過後台設定配置不同的 meta 內容
- 支援不同品牌/站點的客製化 SEO 設定
- 在客戶端執行時動態插入到
<head>中
2.3 使用範例
// 從後台 API 取得的設定
const trafficAnalysisConfig = {
description: '多品牌遊戲平台',
keywords: '遊戲,娛樂,線上遊戲',
author: 'Company Name',
};
// 動態注入 Meta Tags
trafficAnalysisConfig.forEach((config) => {
// 建立並插入 meta tag
});
優點:
- ✅ 無需重新部署即可更新 SEO 內容
- ✅ 支援多品牌配置
- ✅ 集中化管理
限制:
- ⚠️ 客戶端注入,搜尋引擎可能無法完整抓取
- ⚠️ 建議搭配 SSR 使用效果更佳
3. Google Tag Manager / Google Analytics 整合
3.1 非同步載入機制
檔案位置: src/common/hooks/useTrafficAnalysis.ts
// 第 13-35 行
case TRAFFIC_ANALYSIS.Enums.google_tag:
if (!trafficAnalysisConfig.tag_id) {
console.warn("tag_id is empty")
return
}
try {
const script = document.createElement("script")
script.async = true
script.src = `https://www.googletagmanager.com/gtag/js?id=${trafficAnalysisConfig.tag_id}`
document.head.appendChild(script)
const script2 = document.createElement("script")
script2.textContent = `
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '${trafficAnalysisConfig.tag_id}');
`
document.head.appendChild(script2)
} catch (error) {
console.error("Error loading GTM:", error)
}
break
關鍵實作:
- 使用
script.async = true非同步載入,不阻塞頁面渲染 - 動態建立
<script>標籤並插入 - 支援透過後 台配置不同的追蹤 ID
- 包含錯誤處理機制
3.2 為什麼使用非同步載入?
| 載入方式 | 影響 | 建議 |
|---|---|---|
| 同步載入 | ❌ 阻塞頁面渲染 | 不建議 |
| 非同步載入 | ✅ 不阻塞頁面 | ✅ 推薦 |
| 延遲載入 | ✅ 頁面載入後再載入 | 可考慮 |
效能考量:
- 追蹤腳本不應影響頁面載入速度
- 使用
async屬性確保非阻塞 - 錯誤處理避免載入失敗影響頁面
4. Facebook Pixel 追蹤
4.1 頁面瀏覽追蹤
檔案位置: src/router/index.ts
// 第 102-106 行
router.afterEach(() => {
if (window.fbq) {
window.fbq('track', 'PageView');
}
});
功能說明:
- 在每個路由切換後觸發 Facebook Pixel 頁面瀏覽追蹤
- 支援 Facebook 廣告轉換追蹤
- 使用
router.afterEach確保路由切換完成後才觸發
4.2 為什麼在 Router 中實作?
優點:
- ✅ 集中管理,所有路由自動追蹤
- ✅ 不需要在每個頁面手動加入追蹤碼
- ✅ 確保追蹤的一致性
注意事項:
- 需要確認
window.fbq已載入 - 避免在 SSR 環境中執行(需要檢查環境)
5. SEO 設定集中化管理
5.1 Pinia Store 管理
檔案位置: src/stores/TrafficAnalysisStore.ts
// 第 25-38 行
function updateTrafficAnalysisConfigMap(data: Response.ISetting) {
if ('digital_analytics' in data) {
const analytics = JSON.parse(data.digital_analytics);
Object.keys(analytics).forEach((service) => {
const analysisKey = service as TrafficAnalysisKey;
if (analysisKey in trafficAnalysisConfigMap) {
trafficAnalysisConfigMap[analysisKey] = {
...trafficAnalysisConfigMap[analysisKey],
...analytics[analysisKey],
};
}
});
}
}
功能說明:
- 透過 Pinia Store 集中管理 SEO 相關設定
- 支援從後台 API 動態更新設定
- 集中管理多種 SEO 服務配置(Meta Tags、GA、GTM、Facebook Pixel 等)
5.2 架構優勢
┌─────────────────────────────────────┐
│ SEO Configuration Store │
│ (TrafficAnalysisStore.ts) │
├─────────────────────────────────────┤
│ - Centralized management │