跳至主要内容

85 分鐘複製建站:給 AI Agent 的 SEO Blog 建站 Spec


這篇文章不是 Next.js Blog 教學

網路上已經有幾百篇「用 Next.js + Markdown 建 Blog」的教學,從 Vercel 官方 starter template 到 freeCodeCamp 的 6 小時課程,技術路線幾乎一模一樣。這篇不是其中之一。

這是一份 blueprint——人類讀它理解流程與決策邏輯,AI Agent 讀它直接執行建站。它的核心前提是:你已經有一個跑過的 Next.js 專案,現在要用最短時間複製出第二個品牌網站。不是 create-next-app,不是從空白資料夾開始,是從已驗證的模板源複製、替換、部署。

實戰案例: VarianceLab(variancelab.org),2026-04-12 建立,85 分鐘完成。模板源為 SetupBro。


適用邊界(先確認這篇是不是寫給你的)

適用於:

  • 你手上已經有一個可運行的 Next.js 專案,想快速複製出新品牌站
  • 品牌官網 + SEO blog
  • 內容驅動型網站(知識庫、技術文檔站)
  • 個人品牌 / Portfolio + blog
  • 你打算把這份 spec 交給 AI Agent(Claude Code、Cursor 等)執行

不適用於:

  • 你完全沒有任何現成專案(請先去跟著任何一篇 Next.js 教學走完一遍)
  • 需要用戶註冊/登入的 SaaS
  • 電商(需要購物車、庫存管理)
  • 即時互動型應用(聊天、協作工具)

如果你屬於「不適用」的情況,這篇文章對你沒有價值,現在離開可以省下你的時間。


你需要準備什麼(開工前)

在開始之前,把這些東西準備好。AI 不能替你做這些,但有了這些,AI 可以替你做剩下的全部。

項目說明為什麼重要
品牌名中英文都要決定所有 metadata 和視覺文案
域名已購買、DNS 在 Cloudflare部署最後一步需要
LogoSVG 格式最佳(也接受 PNG)Header + Favicon
Hero 素材靜態圖(fallback)+ 影片(加分)首頁第一眼印象
色系方向「像 Bloomberg」比「藍色」更有用AI 需要對標物來決定色值
內容定位一句話說明這個網站是幹嘛的決定 SEO description 和文案調性
至少一篇文章草稿即可,AI 可以潤稿或生成更多沒有內容的 blog 沒有靈魂
GitHub 帳號 + PATrepo scope推 code 用
Vercel 帳號免費版即可部署平台
GA4 Measurement ID格式 G-XXXXXXXXXX流量追蹤

準備時間估算: 30-60 分鐘(主要花在 logo 和文案上)。


架構決策(為什麼這樣選)

以下是已經驗證過的技術選型。如果你沒有強烈理由,直接沿用。

技術棧

選擇理由
Next.js (App Router)SSG 靜態生成 = 最快的 LCP,SEO 天花板
TailwindCSS不需要設計稿,直接在 JSX 裡寫樣式
TypeScript型別檢查在重構時救你一命
Markdown + gray-matter + marked文章寫在 .md 檔裡,不需要資料庫
Vercel推 main 自動部署,零配置

為什麼 MVP 不用資料庫

SEO blog 的內容更新頻率低(一週幾篇),Markdown 靜態生成的 LCP 比任何動態方案都快。Supabase 或 CMS 留到 Phase 2,當你確定這個網站值得長期經營再接。

為什麼從現有專案複製而不是 create-next-app

從零跑 create-next-app 後你還要:裝 TailwindCSS、設 PostCSS、調 tsconfig、寫 blog 解析引擎、設計 layout... 這些全都是已解決問題。從模板源複製再改,省掉 40 分鐘。


執行流程(給 AI 的 spec)

以下步驟按順序執行。每個步驟標註了預估耗時和輸出物。


Phase 0:初始化(5 分鐘)

輸入: 模板源專案路徑、新專案名稱

動作:

  1. 建立新專案目錄
  2. 從模板源複製:package.jsontsconfig.jsonnext.config.tspostcss.config.mjseslint.config.mjs
  3. 修改 package.json:改 name,移除不需要的 dependencies(Supabase、form libraries 等)
  4. 複製 src/lib/blog.ts(Markdown 解析引擎)— 這是核心,不要重寫
  5. 建立目錄結構:src/app/src/components/src/lib/content/blog/public/
  6. npm install

輸出: 可編譯的空專案骨架


Phase 1:素材就位(2 分鐘)

輸入: Logo、Hero 圖/影片、其他品牌素材

動作:

  1. 將所有素材複製到 public/
  2. 統一命名(logo.svghero.pnghero.mp4
  3. 用 Logo 生成 favicon + apple-touch-icon,放到 src/app/(Next.js App Router 自動偵測):
    from PIL import Image
    logo = Image.open('public/logo.png')
    logo.save('src/app/favicon.ico', format='ICO', sizes=[(16,16),(32,32),(48,48)])
    logo.resize((180,180), Image.LANCZOS).save('src/app/apple-icon.png', format='PNG')

輸出: public/ 目錄完整 + favicon 就位


Phase 2:核心頁面(25 分鐘)

這是耗時最長的階段。按以下順序建立:

2.1 全域 Layout(src/app/layout.tsx

包含:

  • Google Fonts 載入(Noto Sans TC 或其他)
  • GA4 Script 注入
  • Metadata(title template、description、OG tags、favicon、metadataBase)
  • Header + Footer 元件引用
  • <html> 的 className(dark mode、font variable)

2.2 全域樣式(src/app/globals.css

包含:

  • TailwindCSS import
  • @theme inline 自訂色系變數
  • .prose-content 文章內容樣式(h2、h3、p、a、code、blockquote、table 等)
  • .prose-dark 覆蓋樣式(深色背景下的文字、表格、code block 色值)
  • 深色/淺色模式對應色值

2.3 Header(src/components/Header.tsx

  • Logo + 品牌名(深色背景時 Logo 文字用白色)
  • 導覽連結(文章列表、CTA 按鈕)
  • Sticky + backdrop-blur + 半透明深色背景(bg-slate-900/60 backdrop-blur-md
  • 深色主題時,導航文字用 text-slate-300,hover 用 text-white

2.4 Footer(src/components/Footer.tsx

  • 品牌名 + 標語 + 版權

2.5 首頁(src/app/page.tsx

典型結構:

  1. Hero Section — 背景影片/圖片 + 漸層遮罩 + 大標題 + 副標 + CTA。用 -mt-[72px] pt-[72px] 讓 Hero 延伸到半透明導航列後面,增強沉浸感
  2. Content Pillars — 3 欄 grid,展示內容分類
  3. Latest Articles — 3 欄 grid 文章卡片
  4. Brand Statement — 品牌宣言卡片

2.6 文章列表頁(src/app/articles/page.tsx

  • 2 欄 grid 卡片佈局
  • 每張卡片含分類色系漸層頂圖

2.7 文章內頁(src/app/blog/[slug]/page.tsx

包含:

  • generateStaticParams()(SSG)
  • generateMetadata()(動態 OG tags)
  • JSON-LD Article Schema(<Script type="application/ld+json">
  • 分類色系 hero banner
  • .prose-content 渲染區
  • 底部 CTA 卡片

2.8 共用元件

  • ArticleCard — 文章卡片(含分類漸層頂圖 + 圖標)
  • CategoryBadge — 分類標籤 + 色系工具函數
  • HeroVideo — 首頁 hero 背景影片('use client'

輸出: 所有頁面可在 localhost 瀏覽


Phase 3:SEO 三件套(5 分鐘)

  1. src/app/sitemap.ts — 自動從 blog 目錄生成 sitemap.xml
  2. src/app/robots.ts — 允許全站爬取,指向 sitemap
  3. JSON-LD — 已在 Phase 2.7 完成

驗證:

curl http://localhost:3000/sitemap.xml
curl http://localhost:3000/robots.txt

輸出: SEO 基礎完備


Phase 4:內容填充(15 分鐘)

動作:

  1. 將準備好的文章轉為 Markdown + frontmatter 格式
  2. 放入 content/blog/
  3. 如果不足 3 篇,由 AI 根據品牌定位生成補充文章
  4. 每篇文章在 localhost 驗證渲染

文章品質檢查清單:

  • Frontmatter 欄位完整(title、description、date、category/tags)
  • 標題不超過 60 字元
  • Description 不超過 150 字元
  • 文章結構有 h2 分段
  • 列表頁和首頁都有出現

輸出: 至少 3 篇文章上線


Phase 5:部署(10 分鐘)

  1. git init + .gitignore(node_modules、.next、.env)
  2. GitHub 建立 private repo
  3. git add -A && git commit && git push
  4. Vercel Dashboard → Import → 選 repo
  5. Vercel 自動部署 + 綁定自訂域名
  6. Cloudflare DNS 授權(CNAME 指向 Vercel)

驗證:

  • 自訂域名可訪問
  • HTTPS 正常
  • 所有頁面 200

輸出: 網站上線,推 main 自動部署


Phase 6:收尾文檔(5 分鐘)

建立 docs/index.md(事實源)和 docs/work_progress.md(工作日誌),記錄:

  • 技術棧版本
  • 目錄結構
  • 部署資訊
  • 已發布文章清單
  • Roadmap

客製化清單

以下是每個新專案需要改的所有項目,集中在這裡方便一次性替換:

項目檔案說明
品牌名layout.tsx, Header, Footer, page.tsx全域搜尋替換
色系globals.css, 各元件 className主色 + 強調色 + 分類色
GA4 IDlayout.tsxGA_ID 常數
域名layout.tsx (metadataBase), sitemap.ts, robots.ts, blog/[slug] (JSON-LD)全域搜尋替換
Logopublic/logo.svg, Header.tsx路徑引用
Hero 素材public/, HeroVideo.tsx路徑引用
文章分類CategoryBadge.tsx, globals.css, blog frontmatter分類名稱 + 色系 + 圖標
首頁文案page.tsxHero 標題、Pillars、Brand Statement
OG 描述layout.tsx, page.tsxSEO 文案
Faviconsrc/app/favicon.ico, src/app/apple-icon.png從 Logo 生成(見 Phase 1)
深色 proseglobals.css (.prose-dark)深色背景頁面的文章/FAQ/條款渲染

時間分配(實測)

Phase分鐘佔比
0 — 初始化56%
1 — 素材就位22%
2 — 核心頁面2529%
3 — SEO56%
4 — 內容填充1518%
5 — 部署1012%
6 — 收尾文檔56%
溝通 + 微調1821%
合計85100%

最大的時間開銷是 Phase 2(核心頁面)和溝通微調。如果品牌素材和文案提前備齊,溝通時間可以壓到 5 分鐘以內,總時間有機會壓到 60 分鐘。


首次撰寫:2026-04-12,基於 VarianceLab 實戰案例。 v1.2 更新:2026-04-12,補充深色主題、半透明導航列、favicon 生成、prose-dark 樣式(基於 SetupBro 實作經驗)。 模板源:SetupBro(~/setupbro/)