Chapter 11 / Practical Stack
把一段 Facebook 技術貼文翻譯成架構圖:Laravel + PostgreSQL + Tailwind CSS + Vue + Vanilla JS
很多實務貼文一開口就丟出一串名詞,如果沒有分層地圖,很容易只剩下「我好像都聽過,但不知道它們怎麼一起工作」。
本章就用一句真實風格的網站描述,帶你把後端框架、資料庫、樣式系統、前端互動、SEO 與 AI 可讀內容放回同一個網站架構中。
案例原文與白話翻譯
案例貼文:
「個人網站是用 Laravel + PostgreSQL + Tailwind CSS,js 因為都是叫 AI 自己寫所以有 Vue 也有 Vanilla JS,因為也有做自動生成給 SEO 跟 AI 看的東西」
白話翻譯:
這個網站用 Laravel 當主要後端框架,PostgreSQL 當資料庫,Tailwind CSS 當樣式系統;互動功能有些用 Vue,有些只用 原生 JavaScript(Vanilla JS)。同時,網站還特別做了較容易被搜尋引擎與 AI crawler 讀取的內容輸出方式,例如伺服器端產生的 HTML、結構化頁面與可索引內容。
先把所有術語放到架構圖中
flowchart TB
DB[(PostgreSQL
資料庫)] --> L[Laravel
路由 / 模板 / API / 內容生成]
L --> HTML[伺服器端輸出 HTML
SEO / AI 可讀頁面]
L --> API[JSON API]
API --> V[Vue
較複雜互動]
API --> J[Vanilla JS
輕量互動]
T[Tailwind CSS
樣式系統] --> HTML
T --> V
T --> J
U[使用者 Browser] --> HTML
U --> V
U --> J
C[Search Engine / AI Crawler] --> HTML
先抓大意:
Laravel 與 PostgreSQL 負責網站的資料與伺服器邏輯;Tailwind CSS 管畫面風格;Vue 與 Vanilla JS 管前端互動;而「給 SEO 與 AI 看」通常意味著網站不只提供互動 UI,也會提供結構清楚、可直接被讀取的內容輸出。
術語逐一拆解
| 名詞 |
類型 |
主要責任 |
在這個案例中的角色 |
| Laravel |
後端 Framework(PHP) |
處理路由、模板、驗證、後台邏輯、內容生成、API |
網站主體,很可能同時負責頁面輸出與資料介面 |
| PostgreSQL |
關聯式資料庫 |
儲存文章、標籤、用戶、設定、SEO 欄位等資料 |
內容與網站資料的長期儲存層 |
| Tailwind CSS |
CSS framework / utility-first toolkit |
快速組裝版型、間距、色彩與響應式設計 |
統一畫面風格,讓頁面與元件都能快速成形 |
| Vue |
前端 Framework / UI layer |
處理較複雜的互動、狀態變化與元件邏輯 |
例如搜尋面板、即時篩選、互動卡片、後台小工具 |
| Vanilla JS |
原生 JavaScript |
做較小型、較直接的瀏覽器互動 |
例如選單開合、複製按鈕、簡單表單驗證、class 切換 |
| AI 自己寫 JS |
開發流程 / 工作方式 |
代表程式碼是 AI 協作產出,不是網站執行時的技術層 |
這會影響程式風格是否混用,但不改變網站真正使用的執行技術 |
| SEO / AI 可讀內容 |
內容輸出策略 |
讓搜尋引擎與 AI crawler 更穩定讀到主要內容、結構與 metadata |
通常會搭配伺服器端 HTML、語意化標題、結構化資料與 sitemap |
為什麼同一個網站會同時有 Vue 與 Vanilla JS?
Vue 適合的情境
- 需要元件化的 UI。
- 畫面狀態很多,會跟著資料變動。
- 互動邏輯較長,想維持結構化管理。
Vanilla JS 適合的情境
- 只是切換 class、開合選單、綁定按鈕。
- 功能很小,不值得引入整個框架元件。
- 頁面本來就是 Laravel 伺服器端輸出的 HTML。
這種混用其實很常見:
很多網站不是從零開始就是 SPA,而是以伺服器端頁面為主,只有某些局部區塊需要比較強的互動,因此會同時存在 Vue 與原生 JS。
AI 協作的提醒:
如果 JavaScript 常由 AI 協助產出,就更需要事先規定邊界,例如「Vue 只用在互動元件」、「Vanilla JS 只做小功能」,否則專案很容易變成寫法混雜、難以維護。
「做自動生成給 SEO 跟 AI 看」通常代表什麼?
伺服器端產生 HTML
讓 crawler 一打開頁面就能看到主要文字內容,而不是只看到空殼與大量前端腳本。
結構清楚的內容頁
使用語意化標題、摘要、FAQ、分類頁與內部連結,讓搜尋引擎與 AI 系統更容易理解主題。
metadata 與索引輔助
例如 title、description、Open Graph、sitemap、結構化資料(JSON-LD / Schema.org)。
| 做法 |
目的 |
對 SEO / AI 可讀性的幫助 |
| 預先生成文章頁 / 主題頁 |
讓內容可直接被索引 |
比完全靠 client-side render 更穩定 |
| 輸出語意化 HTML |
讓內容結構清楚 |
方便 crawler 判讀標題層次與段落重點 |
| 提供 sitemap 與 metadata |
幫助發現頁面與描述內容 |
提高索引效率,也讓摘要資訊更完整 |
| 保留摘要、FAQ、分類 |
讓主題被更清楚整理 |
方便搜尋引擎與 AI 系統擷取與引用 |
這句貼文背後的完整實務流程
sequenceDiagram
participant User as 使用者 / Crawler
participant Browser as Browser
participant Laravel as Laravel App
participant DB as PostgreSQL
User->>Browser: 開啟文章頁 / 主題頁
Browser->>Laravel: 請求 HTML 頁面
Laravel->>DB: 讀取內容、摘要、SEO 欄位
DB-->>Laravel: 回傳資料
Laravel-->>Browser: 輸出 HTML + Tailwind 樣式
Browser-->>User: 顯示可讀內容
User->>Browser: 點選互動元件 / 篩選功能
Browser->>Laravel: fetch / AJAX 請求 API
Laravel->>DB: 查詢互動資料
DB-->>Laravel: 回傳資料
Laravel-->>Browser: JSON 回應
Browser->>Browser: Vue / Vanilla JS 更新局部畫面
這張圖很重要:
它說明了一件事——SEO / AI 可讀內容 與 前端互動 不是二選一。很多網站會同時保留可索引的 HTML 內容,再另外用 AJAX、Vue 或 Vanilla JS 做局部互動增強。
如果要把這個案例講給學生聽,可以怎麼總結?
- Laravel 是網站的後端主體,負責把資料與頁面組織起來。
- PostgreSQL 是資料儲存層,網站內容通常放在這裡。
- Tailwind CSS 是畫面樣式工具,不負責資料與商業邏輯。
- Vue 與 Vanilla JS 可以共存:前者做較複雜互動,後者做輕量增強。
- 「AI 幫忙寫 JS」描述的是開發流程,不是部署到網站上的執行環境。
- 「做給 SEO 跟 AI 看」通常代表網站會額外重視可索引、可閱讀、結構清楚的內容輸出。