網站收錄

蜘蛛看到的可能不是用戶看到的:JS 渲染頁面的收錄自查

同一個地址,用戶打開是完整图文,蜘蛛拿到的源碼里可能只有一行“加载中”。本文先说清抓取與渲染的区別,再给出判断頁面是否依赖 JS 渲染的自查方法、收錄表現上的常见信号,以及從關键内容直出到分頁改造的處理顺序,帮你判断問题出在渲染前還是渲染後。

網站收錄

蜘蛛看到的可能不是用戶看到的:JS 渲染頁面的收錄自查

同一個地址,用戶打開能看到完整的图文,蜘蛛抓到的 HTML 里却可能只有一行“加载中”和一個空容器。這不是玄学,而是渲染方式决定的:内容是通過 JavaScript 在浏览器里生成的,還是直接寫在服務器返回的源碼里。搞清楚這一点,很多“迟迟不收錄”“只收了首頁”的問题就有了排查方向。

蜘蛛先拿到的是源碼,其次才是渲染结果

抓取和渲染是两件事。爬虫請求一個 URL 时,第一步拿到的是服務器返回的 HTML 源碼;如果内容需要 JS 执行才會出現,就要進入第二步——用渲染服務执行脚本,再看到完整頁面。第二步确實存在,但成本更高、排队更久,也不是所有頁面都能顺利走到這一步。

  • 源碼里就有正文的頁面:抓一次就能判断内容,收錄鏈路最短。
  • 源碼里只有壳、正文靠接口填充的頁面:需要渲染後才看得见内容,鏈路更長,也更容易在渲染被跳過或失敗时“空手而归”。

所以問题往往不在“JS 能不能被收錄”,而在“蜘蛛到底有没有拿到你的正文”。

先確認頁面属于哪一類

  1. 直接查看源碼(右键查看源代碼,或用 curl 拉一次),搜尋正文里的關鍵詞,看能否命中。
  2. 在浏览器里禁用 JavaScript 再打開同一頁,观察還剩多少内容。
  3. 用不同 UA 請求同一地址,對比返回的 HTML 是否有差异,有些站点對爬虫做了特殊處理。
  4. 對照服務器日誌,看普通抓取請求和渲染請求是否都出現過,频率如何。
判断标准很简單:如果正文關鍵詞在源碼里搜不到,就不要預設蜘蛛也一定能看到。

内容“藏在 JS 里”的常见形態

  • 前端路由的單頁應用,路由切換不产生新的 HTML,栏目頁和詳情頁共用同一份壳。
  • 懒加载:滚動到可视区域才請求内容和图片,首屏之外的部分在源碼中不存在。
  • 评论区、相關推荐、參數表格等由接口异步填充,正文完整但辅助内容缺失。
  • Tab 切換、折叠面板:預設隐藏的部分是否存在于 DOM 中,各站情况不一。
  • 無限滚動列表:後續内容没有獨立 URL,蜘蛛無法逐條進入。

收錄表現上的几個信号

  • 收錄量長期停在首頁和少數几個栏目頁,詳情頁几乎不進索引。
  • 索引里的标题和描述是站点預設模板,而不是頁面自己的内容。
  • 快照或缓存下来的頁面接近空白,只剩導航和頁脚。

這些信号並不专属于渲染問题,但如果同时出現在一個 JS 站点上,優先往這個方向查,比反复改标题更有效。

處理顺序:先低成本,再動架构

  1. 把關键内容(标题、正文、主要内鏈)改為服務端直出,這是最稳的一步,改動范围可控。
  2. 做不到全站直出时,至少保證詳情頁和栏目頁的首屏内容在源碼中可见。
  3. 列表和分頁改用真實連結,让每個重要頁面都有可被跟随的入口,而不是纯 JS 事件跳轉。
  4. 懒加载内容提供替代路径,比如静態分頁或獨立的詳情 URL。
  5. sitemap 只放真實可訪問、内容可见的地址,避免把空壳頁也交出去。
  6. 改完後观察日誌與索引變化,给渲染和重新抓取留出時間,不要一天内反复調整结构。

渲染是必要條件,不是收錄保證

让内容在源碼里可见,只是把頁面送進了正常的候選池。最终能否進索引,仍取决于内容质量、與站内其他頁面的重复程度以及整体站点信号。反過来,如果连正文都没被拿到,再谈優化标题、内鏈和更新频率都是空轉。