網站收錄

蜘蛛拿到的 HTML 和你看到的頁面不一样,收錄會怎么走

浏览器打開頁面會执行脚本,搜尋蜘蛛拿到的却常常是原始 HTML,两邊的差异會直接影响收錄判断。這篇文章說明客戶端渲染、服務端渲染和预渲染對收錄的不同表現,並给出一套從查看源碼到抓取測試的排查顺序,帮你確認關键内容是否真的交到了蜘蛛手里。

網站收錄

蜘蛛拿到的 HTML 和你看到的頁面不一样,收錄會怎么走

很多站長排查收錄問题时,會把注意力放在内容和外鏈上,却忽略了一個更靠前的环节:搜尋蜘蛛抓到的那個頁面,和你用浏览器打開看到的頁面,可能並不是同一份東西。以前端渲染為主、组件异步加载的站点,這種差异尤其明顯。

為什么會出現两份不一样的頁面

浏览器打開頁面时,會先拿到一份原始 HTML,然後执行其中的脚本、請求接口、再把内容逐步填進 DOM。用戶看到的是执行完成後的结果。搜尋蜘蛛也會执行脚本,但這件事成本高、需要排队,很多情况下它先接触到的是那份還没被填满的原始 HTML。

于是同一個 URL 就有了两種形態:原始 HTML 里的内容,和渲染後頁面里的内容。收錄判断建立在哪一份上,取决于引擎的處理能力、頁面重要程度和抓取配額。差异就是從這里開始的。

三種常见做法,收錄表現差別很大

客戶端渲染的單頁應用

原始 HTML 里往往只有一個空容器和几段脚本,标题、正文、内鏈都要等脚本执行完才出現。這類頁面的收錄通常最不稳定:可能被抓到,但索引里留下的内容很薄;也可能因為脚本里的連結没有被解析,導致整批 URL 迟迟等不到下一次抓取。

服務端渲染

服務器直接返回带内容的 HTML,用戶和蜘蛛拿到的是同一份,對收錄最友好。代價是每次訪問都要由服務端拼装頁面,运维成本相對高一些。

预渲染與静態化

在构建或請求时生成静態 HTML,兼顾响應速度和内容可见性,适合變動不频繁的列表頁、詳情頁。需要注意的是预渲染缓存要能跟着内容更新,否則索引里會長期停在一個舊版本上。

排查时按這個顺序看

  1. 先看原始 HTML。用查看源碼,而不是開發者工具的元素面板,確認标题、核心正文、主要内鏈是否已经在里面。元素面板展示的是渲染後的结果,容易造成誤判。
  2. 再看渲染後的结果。用搜尋平台提供的抓取測試或渲染截图功能,看蜘蛛执行脚本後實际拿到什么。两邊都看,才能判断差异有多大。
  3. 確認内鏈是否可见。如果列表頁的連結由脚本渲染生成,蜘蛛在第一步就可能看不到通往詳情的路径,URL 發現會因此變慢。
  4. 检查元信息。标题、描述、canonical 如果是脚本動態寫入的,要確認渲染後能被正确讀取,否則收錄後呈現的标题可能和你的预期不一致。

几個容易忽略的细节

  • 首屏内容异步加载,蜘蛛抓取时接口尚未返回,頁面看起来就像被截断了。
  • 依赖用戶交互才展開的内容,比如点击查看更多,蜘蛛通常不會主動去点。
  • 脚本报错會让整頁渲染中断,线上偶發的接口故障就可能让一批頁面被抓成空壳。
  • 同一套模板下個別頁面渲染失敗,往往只体現在收錄資料上,日常訪問未必能發現。

處理原則:關键内容不依赖脚本

不必追求所有内容都静態輸出,但要让决定收錄的那部分信息在不执行脚本的情况下也能讀到:頁面主题、核心正文的首段、指向下一层的連結、基本的元信息。這些是蜘蛛判断頁面價值、决定是否繼續爬取的依據。

如果短期内無法改造架构,至少保證三点:主要導航和列表連結是可抓取的普通連結;頁面有一個稳定的、與内容相符的标题;内容更新後预渲染或缓存能被触發刷新。做到這几点,收錄的波動通常會收敛不少。

抓取與收錄是两件事,但它們共用同一份輸入。你交到蜘蛛手里的那份 HTML,决定了它有没有東西可收。