微信客服
Telegram:guangsuan
电话联系:18928809533
发送邮件:[email protected]

無法在測試工具中預覽 Google 豐富搜尋結果丨如何修復豐富搜尋結果錯誤

本文作者:Don jiang

簡單說就是:你用Google官方測試工具查,顯示“沒檢測到複合式搜尋結果”;

但去看Search Console(搜尋控制台),又提示“缺少 offer 欄位”(比如產品價格、庫存這些資訊沒標對)。

因為Google抓取時只有不到40%的頁面能完整執行JavaScript,很多用JS動態生成的產品(Product)標記,根本沒被爬蟲抓到。

比如有個賣食品的電商網站,食譜(Recipe)標記裡沒加“營養成分”(nutrition)的子項(像卡路里、蛋白質含量这些),結果原本能展示的“帶營養資訊的食譜卡片”直接少了一半多(展示率跌了62%),每天少了几千次點擊。

還有家新聞網站,文章(Article)標記裡的“發布時間”(datePublished)格式寫錯了(比如寫成“2023/12/31”而不是標準的“2023-12-31”),導致熱點新聞一直沒法觸發“精選摘要”(搜尋結果頁頂部的醒目卡片),錯過了不少曝光。

如何修復複合式搜尋結果錯誤

排查步驟​

數據上看,問題分佈挺明確:約65%的預覽失敗,是因為JSON-LD代碼寫錯或者漏了必要屬性(比如該標的欄位沒標、格式不對);

20%是因為頁面用了JavaScript動態載入內容,但Google抓取時沒渲染出來;

剩下15%則是頁面載入太慢或需要登入,爬蟲根本沒讀到標記。

測試工具預設可能用舊數據快取,導致48%的新問題查不出來;就算測“即時預覽”,也只覆蓋了35%的JS生成內容,很多動態標記得到不驗證。

頁面如果網站沒開HTTPS,18%的結構化標記會被直接忽略;頁面載入超過5秒,22%的Google爬蟲會提前放棄抓取,自然讀不到你的標記。

結構化數據語法與屬性驗證

結構化數據驗證需聚焦JSON-LD語法準確性(括號/引號/逗號錯誤佔語法問題42%-31%)、必需屬性完整性(Product缺offers佔38%、Article缺datePublished佔29%)及類型嵌套規範性(如Recipe未嵌套NutritionInformation導致解析失敗率提升57%)。

JSON-LD語法錯誤

​括號與引號不匹配​​(佔語法錯誤42%):

示例錯誤代碼:

{
“@context”: “https://schema.org”,
“@type”: “Product”,
“name”: “無線耳機”,
“image”: “https://example.com/headphones.jpg”,
} // 缺少閉合大括號”}”

修復方法:使用代碼編輯器的“括號匹配”功能(如VS Code的Bracket Pair Colorizer插件),逐行檢查{}[]""的對稱性。

冗餘逗號​​(佔語法錯誤31%):

示例錯誤代碼:

“offers”: {
“@type”: “Offer”,
“price”: “99.99”, // 此處末尾逗號冗餘
“priceCurrency”: “USD”
},

修復方法:JSON規範不允許物件/陣列最後一個屬性後加逗號,需手動刪除或通過線上格式化工具(如JSONLint)自動修正。

數據類型錯誤​​(佔語法錯誤27%):

如日期格式未採用ISO 8601標準(應為"2023-10-05T08:00:00+08:00"而非"2023/10/05"),或價格未用字串類型("price": 99.99應改為"price": "99.99")。

Schema.org明確要求,數值型屬性需匹配對應類型的格式,否則會被判定為“無效值”。

必需屬性完整性

不同Schema類型對“必需屬性”有明確要求,缺失任一屬性均會導致複合式結果無法生成。

根據Google《複合式搜尋結果指南》(2024),以下為高頻標記的必需屬性及缺失後果:

標記類型 必需屬性 缺失率 後果示例
Product name, image, offers 38% 無法顯示價格與購買連結
Article headline, datePublished, author 29% 不觸發“精選摘要”
LocalBusiness name, address, telephone 35% 地圖卡片無法關聯位置
Recipe name, description, recipeIngredient 41% 不顯示食材清單與步驟

案例​​:某美食網站因Recipe標記缺失recipeIngredient(必需屬性),複合式結果展示率從12%降至5%。

修復後補充食材列表(如"recipeIngredient": ["麵粉 200g", "雞蛋 2個"]),3天內展示率恢復至10%。

類型嵌套規範

複雜Schema類型需通過嵌套實現語義關聯,未正確嵌套會導致Google無法識別屬性歸屬。

Schema.org 2023年數據顯示,​​嵌套錯誤佔屬性驗證失敗的49%​​,典型場景包括:

​Recipe的營養資訊​​:需嵌套在NutritionInformation類型下,而非直接作為Recipe的屬性:

// 錯誤(未嵌套)
“calories”: “350 kcal”

// 正確(嵌套NutritionInformation)
“nutrition”: {
“@type”: “NutritionInformation”,
“calories”: “350 kcal”,
“fatContent”: “12g”
}

Event的地點資訊​​:需嵌套Place類型,包含地址、地理座標等子屬性:

“location”: {
“@type”: “Place”,
“name”: “會議中心”,
“address”: {
“@type”: “PostalAddress”,
“streetAddress”: “123 Main St”,
“addressLocality”: “San Francisco”
},
“geo”: {
“@type”: “GeoCoordinates”,
“latitude”: “37.7749”,
“longitude”: “-122.4194”
}
}

驗證方法​​:使用Schema.org驗證器的“Nested Entities”標籤頁,檢查嵌套層級是否符合規範(如NutritionInformation必須是Recipe的直接子類型)。

Google與Schema.org雙校驗

​Google結構化數據測試工具​​:側重“複合式結果相容性”,會提示“此標記無法生成複合式結果”及具體原因(如“缺少offers欄位”)。​​Schema.org驗證器​​:側重“語義規範性”,會檢查屬性值是否符合

Schema定義(如priceCurrency是否為ISO 4217貨幣代碼)。

測試工具的局限性

Google 測試工具受快取機制(48%舊數據殘留)、即時測試覆蓋率(35%-50%動態內容),數據顯示,僅依賴測試工具可能遺漏22%的真實問題。(49字)

快取機制

Google 結構化數據測試工具預設快取頁面標記,​​48%的測試結果會顯示48小時前的舊數據​​(Search Console 幫助中心,2023)。

若你近期修改了JSON-LD標記,但未清除快取,測試結果可能仍顯示修改前的錯誤狀態。

案例​​:某教育網站更新課程資訊的Course標記後,測試工具仍提示“缺少description欄位”——清除快取後,結果恢復正常。

​應對方法​​:

  • 每次測試前手動點擊工具右上角“清除快取”(圖示為垃圾桶),避免歷史數據干擾。
  • 對高頻更新頁面(如電商產品頁),建議測試時附加時間戳參數(如?v=20240315),強制工具抓取最新版本。
即時測試

即時測試功能(輸入URL後切換“即時測試”選項卡)會模擬Googlebot抓取並執行頁面JavaScript,但其能力有限:​​僅能捕獲35%-50%的動態生成標記​​(Google 工程師部落格,2024)。

未捕獲的原因包括:

  • JS執行延遲:標記由非同步請求(如fetch)生成,測試工具等待時間不足(預設超時3秒)。
  • 框架相容性:React/Vue等SPA框架的hydration過程可能未被完全模擬,導致標記未注入DOM。

某新聞站點使用React生成Article標記,即時測試顯示“無豐富結果”,但實際頁面渲染後標記存在——因JS執行耗時4.2秒,超過工具預設等待時間。

應對方法

  • 檢查頁面JS執行時長(用Lighthouse或Chrome DevTools的Performance標籤),確保標記在3秒內載入完成。
  • 對SPA站點,使用window.__INITIAL_STATE__等預渲染技術,或在測試工具中手動觸發JS執行(如點擊頁面互動按鈕)。
覆蓋範圍報告

測試工具的“覆蓋範圍”報告(位於結果頁底部)會顯示Google對頁面的理解,但僅提供​​表層結論​​(如“未找到符合條件的標記”),未深入解釋具體錯誤。

​常見模糊提示及含義​​:

提示語 可能原因 驗證方法
“部分標記被忽略” 嵌套錯誤或屬性類型不匹配 用Schema.org驗證器檢查嵌套層級
“標記未關聯到頁面主體” mainEntityOfPage缺失或指向錯誤 檢查標記是否包含mainEntityOfPage欄位
“資源無法存取” 圖片/URL為HTTP或404狀態 手動存取標記中的URL驗證狀態碼

​案例​​:某食譜網站測試時顯示“部分標记被忽略”,Schema驗證器發現Recipenutrition欄位未正確嵌套在NutritionInformation類型下,修正後覆蓋範圍報告更新為“全部標記有效”。

第三方工具補充

僅依賴Google測試工具可能遺漏22%的真實問題(HTTP Archive,2023),需結合其他工具交叉驗證:

  • Schema.org驗證器:檢查語義規範性(如priceCurrency是否符合ISO 4217代碼)。某跨境電商因priceCurrency誤用“US”而非“USD”,Google測試工具未報錯,但Schema驗證器捕獲該問題,修復後富結果展示率提升19%。
  • curl命令測試:通過curl -H "User-Agent: Googlebot" URL模擬Googlebot抓取,查看原始HTML中的標記是否被正確輸出(尤其適用於伺服器端渲染頁面)。

頁面可存取性與抓取

頁面可存取性是富媒體結果生成的“底層地基”——若Googlebot無法抓取或訪問頁面,標記也不會被識別

Google 2023年《搜尋品質指南》明確,60%的富結果預覽失敗與頁面可存取性問題強相關

公開可存取性

頁面需對Googlebot完全公開,無登入牆、會員限制或地域封鎖。

數據顯示,15%的預覽失敗源於頁面僅對特定用戶開放(Search Console 幫助中心,2024)。

場景

  • 某會員制美食網站將Recipe詳情頁設為“註冊後查看”,導致Googlebot無法抓取recipeIngredient等必需欄位,測試工具始終顯示“無結果”;解除登入限制後,3天內富結果展示率從0恢復至8%。
  • 某跨境美妝品牌針對東南亞用戶隱藏價格資訊,導致Product標記中的offers欄位(含價格)無法被抓取,修復後東南亞區富結果點擊量提升25%。

驗證方法

  • 用Chrome隱身模式(禁用Cookies和登入狀態)訪問頁面,確認內容完整可見;
  • 用AccessiBe模擬不同地區IP,檢查是否有地域定向限制(如“僅美國用戶可見”)。
頁面載入速度

HTTP Archive 2023年報告顯示,載入時間超過5秒的頁面,22%的爬蟲會提前終止抓取

具體影響

  • Product標記位於產品頁面底部,載入超時會直接讓Googlebot錯過該部分內容;
  • 非同步載入的Article標記(如AJAX生成的作者資訊)若耗時過長,同樣會被忽略。

驗證

  • 用PageSpeed Insights測試行動端/桌面端的“LCP(最大內容渲染)”指標——需控制在2.5秒內(Google的效能要求);
  • 優化動作:
    • 壓縮圖片:用WebP格式替代JPG/PNG,可減少50%檔案大小(如1MB的JPG轉為WebP後僅400KB);
    • 延遲載入非關鍵資源:將底部廣告、側邊欄評論等設置為“捲動到可視區域再載入”;
    • 啟用Gzip壓縮:通過伺服器配置(如Nginx的gzip on;)減少HTML/CSS檔案體積。

案例:某電子產品電商頁面初始載入時間為6.2秒,LCP為3.8秒。優化後載入時間降至3.5秒,LCP<2秒,Googlebot抓取成功率從75%提升至92%,Product富結果展示率增加19%。

HTTPS加密

所有與結構化數據相關的URL(圖片、詳情頁連結、offers.url)必須使用HTTPS。

Google明確要求,非HTTPS資源可能被判定為“不安全”,導致18%的預覽失敗(Google 開發者文檔,2023)。

常見錯誤

  • 圖片連結用HTTP(如http://example.com/headphones.jpg),導致Productimage欄位無效;
  • Articleurl屬性指向HTTP版本(如http://blog.example.com/post-123),被Google忽略。

驗證

  • 手動檢查所有標記中的URL,確保以“https://”開頭;
  • 用SSL Labs測試網站SSL證書——需確保無過期、配置錯誤(如未啟用TLS 1.2及以上)。

修復:某時尚網站修復所有HTTP圖片連結後,Product富結果展示率從12%提升至30%,Search Console中“標記資源無效”的錯誤提示完全消失。

修復常見錯誤類型

修復常見錯誤需針對四大類問題:

  • JSON-LD語法錯誤(佔38%)
  • 必需屬性缺失(29%)
  • 嵌套不規範(22%)
  • 動態內容未捕獲(11%)

數據顯示,逐一修復後,富結果預覽成功率可從45%提升至82%(Google 2024案例)

JSON-LD語法錯誤

JSON-LD語法錯誤佔結構化數據問題的38%,主要為括號不匹配(42%)、冗餘逗號(31%)、數據類型錯誤(27%),修復後標記識別率可提升至95%以上(Google 2024數據)。

Google 2024年《結構化數據錯誤報告》顯示,38%的富結果預覽失敗源於JSON-LD語法錯誤

括號與引號不匹配

括號({})和引號("")的不匹配是最常見的語法問題,佔所有JSON-LD錯誤的42%(Schema.org 2023驗證數據)。

這類錯誤通常源於編碼時的疏忽,比如遺漏閉合符號或引號未成對。

具體案例:某線上教育平台的Course標記曾因漏寫閉合大括號,導致Google測試工具顯示“無效JSON”:

{
“@context”: “https://schema.org”,
“@type”: “Course”,
“name”: “數字行銷基礎”,
“description”: “學習SEO與SEM技巧” // 遺漏了最後的”}

修復方法:

  • 使用代碼編輯器的“符號匹配”功能(如VS Code的Bracket Pair Colorizer插件),不同顏色的括號會直觀顯示未閉合的位置;
  • 用線上工具(如JSONLint)貼上JSON代碼,工具會直接標註錯誤位置(如“Expected ‘}’, got ‘EOF’”)。

修復效果:該平台修正後,Course標記被成功解析,富結果展示率從0恢復至7%,Search Console中“無效結構化數據”的錯誤提示消失。

冗餘逗號

冗餘逗號指對象({})或數組([])的最後一個屬性後多加了逗號,佔語法錯誤的31%(Google開發者文檔,2024)。

典型場景:某電商網站的Offer標記中,price欄位後多了一個逗號:

“offers”: {
“@type”: “Offer”,
“price”: “99.99”, // 末尾冗餘逗號
“priceCurrency”: “USD”
}

解析器遇到這個逗號後,會認為後面還有屬性,但實際沒有,因此判定整個offers對象無效。

修復方法

  • 用JSONLint等工具自動格式化代碼,工具會刪除冗餘逗號;
  • 手動檢查:對象/數組的最後一個屬性後絕對不能有逗號(JSON規範嚴格要求)。

某服飾電商曾因冗余逗號導致30%的產品標記無效,修復後有效標記率提升至95%,Product富結果展示量增加了22%。

數據類型錯誤

JSON-LD要求屬性值嚴格匹配Schema.org定義的數據類型,這類錯誤佔語法錯誤的27%(Schema.org 2023)。

常見錯誤包括:

  • 日期格式錯誤:未使用ISO 8601標準(應為"2023-10-05T08:00:00+08:00",而非"2023/10/05""October 5, 2023");
  • 數值類型錯誤:價格、評分等屬性用了數字而非字串(如"price": 99.99應改為"price": "99.99""ratingValue": 4.5需保留字串格式)。

案例說明:某美食部落格的Article標記中,datePublished用了"2023-10-05"(正確),但reviewRating.ratingValue誤寫為數字4.5而非字串"4.5"

Google測試工具提示“無效的評分值”,導致特色摘要無法生成。

修復後,評分值改為字串,特色摘要展示率從10%提升至28%。

驗證依據:Schema.org明確規定,ratingValue需為“Text”類型(字串),即使內容是數字,也需用引號包裹——這是很多開發者容易忽略的細節。

必需屬性缺失

必需屬性缺失佔結構化數據錯誤的29%,不同標記類型缺失率差異明顯(Product缺offers佔38%、Article缺datePublished佔29%),修復後80%以上富結果可恢復展示(Google 2024案例),按Schema規範補全欄位。

Product

Product是電商最常用的標記,其必需屬性為name、image、offers(Schema.org定義)。

其中offers(商品 offer)是核心——需包含price(價格)、priceCurrency(貨幣)、availability(庫存)等子屬性,缺失率高達38%(Google Search Console 2023數據)。

缺失後:某服飾電商的Product標記長期缺失offers,導致:

  • 測試工具顯示“無豐富結果”;
  • 搜尋結果中僅展示標題與描述,無價格、購買按鈕等資訊;
  • 點擊率比競品低40%(競品均展示完整商品卡片)。

修復動作:補充offers欄位,明確價格與庫存:

“offers”: {
“@type”: “Offer”,
“price”: “89.99”,
“priceCurrency”: “USD”,
“availability”: “https://schema.org/InStock”
}3天內富結果展示率從0恢復至15%,搜尋點擊率提升22%,轉化量增加18%。

Article

Article(文章/部落格)的必需屬性是headline(標題)、datePublished(發布日期)、author(作者)

其中datePublished是Google判斷內容“新鮮度”的關鍵——缺失率29%(Google 2024內容生態報告)。

缺失後:某科技部落格的Article標記未加datePublished,導致:

  • 無法觸發“特色摘要”(Featured Snippet);
  • 搜尋結果中文章排名落後於同期發布的競品(競品均顯示發布日期);
  • 用戶信任度下降——無日期的內容被認為“過時”。

修復動作:補充ISO 8601格式的發布日期:

“datePublished”: “2024-03-15T10:00:00+08:00”特色摘要展示率從10%提升至35%,文章點擊率增加25%,且搜尋排名進入前3位的概率提升19%。

LocalBusiness

LocalBusiness(在地商家)的必需屬性是name、address、telephone。其中address(詳細地址)是Google關聯地圖卡片的核心——缺失率35%(Google My Business 2023數據)。

缺失後:某咖啡店的LocalBusiness標記未填寫完整地址(僅寫了城市),導致:

  • 搜尋結果中無地圖卡片;
  • 用戶無法直接導航到店;
  • 在地流量比周邊競品低50%。

修復動作:補充PostalAddress類型的詳細地址:

“address”: {
“@type”: “PostalAddress”,
“streetAddress”: “123 Main St”,
“addressLocality”: “Seattle”,
“addressRegion”: “WA”,
“postalCode”: “98101”
}地圖卡片24小時內上線,在地搜尋流量提升40%,到店轉化量增加28%。

Recipe

Recipe(食譜)的必需屬性是name、description、recipeIngredient(食材清單)。

其中recipeIngredient是食譜的“核心內容”——缺失率41%(AllRecipes 2024用戶調研)。

缺失後:某美食網站的Recipe標記未列食材,導致:

  • 不顯示食材清單與步驟;
  • 用戶無法判斷食譜是否符合需求;
  • 收藏量比競品低60%。

修復動作:補充結構化的食材列表:

“recipeIngredient”: [
“麵粉 200g”,
“雞蛋 2個”,
“牛奶 150ml”,
“糖 50g”
]食材清單與步驟展示率從8%提升至25%,收藏量增加32%,且被Google選為“熱門食譜”的概率提升21%。

類型嵌套不規範

結構化數據的“類型嵌套”是Schema.org的邏輯——父類型通過包含子類型傳遞語義關聯,比如Recipe(食譜)需通過nutrition欄位嵌套NutritionInformation(營養資訊)子類型,才能讓Google理解“熱量屬於這道菜”。

嵌套錯誤的本質

Schema.org的類型體系是“樹狀層級”:父類型定義核心屬性,子類型擴展具體細節。

例如:

  • Recipe(父類型)是“菜譜內容”,需通過nutrition欄位關聯NutritionInformation(子類型),傳遞“熱量、脂肪含量”等細節;
  • Event(父類型)是“活動資訊”,需通過location欄位關聯Place(子類型),傳遞“地址、座標”等位置資訊。

錯誤後果:若跳過子類型直接將屬性放在父類型下,Google會判定“屬性歸屬不明”,從而忽略該部分內容。

比如某美食網站的Recipe標記直接寫"calories": "350 kcal",而非嵌套在NutritionInformation下,Google測試工具提示“無法識別熱量欄位”,導致富結果中不顯示營養成分。

4個常見的嵌套錯誤

(1)Recipe:營養資訊未嵌套NutritionInformation

錯誤場景:某美食部落格的Recipe標記直接將熱量、脂肪寫在父類型下:

{
“@type”: “Recipe”,
“name”: “番茄炒蛋”,
“nutrition”: { // 錯誤:nutrition是父類型屬性,需嵌套子類型
“calories”: “350 kcal”,
“fatContent”: “12g”
}
}
問題:Google無法識別nutrition下的屬性屬於“營養資訊”,因此不顯示在富結果中。

修復動作:將營養資訊嵌套在NutritionInformation子類型下:

{
“@type”: “Recipe”,
“name”: “番茄炒蛋”,
“nutrition”: {
“@type”: “NutritionInformation”, // 添加子類型
“calories”: “350 kcal”,
“fatContent”: “12g”
}
}效果:該部落格的食譜富結果中,營養成分展示率從8%提升至25%,用戶收藏量增加32%(AllRecipes 2024數據)。

(2)Event:地點資訊未嵌套PlacePostalAddress

錯誤場景:某會議網站的Event標記直接寫地址字串,未做層級嵌套:

{
“@type”: “Event”,
“name”: “數字行銷峰會”,
“location”: “舊金山會議中心” // 錯誤:location需嵌套Place與PostalAddress
}
問題:Google無法解析地址的結構化資訊,因此不顯示地圖卡片。

修復動作:嵌套Place(地點)與PostalAddress(郵政地址)子類型:

{
“@type”: “Event”,
“name”: “數字行銷峰會”,
“location”: {
“@type”: “Place”,
“name”: “舊金山會議中心”,
“address”: {
“@type”: “PostalAddress”,
“streetAddress”: “123 Mission St”,
“addressLocality”: “San Francisco”,
“addressRegion”: “CA”,
“postalCode”: “94105”
},
“geo”: {
“@type”: “GeoCoordinates”,
“latitude”: “37.7890”,
“longitude”: “-122.4030”
}
}
}效果:修復後,搜尋結果中顯示地圖卡片,事件點擊率提升40%,報名量增加28%(Google Events 2023數據)。

(3)Product:評價資訊未嵌套ReviewAggregateRating

錯誤場景:某電商平台的Product標記直接寫評價分數,未嵌套AggregateRating(聚合評價)子類型:

{
“@type”: “Product”,
“name”: “無線耳機”,
“reviewScore”: “4.5” // 錯誤:reviewScore需嵌套在AggregateRating下
}問題:Google無法識別“4.5分”是產品的聚合評價,因此不顯示星級評分。

修復動作:嵌套AggregateRating子類型:

{
“@type”: “Product”,
“name”: “無線耳機”,
“aggregateRating”: {
“@type”: “AggregateRating”,
“ratingValue”: “4.5”,
“reviewCount”: “120”
}
}效果:該產品的富結果中,星級評分展示率從15%提升至50%,轉化量增加19%(Shopify 2024數據)。

(4)Article:作者資訊未嵌套Person

錯誤場景:某科技部落格的Article標記直接寫作者名字,未嵌套Person(個人)子類型:

{
“@type”: “Article”,
“name”: “2024年SEO趨勢”,
“author”: “張三” // 錯誤:author需嵌套Person子類型
}問題:Google無法識別作者的身分資訊,因此不顯示“作者”標籤。

修復動作:嵌套Person子類型:

{
“@type”: “Article”,
“name”: “2024年SEO趨勢”,
“author”: {
“@type”: “Person”,
“name”: “張三”,
“url”: “https://example.com/author/zhangsan”
}
}效果:文章的“作者”標籤展示率從20%提升至60%,用戶信任度提升25%(Google Authorship 2023數據)。

動態內容未捕獲

動態內容指通過JavaScript(JS)、AJAX或單頁應用(SPA)框架即時生成的內容——比如React/Vue構建的頁面、無限滾動的文章列表,或點擊按鈕後加載的食譜步驟。

這類內容的標記(如Product價格、Article評論)不會出現在初始HTML中,而是由客戶端JS動態注入。

但Googlebot的抓取機制是“先抓初始HTML,再執行JS”,若JS執行太慢或內容依賴客戶端渲染,導致富結果無法生成。

Google工程師部落格(2024)指出,40%的動態頁面因未做預渲染,標記未被爬蟲讀取

動態內容抓取不到

Googlebot的抓取流程分兩步:

  1. 下載初始HTML:獲取頁面的基礎結構(不含JS生成的內容);
  2. 執行JS:模擬瀏覽器運行JS,獲取動態內容(需等待JS執行完成)。

但爬蟲的“耐心”有限:

  • 若JS執行時長超過3秒,Googlebot可能提前終止,導致動態標記未被讀取(Lighthouse 2023數據);
  • 若內容依賴“用戶互動”(如點擊“加載更多”),爬蟲會跳過這部分內容。

案例:某新聞站點用React構建SPA,Article的評論區由JS動態加載。

測試工具顯示“無豐富結果”——實際評論標記存在,但Googlebot抓取時JS未執行完成,評論內容未被包含在初始HTML中。

3個高頻問題

(1)SPA(單頁應用):初始HTML為空,標記未被包含

SPA是“一個頁面,動態替換內容”,初始HTML通常是空的<div id="root"></div>,所有內容由JS注入。

若未做預渲染,Googlebot抓取的初始HTML不含任何結構化數據,標記自然無法被識別。數據:某旅遊網站的Tour標記由React生成,初始HTML為空。

Search Console顯示“未找到符合條件的標記”,富結果展示率為0。修復後用伺服器端渲染(SSR),初始HTML直接包含Tour的完整標記,展示率從0升至28%。

(2)AJAX加載:內容異步獲取,爬蟲未等加載完成

AJAX(異步JavaScript與XML)用於動態加載內容(如無限滾動的商品列表、評論),但爬蟲不會等待AJAX請求完成——若內容加載時間超過爬蟲的“逾時閾值”(約3秒),標記會被遺漏。

案例:某電商平台的“猜你喜歡”商品列表用AJAX加載,Product標記由JS動態生成。

測試工具顯示“部分標記被忽略”——Googlebot抓取時AJAX請求未完成,商品資訊未被包含。

修復後用預渲染工具(Prerender.io)生成包含完整商品列表的HTML,標記識別率從60%提升至95%。

(3)延遲加載:內容觸發式顯示,超過爬蟲等待時間

延遲加載(Lazy Load)用於優化頁面速度,比如滾動到可視區域再加載HowTo(操作指南)的步驟、Recipe的食材清單。但若延遲時間過長(如超過2秒),爬蟲可能錯過這部分內容。

數據:某家居網站的HowTo標記(如“安裝書架”步驟)延遲2秒加載。

Google測試工具提示“無法識別步驟欄位”——爬蟲未等待加載完成。

修復後將延遲時間縮短到1秒內,步驟展示率從18%提升至43%。

三類修復方法

(1)預渲染:伺服器端生成完整HTML,爬蟲直接抓取

預渲染指在伺服器端運行JS,生成包含完整動態內容的HTML,再將這個HTML發送給爬蟲。

工具如Prerender.io或Nginx預渲染模組,可自動識別爬蟲請求,返回預渲染的HTML。

效果:某電商SPA用Prerender.io預渲染後,Product標記的抓取成功率從75%升至92%,富結果展示率從5%升至28%。

(2)伺服器端渲染(SSR):用框架直接渲染JS內容

SSR指用Next.js(React)、Nuxt.js(Vue)等框架,在伺服器端將JS組件渲染為HTML字串,再發送給客戶端。

這樣初始HTML就包含完整標記,爬蟲無需等待JS執行。

案例:某新聞網站用Next.js重構,Article的評論區由SSR生成。

Googlebot抓取時直接獲取到評論的Comment標記,特色摘要展示率從10%提升至50%,評論互動量增加35%。

(3)優化JS執行時長:確保標記3秒內加載

若無法做預渲染或SSR,需優化JS執行時間,確保動態標記在3秒內加載完成。

用Lighthouse或Chrome DevTools的Performance標籤,檢查標記的加載時間:

  • 壓縮JS文件:用Webpack或Rollup壓縮代碼,減少文件大小;
  • 延遲加載非關鍵JS:將不影響標記的腳本(如廣告、統計)設置為asyncdefer
  • 緩存資源:用CDN緩存JS文件,減少加載時間。

數據:某媒體網站優化JS執行時長從4.2秒到2.5秒,Googlebot抓取成功率從68%升至90%,Article富結果展示率提升22%。

最後我想說:一行正確的JSON、一個規範的嵌套、一次及時的預渲染,都可能讓富媒體結果從“無”到“有”。

滚动至顶部