第一章:把你的網站賣出去!SEO 核心策略與 Meta Tags 實戰

恭喜你!走完了前面所有的開發章節,你現在已經擁有了一個具備完整功能、絢麗特效、並且能 24 小時幫你收錢的知識付費平台。

但是,在真實的商業世界中,開發完成只是整個專案生命週期的前 20%。 如果沒有人知道你的網站,那你的系統寫得再好、架構再神,它都只是一座放在沙漠裡的豪華皇宮,連一毛錢都賺不到。

在「進階營運 (Advanced Operations)」這個篇章中,我們不再寫系統邏輯,我們要專注於增長與行銷 (Growth & Marketing)。而這一切的第一步,就是解決 SEO (搜尋引擎最佳化) 的問題。

我們希望達成的終極目標是:當一個陌生人在 Google 搜尋「零基礎 如何寫 Line Bot」、「Next.js 全端開發教學」時,你的網站能夠霸佔搜尋結果的第一頁!

🎯 本章目標

  1. 深入理解 Meta Tags 對於搜尋引擎爬蟲與社群平台的重要性。
  2. 實作 Next.js App Router 中最強大的 Metadata API,進行全域 SEO 設定。
  3. 設定 Open Graph (OG) 圖片,讓你的網址分享到 Facebook 或 Line 時,擁有高點擊率的漂亮預覽卡片。

🔍 什麼是 Meta Tags?為何它決定了你的點擊率?

Meta Tags 是一段隱藏在網頁 HTML <head> 區塊裡面的標籤。這些文字不是寫給人類看的,它是專門寫給 Google 爬蟲 以及 社群平台 (FB, Line, X) 的機器人看的。

當你在 Line 裡面貼上一段網址傳給朋友時,為什麼 Line 會自動生出一張漂亮的縮圖、一個粗體的標題、跟一段兩行字的介紹? 因為 Line 的伺服器會瞬間去爬取你這個網址的 Meta Tags:

  • <meta property="og:title"> 決定了卡片的標題。
  • <meta property="og:description"> 決定了卡片的介紹文案。
  • <meta property="og:image"> 決定了那張吸引眼球的預覽圖片。

如果你的網站沒有設定這些標籤,分享出去就只會是一串冷冰冰、醜陋的藍色連結字串,點擊率 (CTR) 將會低得可憐。


🛠️ 第一步:在 Next.js 中設定全域 Metadata (首頁 SEO)

在以前的 React SPA 時代,要動態改變 <head> 是一件極度痛苦的事(通常要裝 react-helmet 這種套件,而且爬蟲還不一定抓得到)。 但在 Next.js App Router 中,SEO 變得極度簡單且強大。你只需要在你的 layout.tsxpage.tsx 中,匯出一個名為 metadata 的常數物件,Next.js 就會在 Server 端幫你編譯出完美的 HTML。

🔥【Vibe Prompt 實戰詠唱】 我正在使用 Next.js 14 的 App Router。 請幫我在 layout.tsx 中寫一份具備商業水準的全域 Metadata 物件。 我的網站叫做 "Vibe Tutor",這是一個專門教 Vibe Coding (用語音或自然語言寫程式) 和 AI 應用開發的平台。 請幫我設定好引人注目的 title, description (塞入關鍵字), keywords, 以及社群分享用的 openGraph 與 twitter 設定。

AI 會幫你生成類似這段專業的程式碼:

// src/app/layout.tsx
import type { Metadata } from 'next';

export const metadata: Metadata = {
  // 1. 給 Google 搜尋結果看的標題與描述
  title: 'Vibe Tutor | 零基礎 AI 寫程式教學,把知識變成印鈔機',
  description: '全台唯一的 Vibe Coding 實戰教學平台。不用死背語法,學習如何指揮 AI,打造企業級 Line Bot、地圖應用與 SaaS 收費後台。',
  keywords: 'Vibe Coding, AI 寫程式, Cursor 教學, Next.js, FastAPI, Line Bot, 知識付費系統',
  
  // 2. 給社群平台 (FB, Line) 看的 Open Graph 設定
  openGraph: {
    title: 'Vibe Tutor | 零基礎 AI 寫程式教學',
    description: '成為指揮 AI 的軟體架構師,打造具備商業價值的產品。',
    url: 'https://vibetutor.tw',
    siteName: 'Vibe Tutor',
    images: [
      {
        // ⚠️ 你必須準備一張 1200x630 比例的精美宣傳圖,放在 public 資料夾下
        url: 'https://vibetutor.tw/og-image.jpg', 
        width: 1200,
        height: 630,
        alt: 'Vibe Tutor 網站宣傳圖',
      },
    ],
    locale: 'zh_TW',
    type: 'website',
  },
  
  // 3. 給 X (Twitter) 看的預覽設定 (大圖預覽)
  twitter: {
    card: 'summary_large_image',
    title: 'Vibe Tutor | 零基礎 AI 寫程式教學',
    description: '成為指揮 AI 的軟體架構師,打造具備商業價值的產品。',
    images: ['https://vibetutor.tw/og-image.jpg'],
  },
};

把這段加上去之後,你的首頁就具備了最基礎的 SEO 戰鬥力了。


📄 第二步:動態生成每篇課程專屬的 SEO (Dynamic Metadata)

全域設定很棒,但我們不能讓「首頁」跟「第 5 堂課」分享出去的標題長得一模一樣! 如果使用者分享了某一篇名為「如何串接綠界金流」的文章,社群預覽卡片的標題就必須是「如何串接綠界金流」,這樣才能精準打中受眾的痛點。

在 Next.js 動態路由 (例如 app/courses/[...slug]/page.tsx) 中,你可以使用非同步的 generateMetadata 函數:

import type { Metadata } from 'next';

// 根據網址參數,動態生成 SEO 標籤
export async function generateMetadata({ params }: { params: { slug: string[] } }): Promise<Metadata> {
  const { slug } = await params;
  
  // 這裡的邏輯可以去解析 Markdown 檔案的 Front-matter 標題,
  // 為了示範,我們這裡簡單將網址參數轉換為標題
  const courseId = slug[slug.length - 1]; // 例如 '08-ecpay-integration'
  const courseTitle = `課程解析:${courseId.replace(/-/g, ' ')}`;
  
  return {
    title: `${courseTitle} | Vibe Tutor 實戰課`,
    description: `深入淺出的 ${courseTitle} 教學,帶你解決開發過程中的痛點。立即進入學習!`,
    openGraph: {
      title: `${courseTitle} | Vibe Tutor 實戰課`,
      description: `這是一堂關於 ${courseTitle} 的高階商業實戰課程。`,
      // 如果你有時間,甚至可以為每堂課準備不同的封面圖片!
    },
  };
}

透過這種動態生成的機制,當你擁有 100 堂課,你的網站就會自動產生 100 個具備獨立精準關鍵字的頁面,讓 Google 爬蟲在廣大的網海中更容易搜尋到你。

✅ 本章小結

在競爭激烈的網路市場,「好酒也怕巷子深」。 設定好精準的 Metadata 與漂亮的 OG 圖片,你的網站就具備了最強的「社群傳播力與裂變潛力」。下次當你在 Facebook 工程師社團發文宣傳你的教學網站時,帶有吸睛圖片與殺手級文案標題的連結,絕對能讓你的點擊率翻倍成長!

有了流量之後,下一步就是要追蹤這些流量。在下一章,我們將帶你串接 Google Analytics 4 (GA4),用數據看透每一個訪客的行為!