網站收錄

靠 JavaScript 加载的内容没進索引:從原始 HTML 到渲染结果的核對顺序

頁面在浏览器里看得到,抓取却像拿到了一份空壳,常见原因是正文、内鏈或 canonical 由 JavaScript 生成。這篇文章按原始 HTML、渲染方式、被屏蔽的资源、懒加载内容、URL 發現五步核對,帮你判断問题出在渲染鏈路的哪一段,以及哪些内容應该放回初始 HTML。

網站收錄

靠 JavaScript 加载的内容没進索引:從原始 HTML 到渲染结果的核對顺序

頁面在浏览器里打開一切正常,正文、图片、内鏈都在,但抓取工具拿到的却像一份空壳 HTML——标题有了,内容区是空的,導航連結也点不開。這類問题多半不是“收錄慢”,而是内容压根没出現在搜尋引擎能讀到的那份文档里。下面按五步核對,找到卡住的环节。

先接受一個前提:你看到的頁面和抓取到的頁面可能不是同一份

現代搜尋引擎會执行 JavaScript,但执行是有代價的:需要排队、需要下载脚本、需要調用接口,還有超时限制。這意味着“能渲染出来”和“稳定渲染出来”是两回事。有些頁面在測試工具里渲染正常,在真實抓取时因為接口超时或资源被拦,渲染结果就是残缺的。所以第一步不是改代碼,而是先確認差异到底有多大。

第一步:把原始 HTML 和渲染後结果分開看

大多數站長工具和 URL 检查功能都會给出两個视图:一個是服務器直接返回的原始 HTML,一個是执行脚本後的渲染结果。重点看三样東西:

  • 正文主体:原始 HTML 里有没有完整的文字内容,還是只有一個空的容器标簽。
  • 站内連結:導航、面包屑、文章底部的相關阅讀,是否是 JS 注入的。
  • canonical、hreflang、meta robots:這些信号如果只在渲染後才出現,容易與頁面實际狀態對不上。

如果這三样在原始 HTML 里都缺失,問题就不在收錄环节,而在渲染鏈路。

第二步:分清頁面的渲染方式,處理路径完全不同

服務端渲染(SSR)

HTML 由服務器生成後再返回。這是最稳的方式,抓取时不需要执行脚本就能拿到完整内容。如果這類頁面仍然没被收錄,方向應该轉向 URL 規范、内容质量或抓取配額,而不是怀疑渲染。

動態渲染

對普通用戶返回 JS 版本,對爬虫返回预渲染版本。要注意预渲染内容與用戶看到的是否一致,以及预渲染服務是否稳定。一旦维護中断,爬虫拿到的可能就是空壳。

纯客戶端渲染(CSR)

HTML 几乎是空的,靠脚本拉資料拼頁面。風險最高:脚本执行失敗、接口超时、渲染队列拥挤,任何一环出問题都會導致内容不可见。關键頁面建议逐步改成 SSR,而不是長期依赖渲染碰运气。

第三步:核對渲染所需资源有没有被挡住

這是一處很容易被忽略的坑。robots.txt 里為了减少抓取,常有人顺手屏蔽脚本目錄或接口路径,比如 /static/js/、/assets/、/api/。對普通用戶没有影响,對渲染却是致命的:脚本拉不下来,接口調不通,頁面自然渲染不出内容。

核對方法很简單:把 robots.txt 里的 Disallow 規則逐條對照渲染實际依赖的资源,看有没有誤伤。同时確認這些资源没有返回 403 或 5xx。

第四步:判断内容是否藏在交互之後

折叠面板、選項卡、点击“展開全文”、無限滚動加载,這些交互在用戶体驗上是加分項,但内容可能不在初始渲染结果里。如果核心正文需要点击才能出現,收錄结果里就可能只有标题和一小段引導语。

判断标准很直接:不点击、不滚動,頁面里能讀到多少有效信息?如果核心结论、關键資料、主要内鏈都需要操作才能看到,就值得把一部分内容挪回初始 HTML。

第五步:URL 的發現路径是否也依赖 JavaScript

抓取和收錄是两個阶段,先要發現 URL。如果新頁面的入口只存在于 JS 生成的列表里,爬虫未必能顺着找到。可以用禁用脚本的方式打開頁面,看連結是否還留在 HTML 中。常见补法是在服務端輸出的 HTML 里保留一层基础連結,比如分類頁第一頁、最新文章列表。

一份可以照着走的核對清單

  1. 對比原始 HTML 與渲染後结果,列出差异項。
  2. 確認頁面属于 SSR、動態渲染還是 CSR。
  3. 逐條检查 robots.txt 是否屏蔽了脚本或接口资源。
  4. 關閉脚本後浏览頁面,看核心内容與連結還剩多少。
  5. 检查折叠、選項卡、懒加载里的内容是否属于關键信息。
  6. 確認 canonical、meta robots 出現在原始 HTML 中。
  7. 用無 JS 环境驗證站内連結是否可被發現。
把關键内容放進初始 HTML,通常是成本最低、收益最确定的一步。渲染方式可以慢慢重构,但正文、内鏈和收錄類标簽不该長期依赖脚本生成。

做完這五步,你大概率能定位到是资源被拦、渲染超时,還是内容本来就藏在交互里。剩下的工作就是把该回到 HTML 的部分挪回去,然後按正常节奏观察抓取和索引狀態的變化。