搜尋觀點

你不知道的GSC:抓取與渲染——3行代碼監控JS渲染,加速動態站點SEO收錄提升!

SEO策略SEO指南

做技術SEO的同學,大概率都踩過這個坑:頁面HTML能被谷歌抓取,可JS動態渲染的核心內容(比如商品列表、工具頁面)卻遲遲不收錄,排查時完全找不到方向——谷歌什麼時候渲染的、渲染耗時多久、有沒有執行完JS,全是“黑盒”。

推薦一種「自定義元標籤監控渲染」的方法,用來觀察谷歌無頭瀏覽器WRS服務的渲染時間。

谷歌怎麼渲染JS頁面的?

很多人以為谷歌爬蟲會“實時爬取+實時渲染”,其實它的邏輯是“分步走”,這也是收錄異常的核心原因:

1. 第一步:抓取靜態HTML:谷歌爬蟲先快速抓取頁面的純HTML代碼(不含JS執行結果),效率優先,此時動態內容是空白的;

2. 第二步:異步調度渲染:抓取完成後,谷歌會把頁面丟給專門的“網頁渲染服務(WRS)”,用無頭Chromium瀏覽器執行JS,生成完整內容,這裏提醒一點,為了提高效率,WRS服務可能會忽略緩存頭的有效時間,繼續使用老的js渲染,避免這一點你需要使用動態生成的js文件命名,一般框架會支持如:main.1875499476.js;

3. 關鍵痛點:抓取和渲染是兩個獨立環節,時間差可能很大,可能超過24小時,且渲染過程的狀態(成功/失敗/耗時),無法通過日誌或工具查看。

簡單説:你以為谷歌看到了完整頁面,其實它可能還沒開始渲染,或者渲染到一半就中斷了——這就是很多JS頁面“爬而不錄”的核心真相。

核心方案:3個自定義元標籤,破解渲染黑盒

既然谷歌不主動暴露渲染狀態,我們就主動給頁面加“監控器”:通過服務器端和客户端代碼,在頁面中插入3個自定義元標籤,分別記錄「抓取時間」「渲染時間」「渲染耗時」,直接把“黑盒”變“白盒”。

核心邏輯拆解如下:

  • 「服務器時間標籤」:記錄谷歌抓取HTML時的服務器時間,作為時間錨點;
  • 「客户端時間標籤」:通過JS實時更新,記錄谷歌WRS渲染頁面時的實際時間;
  • 「渲染耗時標籤」:計算JS從開始執行到核心內容渲染完成的時間,判斷渲染是否完整。

通過這三個標籤的數值,我們能快速判斷3個關鍵問題:

1. 谷歌有沒有渲染頁面?(客户端時間≠服務器時間,説明已渲染);

2. 渲染延遲多久?(客户端時間-服務器時間,就是渲染等待時長);

3. 渲染是否完整?(正常渲染耗時5秒左右,過短説明JS執行中斷,可以使用dev工具測試一下頁面正常速度是多少)。

5大主流平台:參考代碼

WordPress、Shopify,還是Next.js、Nuxt.js,可以參考下面的eg.注意僅供思路參考,實際使用需要根據實際項目結構而定,不要在非技術指導下輕易嘗試生產環境!!

  1. 原生PHP+JS(通用獨立站)
      
  1. WordPress(無插件依賴)

直接編輯當前主題的「header.php」,插入以下代碼

      
  1. Shopify(Liquid模板)

登錄Shopify後台,編輯「Layout/theme.liquid」,在 中插入:

{% assign server_date = "now" | date: "%Y-%m-%d %H:%M:%S" %}      
  1. Next.js(React框架,適配SSR/SSG)

在「pages/_document.js」(App Router為app/layout.js)中配置

import Document, { Html, Head, Main, NextScript } from 'next/document'; class MyDocument extends Document { static async getInitialProps(ctx) { const initialProps = await Document.getInitialProps(ctx); // 服务器时间 const serverDate = new Date().toLocaleString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' }); return { ...initialProps, serverDate }; } render() { const { serverDate } = this.props; return (      {/* JS逻辑同上,通过dangerouslySetInnerHTML内联执行 */}