前言
網頁程式設計經歷了數十年的演變,從早期純粹的後端渲染,發展到今日百花齊放的前端框架生態系。理解這兩種開發模式的差異,不僅有助於選擇適合的技術架構,更能因應 SEO 需求做出正確決策。本文將從後端程式設計的起源談起,逐步介紹到現代前端框架,最後探討如何在 SPA(Single Page Application)架構下實現良好的 SEO 效果。
───
一、後端程式設計的演進
1.1 傳統後端渲染模式
在網際網路發展初期,網頁的渲染工作完全由伺服器端負責。當使用者發送請求時,伺服器會執行程式邏輯、查詢資料庫、將資料嵌入 HTML 模板,最後將完整的 HTML 頁面回傳給瀏覽器。這種模式稱為 Server-Side Rendering(SSR)。
1.2 經典後端技術
ASP(Active Server Pages)
微軟於 1996 年推出的伺服器端腳本引擎,使用 VBScript 或 JScript 撰寫。ASP 檔案以 .asp 為副檔名,伺服器會解析其中的程式碼並輸出 HTML。雖然功能有限,但對於 Windows 生態系的早期動態網頁開發扮演重要角色。
PHP(PHP: Hypertext Preprocessor)
1995 年誕生的 PHP,憑藉其簡單易學的特性,成為早期最普及的後端語言之一。PHP 檔案可以直接在 HTML 中嵌入程式碼,伺服器會執行這些程式碼並輸出結果。WordPress、Drupal 等知名 CMS 系統皆基於 PHP 開發。
<?php
$title = "歡迎光臨";
echo "<h1>$title</h1>";
?>
JSP(JavaServer Pages)
Sun Microsystems(現 Oracle)推出的 Java 技術,將 Java 程式碼嵌入 HTML 頁面中。JSP 適合企業級應用,具備強大的 Java 生態系支援,但學習門檻相對較高。
1.3 後端渲染的優缺點
| 項目 | 說明 |
|---|---|
| SEO 友善 | 搜尋引擎爬蟲可直接取得完整 HTML 內容 |
| 首次載入快 | 瀏覽器收到完整 HTML,可立即渲染 |
| 安全性高 | 商業邏輯在伺服器執行,不會暴露給使用者 |
| 伺服器負擔 | 每次請求都需要伺服器處理,擴展成本高 |
| 互動體驗 | 頁面切換需重新載入,使用者體驗較差 |
───
二、前端程式設計的崛起
2.1 JavaScript 的發展歷程
1995 年,Brendan Eich 在 10 天內創造了 JavaScript,最初只是用於網頁的簡單互動效果。然而隨著瀏覽器效能提升與 Web 技術演進,JavaScript 逐漸成為網頁開發的核心語言。
關鍵里程碑:
- 2006 年:jQuery 發布,簡化 DOM 操作與跨瀏覽器相容性
- 2009 年:Node.js 問世,JavaScript 可在伺服器端執行
- 2010 年:AngularJS 發布,開啟 SPA 時代
- 2013 年:React 發布,引入虛擬 DOM 概念
- 2014 年:Vue.js 發布,提供漸進式框架選擇
2.2 SPA(Single Page Application)架構
SPA 是一種網頁應用程式架構,使用者與應用程式互動時,頁面不會重新載入。瀏覽器初次載入時會取得一個基本的 HTML 殼層,後續所有內容都透過 JavaScript 動態渲染。
運作流程:
- 瀏覽器向伺服器請求頁面
- 伺服器回傳最小化的 HTML + JS bundle
- JavaScript 在瀏覽器端執行,動態生成 DOM
- 使用者互動時,透過 AJAX/Fetch 與 API 溝通
- 僅更新需要變動的 DOM 元素
2.3 主流前端框架詳解
Angular
Google 維護的完整前端框架,採用 TypeScript 開發。Angular 提供完整的解決方案,包含路由、表單驗證、HTTP 客戶端等,適合大型企業專案。
- 優點:架構完整、適合大型團隊、TypeScript 原生支援
- 缺點:學習曲線陡峭、檔案體積較大
- 適用場景:企業級應用、管理後台
// Angular 元件範例
import { Component } from '@angular/core';
@Component({
selector: 'app-user-list',
template: `
<ul>
<li *ngFor="let user of users">
{{ user.name }}
</li>
</ul>
`
})
export class UserListComponent {
users = [
{ name: 'Alice' },
{ name: 'Bob' },
{ name: 'Charlie' }
];
}
React
Facebook(Meta)開發的 JavaScript 函式庫,專注於 UI 層的渲染。React 使用虛擬 DOM 技術,透過 Diff 演算法最小化實際 DOM 操作,大幅提升效能。
- 優點:生態系豐富、學習資源多、彈性高
- 缺點:需搭配其他函式庫組成完整方案
- 適用場景:各種規模的網頁應用、行動端
// React 元件範例
import { useState, useEffect } from 'react';
function UserList() {
const [users, setUsers] = useState([]);
useEffect(() => {
fetch('/api/users')
.then(res => res.json())
.then(data => setUsers(data));
}, []);
return (
<ul>
{users.map(user => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
}
export default UserList;
Vue.js
尤雨溪建立的漸進式 JavaScript 框架,設計理念是「漸進增強」。Vue 可從簡單的 CDN 引入開始,逐步擴展到完整的 SPA 架構。
- 優點:學習門檻低、文件友善、效能優異
- 缺點:生態系規模較 React 小
- 適用場景:中小型專案、快速原型開發
<!-- Vue 單檔元件範例 -->
<template>
<ul>
<li v-for="user in users" :key="user.id">
{{ user.name }}
</li>
</ul>
</template>
<script setup>
import { ref, onMounted } from 'vue';
const users = ref([]);
onMounted(async () => {
const res = await fetch('/api/users');
users.value = await res.json();
});
</script>
<style scoped>
li {
padding: 8px 0;
border-bottom: 1px solid #eee;
}
</style>
框架比較表:
| 特性 | Angular | React | Vue |
|---|---|---|---|
| 學習曲線 | 陡峭 | 中等 | 平緩 |
| 框架類型 | 完整框架 | UI 函式庫 | 漸進式框架 |
| 語言 | TypeScript | JS/TS | JS/TS |
| 適合規模 | 大型專案 | 各種規模 | 中小型專案 |
| 生態系 | 完整內建 | 最豐富 | 成長中 |
───
三、前端渲染的 SEO 挑戰
3.1 搜尋引擎爬蟲的運作方式
搜尋引擎(如 Google、Bing)使用爬蟲程式來索引網頁內容。傳統爬蟲只能解析 HTML 原始碼,無法執行 JavaScript。雖然現代 Googlebot 具備 JavaScript 執行能力,但這需要額外的渲染佇列,處理時間與資源消耗都較高。
爬蟲類型比較:
| 爬蟲類型 | 運作方式 | SPA 支援 |
|---|---|---|
| 傳統爬蟲 | 僅解析 HTML 原始碼 | ❌ 不支援 |
| 現代爬蟲 | 可執行 JavaScript | ⚠️ 有限支援 |
| 渲染佇列 | 延遲處理複雜頁面 | ✅ 支援(耗時) |
3.2 SPA 的 SEO 問題
純前端渲染的 SPA 應用程式存在以下 SEO 問題:
- 首次載入空白:HTML 殼層幾乎沒有內容,爬蟲可能看不到文字
- 中繼資料缺失:title、description 等無法動態設定
- 社交分享:Facebook、Twitter 等無法正確抓取預覽資訊
- 索引延遲:JavaScript 執行需要時間,可能影響索引效率
3.3 解決方案:SSR 與 SSG
為了解決 SPA 的 SEO 問題,現代前端框架提供了伺服器端渲染(SSR)和靜態網站生成(SSG)兩種方案。
SSR(Server-Side Rendering)
伺服器端渲染是在伺服器預先執行 JavaScript,生成完整 HTML 後再發送給客戶端。
// Nuxt.js (Vue) SSR 設定
export default defineNuxtConfig({
ssr: true, // 預設啟用 SSR
app: {
head: {
title: '我的網站',
meta: [
{ name: 'description', content: '網站描述' }
]
}
}
});
// Next.js (React) SSR 範例
export default function Page({ data }) {
return <div>{data.title}</div>;
}
// 伺服器端取得資料
export async function getServerSideProps() {
const res = await fetch('https://api.example.com/data');
const data = await res.json();
return { props: { data } };
}
SSG(Static Site Generation)
靜態網站生成是在建置時預先產生所有頁面的 HTML 檔案。
// Nuxt.js 預渲染設定
export default defineNuxtConfig({
nitro: {
prerender: {
routes: ['/', '/about', '/contact']
}
}
});
// Next.js SSG 範例
export async function getStaticProps() {
const data = await getData();
return {
props: { data },
revalidate: 60 // ISR: 每 60 秒重新驗證
};
}
ISR(Incremental Static Regeneration)
ISR 是 SSG 的延伸,允許在固定時間間隔後重新生成靜態頁面,結合了靜態頁面的效能與動態內容的即時性。
───
四、SEO 最佳實踐
4.1 Meta 標籤設定
正確設定 Meta 標籤是 SEO 的基礎工作:
<head>
<!-- 基本標籤 -->
<title>網頁標題 | 網站名稱</title>
<meta name="description" content="網頁描述,建議 150-160 字元">
<meta name="keywords" content="關鍵字1, 關鍵字2, 關鍵字3">
<!-- Open Graph -->
<meta property="og:title" content="分享標題">
<meta property="og:description" content="分享描述">
<meta property="og:image" content="https://example.com/image.jpg">
<meta property="og:url" content="https://example.com/page">
<meta property="og:type" content="article">
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="分享標題">
<meta name="twitter:description" content="分享描述">
<meta name="twitter:image" content="https://example.com/image.jpg">
</head>
4.2 結構化資料
使用 JSON-LD 格式加入結構化資料,幫助搜尋引擎理解頁面內容:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "文章標題",
"author": {
"@type": "Person",
"name": "作者名稱"
},
"datePublished": "2026-03-25",
"dateModified": "2026-03-25",
"image": "https://example.com/image.jpg",
"publisher": {
"@type": "Organization",
"name": "網站名稱",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
}
}
</script>
4.3 其他 SEO 要點
- 語意化 HTML:正確使用 h1-h6、article、section、nav 等標籤
- 圖片優化:加入 alt 屬性描述、壓縮圖片尺寸、使用 WebP 格式
- URL 結構:使用清晰、可讀的 URL 路徑(如 /articles/seo-guide)
- 網站地圖:提供 sitemap.xml 供爬蟲索引
- robots.txt:設定爬蟲存取權限
- Core Web Vitals:確保頁面載入效能符合 Google 標準
- 行動裝置優先:確保響應式設計在手機版正常運作
- Canonical URL:避免重複內容問題
───
五、結論
網頁程式設計從傳統後端渲染演進到現代前端框架,每個階段都有其存在的價值與適用場景。選擇技術架構時,應考量以下因素:
| 考量因素 | 建議架構 |
|---|---|
| SEO 需求高 | 後端渲染 / SSR / SSG |
| 互動體驗要求高 | 前端框架 + SSR |
| 內容變動頻繁 | 後端渲染 / SSR |
| 開發團隊規模小 | Vue.js + Nuxt / PHP + WordPress |
| 企業級應用 | Angular / React + Next.js |
| 快速原型開發 | Vue.js / React |
現代前端框架透過 SSR、SSG、ISR 等技術,已能兼顧 SEO 需求與使用者體驗。開發者應根據專案特性、團隊能力、維護成本等因素,選擇最適合的技術方案。無論選擇哪種架構,持續關注 SEO 最佳實踐、Core Web Vitals 指標,以及使用者體驗,都是成功的關鍵。