為了首頁載入速度,許多部落格採用「列表模式 + 點擊展開全文」的設計。但搜尋引擎爬蟲若只抓到標題列表,將無法索引文章核心內容,影響 SEO。開發者常想到的對策:**偵測 User-Agent,若為爬蟲則直接輸出完整內容**。
⚠️ **警告**:此做法屬於 **Cloaking(偽裝/隱形內容)**,違反 Google、百度等搜尋引擎的站長指南,可能導致**降權、移除索引、甚至封禁網站**。本文說明實作原理僅供學術研究,**強烈不建議用於生產環境**。
<?php
function is_crawler(): bool {
$ua = strtolower($_SERVER['HTTP_USER_AGENT'] ?? '');
$spiders = [
'googlebot', // Google
'baiduspider', // 百度
'yahoo! slurp', // 雅虎
'yodaobot', // 有道
'msnbot', // Bing
'bingbot', // Bing 新版
'slackbot', // Slack 預覽
'twitterbot', // Twitter 卡片
'facebookexternalhit', // Facebook 分享
'linkedinbot', // LinkedIn
'telegrambot', // Telegram
'whatsapp', // WhatsApp
'applebot', // Apple
'duckduckbot', // DuckDuckGo
'ia_archiver', // Alexa/Internet Archive
];
foreach ($spiders as $bot) {
if (strpos($ua, $bot) !== false) return true;
}
return false;
}
<?php
if (is_crawler()) {
// 爬蟲:直接輸出完整文章內容(有利 SEO 索引)
echo $full_article_html;
} else {
// 真人:列表模式,需點擊載入(優化首屏速度)
echo $article_list_html;
}
| 風險 | 說明 |
|---|---|
| 算法自動偵測 | Googlebot 會模擬真實瀏覽器渲染 JS、比對 DOM、甚至從不同 IP/UA 重複抓取比對差異 |
| 人工審核 | 搜尋品質評分員會手動檢查舉報網站 |
| 處罰嚴重 | 從關鍵字降權到整站移除索引(De-index),恢復極難 |
| 信任崩塌 | 一旦被標記為垃圾/作弊站,其他搜尋引擎也會跟進 |
首次請求直接輸出完整 HTML(含文章內容),後續互動由 JS 接管。Next.js、Nuxt.js、Laravel + Inertia 皆支援。
針對爬蟲 UA,透過無頭瀏覽器渲染靜態快照(如 Puppeteer、Rendertron),但 Google 官方已**不再推薦**,建議直接 SSR。
列表頁輸出 Article Schema.org JSON-LD,包含 headline、description、articleBody(前 200 字)、url 指向完整頁。爬蟲能理解內容結構,真人體驗不受影響。
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "文章標題",
"description": "文章摘要...",
"articleBody": "文章前 200 字內容...",
"url": "https://example.com/post/123",
"datePublished": "2024-01-15",
"author": {"@type":"Person","name":"作者"}
}
</script>
每篇文章擁有獨立 URL(/post/123),列表頁僅顯示摘要連結。爬蟲順著連結抓取全文,真人享受流暢列表。這是**最標準、最安全**的架構。
針對靜態/半靜態頁面設定 Cache-Control: public, max-age=300, stale-while-revalidate=60,配合 Cloudflare/CloudFront,首屏速度極快,無需犧牲 SEO。
**User-Agent 判斷輸出不同內容 = Cloaking = 高風險作弊。** 搜尋引擎演算法已極其成熟,任何試圖「欺騙爬蟲」的手段終將被識破。正途唯一:優質內容 + 語意化 HTML + 結構化資料 + 快速載入 + 良好 UX。這才是長久之計。