站点运营

站点运营:JS 渲染自查,別让蜘蛛只拿到一個空壳

網站用 JavaScript 渲染内容时,蜘蛛可能只拿到空壳 HTML。本文從原始源碼检查、渲染模式選擇、連結發現和日誌驗證几個方面,整理一份可执行的 JS 渲染自查清單,帮助站点运营减少抓取障碍,让 URL 發現和内容索引更顺畅。

站点运营

站点运营:JS 渲染自查,別让蜘蛛只拿到一個空壳

很多站点在浏览器里看着正常,搜尋引擎蜘蛛拿到的 HTML 源碼里却只有加载動画和几行脚本。蜘蛛池做 URL 發現时,如果頁面正文依赖 JavaScript 渲染,抓取和索引就容易出現偏差。這篇文章不讨论框架優劣,只梳理一次可执行的 JS 渲染自查,帮你確認蜘蛛到底能拿到什么。

為什么 JS 渲染會影响 URL 發現

蜘蛛先抓取 HTML,再决定是否执行脚本、是否繼續解析連結。若首屏連結和正文都由 JS 插入,蜘蛛可能:

  • 看不到導航里的内鏈,URL 發現范围變窄;
  • 抓到的正文為空,頁面進入“無内容”判断;
  • 把同一套模板当成多份相似頁面,浪費抓取预算。

這不是说所有 JS 内容都不能被抓,而是你需要知道自己的站点属于哪種情况。

先看原始源碼,不只看渲染後頁面

打開浏览器開發者工具,查看“查看網頁源代碼”而不是 Elements 面板。或者在命令行里用 curl 拉一次 HTML,观察正文、标题、内鏈是否已经在源碼中。

  1. 搜尋頁面主标题和第一段正文,看是否出現在原始 HTML;
  2. 检查主導航、面包屑、分頁連結是否以 a 标簽存在;
  3. 查看 canonical、meta robots、hreflang 等是否由 JS 寫入;
  4. 對比關閉 JS 後的頁面,確認有没有可用的降級内容。

常见渲染模式與取舍

服務端渲染或静態生成

HTML 返回时正文和連結已经存在,蜘蛛無需执行脚本也能理解頁面。對内容頁、栏目頁、文章列表来说,這是更稳妥的預設選擇。

客戶端渲染

源碼里只有應用壳,正文和連結靠 JS 生成。蜘蛛可能延迟渲染或不渲染。若必须用 CSR,至少保證關键 URL 和主内容有可抓取的入口。

動態渲染與预渲染

根據 User-Agent 返回不同版本,或提前生成静態 HTML。注意版本之間要一致,避免给蜘蛛和用戶看到不同正文,否則容易被判定為作弊。

一份可落地的自查清單

  • 關键頁面:文章頁、栏目頁、产品頁的原始 HTML 里是否有主正文;
  • 連結發現:分頁、标簽、相關推荐是否用普通 a 連結,而不是 onclick 跳轉;
  • 元信息:title、description、canonical 是否在服務端輸出;
  • 狀態碼:JS 路由不要用 200 返回空内容,该 404 就 404;
  • 日誌驗證:观察蜘蛛抓取日誌中這些 URL 的响應大小和狀態碼,是否長期為 0 或极小;
  • 站点地图:sitemap 里只放可渲染、可索引的 URL,不要把纯 JS 空壳頁全部提交。

和蜘蛛池、站点地图怎么配合

蜘蛛池的價值在于让蜘蛛更快發現 URL,但發現之後能否抓到有效内容,取决于頁面本身。你可以把新 URL 放進 sitemap,用内鏈從已有内容頁指向它,再用日誌確認蜘蛛是否真正抓到了正文。如果日誌顯示抓取频繁但响應体很小,優先回头检查渲染方式,而不是繼續加連結。

抓取和索引没有保證。本文提到的检查只是帮你减少明顯障碍,最终是否收錄仍由搜尋引擎决定。

JS 渲染自查不需要一次改完整站。先挑一個内容栏目做對照:原始源碼有正文的頁面,和只靠 JS 渲染的頁面,在日誌里的抓取表現通常不一样。把差异记錄下来,再决定哪些模板需要改成服務端輸出或预渲染。站点运营的很多問题,都是從“蜘蛛看到的和用戶看到的不一样”開始的。